Невозможно добавить или изменить тип данных в модифицированной 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, изменить/добавить тип данных, а затем восстановить папку. Онлайн-сайт (картинки) влияет на время удаления папки.

Как я могу решить проблему?


person Nime Cloud    schedule 04.02.2020    source источник


Ответы (1)


Это связано с тем, что компилятор, используемый C1 CMS для статической проверки того, будут ли скомпилированы внесенные вами изменения, жестко закодирован в старую версию компилятора, а не в текущий компилятор Roslyn, который иначе поставляется в папке bin.

В вашем случае C1 CMS компилирует app_code в памяти в этом методе " rel="nofollow noreferrer">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. Не используйте C# 6 или новее в app_code
  3. Отправка кода с использованием C# 6 или новее в скомпилированной сборке
  4. Используйте статические типы данных (интерфейсы C#) вместо динамических
person Pauli Østerø    schedule 04.02.2020
comment
Хорошо, я сделал ImageResizerModded.dll и скопировал в папку Bin, удалил исходную папку App_Code\ImageResizerModded. Всё хорошо! Спасибо! - person Nime Cloud; 04.02.2020