2015-11-05 2 views
3

Из-за ошибки в компиляторе Roslyn я не могу построить свой проект с использованием v1.0 компилятора (нет обходного пути, чтобы заставить его работать с 1.0). Однако Microsoft исправила проблему в более поздней версии компилятора.Использование специальной версии компилятора Roslyn в TeamCity

При использовании Visual Studio вы можете использовать определенную версию компилятора, добавив пакет NuGet, доступный от https://www.nuget.org/packages/Microsoft.Net.Compilers/ к вашему проекту. Это заставляет Visual Studio использовать указанную версию компилятора при создании проекта.

Однако при попытке запустить сборку на TeamCity она, похоже, не знает, использовать новую версию компилятора. Он позволяет только выбрать, какую версию Visual Studio использовать. Есть ли способ указать TeamCity, какую версию компилятора использовать вручную?

Примечание: Я использую TeamCity Professional 9.1.3 (сборка 37176) и на стадии сборки я выбрал Visual Studio 2015

Когда построен на месте, сборка осуществляется с помощью:

D:\BitBucket\LocalPackages\Microsoft.Net.Compilers.1.1.0-beta1-20150928-02\build\..\tools\csc.exe /noconfig /nowarn:1701,1702,2008 .... 

Но когда построен на TeamCity, журнал показывает:

[Csc] C:\Program Files (x86)\MSBuild\14.0\bin\csc.exe /noconfig /nowarn:1701,1702 ..... 

у меня есть аль так подтвердил, что пакет установлен как часть TeamCity сборки (до команды CSC):

[Exec] Installing 'Microsoft.Net.Compilers 1.1.0-beta1-20150928-02'. 

Является ли это просто симптом, как NuGet может вести себя по-разному в Visual Studio UI против командной строки? И если да, есть ли обходной путь?

Обновление: Я так и не понял. Запуск сборки в Visual Studio на сервере сборки работал отлично, но запуск сборки с использованием одних и тех же файлов с помощью TeamCity не сработал.

Однако Microsoft выпустила обновление VS2015 Update 1, в котором исправлена ​​моя оригинальная проблема, хотя и не эта конкретная проблема.

+0

Когда вы запускаете nuget из командной строки, вы не устанавливаете пакет, а восстанавливаете его. Таким образом, вложенный файл реквизита уже находится в csproj. Не могли бы вы попробовать запустить msbuild из командной строки TeamCity? Возможно, он по умолчанию вводит некоторые другие свойства. Кроме того, можете ли вы разместить подробный вывод сборки? Вы также могли бы попытаться создать msbuild самостоятельно в агенте сборки и проверить, соответствует ли это правильной версии csc. – Tamas

ответ

0

Пакет Microsoft.Net.Compilers использует стандартную оснастку Nuget. В частности, в пакете есть папка build, которая содержит реквизит. Этот файл реквизита вводится в файл csproj и отвечает за изменение исполняемого файла csc на тот, который находится в пакете.

Если вы используете msbuild 14, тогда .props-файл изменяет CscToolPath и CscToolExe, чтобы указать на csc.exe в пакете. Так что вам просто нужно убедиться, что TeamCity использует msbuild 14.

Какую версию TeamCity вы используете? В документации 9.1 говорится, что он поддерживает msbuild 14 (msbuild 2015). Если вы используете более старую версию, вы все равно можете использовать msbuild 14 из командной строки.

Смежные вопросы