首页 > 解决方案 > 无法在修改后的 C1 CMS 上添加或修改数据类型

问题描述

由于 C1 CMS 的内置图像调整器无法放大图像,我添加了修改后的图像调整器库并修改了以下行:

// using Composite.Core.WebClient.Media;
using Composite.Core.WebClient.Media.Modded;

修改后的文件有:

C:\NET\vhosts\C1.CMS.6.6\Website\Composite\services\Media\ImageManipulator.ashx
C:\NET\vhosts\C1.CMS.6.6\Website\Renderers\ShowMedia.ashx

修改后的图像缩放器源代码位于文件夹下:

App_Code\ImageResizerModded

在此处输入图像描述

现在一切都很完美......直到我尝试添加新数据类型或修改任何数据类型。当我这样做时,我得到了一个错误:

在此处输入图像描述

该行是未改动的原始源代码,可以完美运行:

在此处输入图像描述

Stackoverflow 的答案是关于=>语法的:

在此处输入图像描述

我不知道这里出了什么问题以及如何解决它。唯一的解决方法是临时删除 ImageResizerModded 文件夹,修改/添加数据类型,然后取消删除该文件夹。文件夹被删除期间在线站点(图片)会影响一段时间。

我该如何解决这个问题?

标签: c#c1-cms

解决方案


这是由于 C1 CMS 使用的编译器执行静态检查,如果您所做的更改将编译为硬编码到旧的编译器版本,而不是当前的 Roslyn 编译器,否则会在 bin 文件夹中提供。

在您的情况下,C1 CMS 在此方法中编译 app_code in-memory https://github.com/Orckestra/C1-CMS-Foundation/blob/67275baf443c303623fd1f1ab43721a8e0efdd4f/Composite/Core/Types/CodeCompatibilityChecker.cs#L63,但快速搜索显示CSharpCodeProvider在 6 个不同的地方使用https://github.com/Orckestra/C1-CMS-Foundation/search?q=CSharpCodeProvider&unscoped_q=CSharpCodeProvider

这种使用CSharpCodeProvider将需要替换为Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider

所以你看到的行为是预期的,你可以通过

  1. 在您发现自己的数据类型更改期间临时删除文件
  2. 不要在 app_code 中使用 C# 6 或更新版本
  3. 在已编译的程序集中使用 C# 6 或更高版本发布代码
  4. 使用静态数据类型(C# 接口)而不是动态

推荐阅读