Как в Roslyn компиляторе установить версию .Net Framework?

171
06 января 2019, 13:50

Возникла проблема, при компиляции динамического кода не могу поставить версию фреймворка.

Зависимости:

using Microsoft.CodeDom.Providers.DotNetCompilerPlatform;
using System.CodeDom.Compiler;

Вот код компиляции:

private static readonly Dictionary<string, string> ProviderOptions = new Dictionary<string, string>
{
  { "CompilerVersion", "v4.0" }
};
using (var provider = new CSharpCodeProvider())
{
  .. setting compile
  CompilerResults ResultLog = provider.CompileAssemblyFromSource(Params, SourceCode);
}

Пробую добавить так:

using (var provider = new CSharpCodeProvider(ProviderOptions))

Или даже так:

using (var provider = new CSharpCodeProvider((ICompilerSettings)ProviderOptions))

Но получаю ошибку:

System.InvalidCastException: Не удалось привести тип объекта "System.Collections.Generic.Dictionary`2[System.String,System.String]" к типу "Microsoft.CodeDom.Providers.DotNetCompilerPlatform.ICompilerSettings".

В отличие от CodeDom в котором можно ставить так версию в Roslyn почему-то не получается, как решить ?

Answer 1

За выбор фреймворка отвечает свойство CoreAssemblyFileName класса CompilerParameters. В нем должен быть путь к mscorlib или заменяющей ее библиотеке.

Если оно пусто - берется текущая версия фреймворка.

Вот так, к примеру, можно скомпилировать сборку для фреймворка 2.0:

Params.CoreAssemblyFileName = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.Windows),
    @"Microsoft.NET\Framework\v2.0.50727\mscorlib.dll"
);

При необходимости, референсные сборки для всех фреймворков можно найти в одной из этих двух папок если у вас стоит MS Build Tools (а они у вас точно стоят, чем-то же вы свой проект собираете):

  • C:\Program Files\Reference Assemblies\Microsoft\Framework\
  • C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\
READ ALSO
Поддержка JWT авторизации

Поддержка JWT авторизации

Делаю Web приложение, которое должно пускать в некоторые свои части пользователя через клиент-приложениеРешил использовать для этого JWT

167
Как отозвать JWT токен?

Как отозвать JWT токен?

Есть Web приложение с использованием JWT токенаСайт отдает Access и Refresh токены

485
Как прокрутить HScrollBar в Panel (роликом мыши)

Как прокрутить HScrollBar в Panel (роликом мыши)

Подскажите, как прокрутить HScrollBar в Panel таким образом, чтобы при наведении мыши в Panel активировался HScrollBar и ролик мыши мог им управлять?

184
Как прокрутить Panel через AutoScroll широким шагом?

Как прокрутить Panel через AutoScroll широким шагом?

Подскажите как прокрутить Panel (роликом мыши) через AutoScroll широким шагом, чтобы ширина Panel делилась на две частиК примеру ширина Panel до сужения...

190