c# - 无法在修改后的 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 文件夹,修改/添加数据类型,然后取消删除该文件夹。文件夹被删除期间在线站点(图片)会影响一段时间。
我该如何解决这个问题?
解决方案
这是由于 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
所以你看到的行为是预期的,你可以通过
- 在您发现自己的数据类型更改期间临时删除文件
- 不要在 app_code 中使用 C# 6 或更新版本
- 在已编译的程序集中使用 C# 6 或更高版本发布代码
- 使用静态数据类型(C# 接口)而不是动态
推荐阅读
- javascript - 如何在Nodejs中循环异步函数
- r - 如何在 R 中构造嵌套的 For 循环
- feathersjs - feathers.js - 将一条记录保存到多个数据库 - mysql 和弹性搜索
- django - 通过多个多对多字段使用 Django 聚合计算一个计数
- php - 因为magento 2的这个模块不起作用?
- sql-server - T-SQL XML 解析:需要空格
- node.js - 在 Win ES 7 上使用 PM2 运行 node-red 时出现“SyntaxError: Invalid or unexpected token”
- json - 使用短期令牌将 docker 镜像推送到 GCP
- python-3.x - 我不断收到此错误:AttributeError:模块'admin'没有属性'run_admin_options'
- reactjs - 如果我访问我的网站,为什么会显示我的目录索引