Cómo actualizar msbuild a C # 6?


Quiero usar C# 6 en mi proyecto (propagación nula, otras características).

He instalado VS 2015 en mi PC y funciona brillantemente y construye código de prueba como

var user = new SingleUserModel(); //all model fields are null
var test = user.User?.Avatar?["blah"];

Pero cuando envio mi proyecto al repositorio y CI comienza a compilarlo, la compilación falla debido a que ? no es compatible.

He instalado VS2015 en el servidor CI también, pero parece que no lo usa. ¿Qué puedo hacer?

CI-CruiseControl. NET Construye con C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe

Author: jessehouwing, 2015-08-14

3 answers

Asegúrate de llamar:

C:\Program Files (x86)\MSBuild\14.0\Bin\MsBuild.exe

Esa es la versión de MSBuild que viene con Visual Studio 2015 y llama al compilador de C# que entiende esto. Usted puede obtener esta versión de MSBuild en su sistema mediante la instalación de cualquier edición de Visual Studio 2015 o mediante la instalación de la independiente Microsoft Build Tools 2015 .

Agregar una referencia al siguiente paquete NuGet también forzará el uso del nuevo compilador:

Install-Package Microsoft.Net.Compilers
 152
Author: jessehouwing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-06 14:59:32

Por cierto, también puede instalar "Microsoft Build Tools 2015" en lugar de VS2015 en su servidor de compilación.

Https://www.microsoft.com/en-us/download/details.aspx?id=48159

Instala MSBuild en la misma ruta:

C:\Program Files (x86)\MSBuild\14.0\Bin\MsBuild.exe
 57
Author: MuhKuh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-13 12:40:55

Probablemente ya tengas esto funcionando, pero esto podría ayudar a alguien más en el futuro. Me encontré con esta pregunta recientemente y me hizo avanzar en la dirección correcta y, en última instancia, me llevó a una solución.

Otra posible solución para esto es actualizar manualmente los archivos de proyecto para apuntar a la versión de MSBuild con la que desea que se construyan sus proyectos.

Recientemente he pasado por una actualización del servidor de compilación de TeamCity y ya he instalado Microsoft Build Tools 2015 en se. Pensé que tenía todo en su lugar en el servidor de compilación, tenía mi solución dirigida a C # 6.0 y tenía todos los proyectos dirigidos a.net 4.6.1. Al igual que usted, todo con código específico de C # 6.0 construido muy bien en mi entorno local, pero mi servidor de compilación de TeamCity no le gustó nada.

Como han mencionado otros, he intentado usar el paquete NuGet de Microsoft.Net.Compilers. La última versión permitió que la compilación funcionara en mi servidor de compilación, pero no me permitió publicar mi código localmente (a requisito mío). Las versiones anteriores de ese paquete NuGet me dejaban publicar, pero la compilación no funcionaba.

Lo que encontré que tenía que hacer fue, en última instancia, modificar cada archivo de proyecto en mi solución para apuntar específicamente a la versión de MSBuild que podría manejar el código de C# 6.0. En cada uno de mis archivos de proyecto, encontré una línea similar a la siguiente línea:

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

Con el componente clave de esa línea siendo la porción ToolsVersion de la misma. Simplemente cambié esta línea en mi archivos de proyecto para leer lo siguiente:

<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

La diferencia aquí era que yo estaba apuntando a la versión 14, no a la 4. La versión 14.0 corresponde con Build Tools 2015. Al cambiar esto, mi servidor de compilación de TeamCity usó la versión correcta de MSBuild y pudo compilar mi código de C# 6.0.

También tuve que actualizar manualmente el nodo xml de TargetFrameworkVersion de esto para usar 4.6.1 porque VS2015 no estaba haciendo algo bien y arruinó mi compilación local, pero eso no es relevante aqui.

Por favor, que alguien me corrija si me equivoco, pero solo como referencia, creo que los números de versión son algo como esto:

4.0 = VS2012

12.0 = VS2013

14.0 = VS2015

15.0 = VS2017

Creo que si quisieras usar.net 4.7, tendrías que tener instaladas las Herramientas de compilación 2017 y tener tus proyectos dirigidos a 15.0 en lugar de 14.0, pero no he verificado esto.

 3
Author: user1059903,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-19 22:14:33