Подтвердить что ты не робот

Замена компилятора С# на новую сборку Roslyn

Я играю с некоторыми изменениями в Roslyn, но, к сожалению, даже немодифицированное решение сработает, когда я запустил VisualStudioSetup.Next с ошибкой, пытающейся загрузить сборку MS. Таким образом, я сделал несколько простых изменений и заменил мою машину существующими двоичными файлами и конфигурационными файлами новой сборкой. Изменения были сделаны в C:/Program Files (x86)/MSBuild/bin and Windows/Microsoft.NET/Framework64.

Замена CSC, VBCSCompiler, DLL и файлов конфигурации заставляет csc.exe выдавать ошибку при любой сборке. Он жалуется, что манифест указывает другую версию DLL CodeAnalysis.CSharp. Это не дает путь для файла или даже имени. Я заменил обе конфигурации и библиотеки DLL, которые находятся в вышеупомянутых папках с новыми сборками. Какие файлы мне нужно для фактической замены для правильной работы?

Я выполнил поиск всего диска для всех экземпляров CSC и убедился, что все конфиги указывают новую версию DLL, поэтому я не уверен, где искать сейчас.

Я знаю, что можно передать параметр в MSBuild или добавить раздел в файл csproj, чтобы указать каталог для двоичных файлов компилятора, но я хотел бы получить победу над этой штукой.

EDIT:. Поэтому я решил просто изменить номер версии для своих сборников. Выполнение его с помощью свойств сборки в VS приводит к сбою сборки. Я попытался использовать MSBuild, но в каждом проекте с этой ошибкой не получается:

"F:\Git\Repos\roslyn\src\Compilers\CSharp\csc\csc.csproj" (default target) (1) ->

F:\Git\Repos\roslyn\build\Targets\Versions.props(42,5): 

error MSB4184: The expression ""1".Substring(3)" cannot be evaluated. 

startIndex cannot be larger than length of string. 

Parameter name: startIndex F:\Git\Repos\roslyn\src\Compilers\CSharp\csc\csc.csproj]

Он строит отлично от VS.

Параметры MSBuild: /p:OfficialBuild=true /p:BuildNumber=1.3.1.60616 /p:Configuration=Release

4b9b3361

Ответ 1

Чтобы заменить компилятор в экспериментальном экземпляре Visual Studio 2017, в настоящее время мин. требуемая версия - v15.3 или новее. И необходимо установить Roslyn.Compilers.Extension.vsix, а не VisualStudioSetup.Next.

Точная информация из документации DotNet Roslyn github repo выглядит следующим образом:

CompilerExtension: этот проект можно найти в папке "Компиляторы" из "Обозревателя решений" и создает Roslyn.Compilers.Extension.vsix. Это разворачивает копию компиляторов командной строки, которые используются для выполнения реальных сборок в среде IDE. Это влияет только на сборки, инициированные из экспериментального экземпляра Visual Studio, в который он был установлен, поэтому он не повлияет на ваши обычные сборки. Обратите внимание: если вы установите именно это, IDE не будет знать о каких-либо языковых возможностях, включенных в вашу сборку. Если вы регулярно работаете над новыми языковыми функциями, вы можете рассмотреть возможность создания проектов CompilerExtension и VisualStudioSetup для обеспечения синхронизации реальной сборки и анализа в реальном времени.

Описание VisualStudioSetup.Next четко указывает на его ограничения и ожидаемое использование, которые исправляют ошибки IDE:

VisualStudioSetup.Next: этот проект можно найти в папке VisualStudio в обозревателе решений и создает Roslyn.VisualStudio.Setup.vsix. Теоретически он содержит код для подсветки функций для следующей версии VS (Dev16), но в настоящее время он не обновлен для него, поскольку отправлен Dev15/VS2017. Если вы работаете над исправлением ошибки IDE, это проект, который вы хотите использовать.

Если план заключается в замене компилятора Roslyn в экземпляре по умолчанию Visual Studio 2017, выполните следующие действия:

  • Закройте все экземпляры Visual Studio 2017.
  • Дважды щелкните пакет Roslyn.Compilers.Extension.vsix и после установки расширения установки. На этот раз он должен быть доступен в экземпляре по умолчанию.

Вышеупомянутые шаги могут быть применены и к Visual Studio Build Tools.

Остерегайтесь - если вы создаете и используете не выпущенный код, ожидайте, что он будет ошибкой даже во время этапа установки.