Я хочу использовать C # 6 в своем проекте (нулевое распространение, другие функции).
Я установил VS 2015 на свой компьютер, он отлично работает и создает тестовый код вроде
var user = new SingleUserModel(); //all model fields are null
var test = user.User?.Avatar?["blah"];
Но когда я помещаю свой проект в репо, и CI начинает его строить, сборка завершается неудачно из-за неподдерживаемого ?
.
Я также установил VS2015 на CI-сервер, но похоже, что он его не использует. Что я могу сделать?
CI - CruiseControl .NET строит с C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
Ответы:
Обязательно звоните:
Это версия MsBuild, которая поставляется с Visual Studio 2015 и вызывает компилятор C #, который это понимает. Вы можете получить эту версию MsBuild в своей системе, установив любую версию Visual Studio 2015 или установив автономные инструменты Microsoft Build Tools 2015 .
Добавление ссылки на следующий пакет NuGet также приведет к принудительному использованию нового компилятора:
Обратите внимание, что Install-Package выберет последнюю доступную версию, которая может быть не той, которую вы ищете. Перед установкой проверьте примечания к выпуску и зависимости, чтобы решить основную проблему с рассматриваемой версией, которая в данном случае была более специфичной для VS 2015.
Итак, для Visual Studio 2015:
источник
Кстати, вы также можете установить «Microsoft Build Tools 2015» вместо VS2015 на свой сервер сборки.
https://www.microsoft.com/en-us/download/details.aspx?id=48159
MSBuild устанавливается по тому же пути:
источник
Redistributables and Build Tools
раздел.Возможно, у вас это уже работает, но в будущем это может помочь кому-то другому. Недавно я столкнулся с этим вопросом, и он заставил меня двигаться в правильном направлении и в конечном итоге привел к решению.
Другое возможное решение - вручную обновить файлы проекта, чтобы настроить таргетинг на версию MSBuild, с которой вы хотите, чтобы ваши проекты были построены.
Я недавно прошел через обновление сервера сборки TeamCity, и я уже установил на него Microsoft Build Tools 2015. Я думал, что у меня все готово на сервере сборки, у меня было решение, ориентированное на C # 6.0, и у меня были все проекты, ориентированные на .net 4.6.1. Как и вы, все, что связано с кодом C # 6.0, отлично работает в моей локальной среде, но моему серверу сборки TeamCity это не нравится.
Как уже упоминалось другими, я попытался использовать пакет NuGet Microsoft.Net.Compilers. Последняя версия позволяла сборке работать на моем сервере сборки, но не позволяла мне публиковать свой код локально (мое требование). Более ранние версии этого пакета NuGet позволяли мне публиковать, но сборка не работала.
Я обнаружил, что мне нужно было в конечном итоге изменить каждый файл проекта в моем решении, чтобы специально нацелить его на версию MSBuild, которая могла бы обрабатывать код C # 6.0. В каждом из моих файлов проекта я нашел строку, похожую на следующую строку:
при этом ключевым компонентом этой строки является ее часть ToolsVersion . Я просто изменил эту строку в своих файлах проекта, чтобы читать следующее:
Разница в том, что я нацелился на версию 14, а не на 4. Версия 14.0 соответствует Build Tools 2015. Изменив это, мой сервер сборки TeamCity использовал правильную версию MSBuild и смог собрать мой код C # 6.0.
Мне также пришлось вручную обновить узел xml TargetFrameworkVersion этого, чтобы использовать 4.6.1, потому что VS2015 что-то делал неправильно и испортил мою локальную сборку, но здесь это не актуально.
Пожалуйста, поправьте меня, если я ошибаюсь, но просто для справки, я думаю, что номера версий выглядят примерно так:
4.0 = VS2012
12.0 = VS2013
14.0 = VS2015
15.0 = VS2017
Я считаю, что если вы хотите использовать .net 4.7, вам нужно будет установить Build Tools 2017 и ваши проекты ориентированы на 15.0 вместо 14.0, но я не проверял это.
источник