无法在修改后的 C1 CMS 上添加或修改数据类型

Cannot add or modify datatype on modified 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

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

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

Whosebug 的回答是关于 => 语法的:

我不知道这里出了什么问题,也不知道如何解决。唯一的解决方法是暂时删除 ImageResizerModded 文件夹,modify/add 数据类型,然后取消删除该文件夹。删除文件夹期间在线站点(图片)影响一段时间

我该如何解决这个问题?

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

在您的情况下,C1 CMS 在此方法中编译 app_code 内存中 https://github.com/Orckestra/C1-CMS-Foundation/blob/67275baf443c303623fd1f1ab43721a8e0efdd4f/Composite/Core/Types/CodeCompatibilityChecker.cs#L63, but a quick search shows the CSharpCodeProvider being used in 6 different places https://github.com/Orckestra/C1-CMS-Foundation/search?q=CSharpCodeProvider&unscoped_q=CSharpCodeProvider

CSharpCodeProvider 的这种用法需要替换为 Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider

所以您看到的行为是预料之中的,您可以通过

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