¿Cómo actualizar msbuild a C # 6?

106

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

Instalé VS 2015 en mi PC y funciona de manera brillante y crea código de prueba como

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

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

También instalé VS2015 en el servidor CI, pero parece que no lo usa. ¿Que puedo hacer?

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

Anna Prosvetova
fuente
3
Para cualquiera que descargue MS Build Tools 2015 desde los enlaces que se muestran a continuación, son para una versión antigua (previa a la actualización) que tiene errores ... Encontré un enlace aquí a la Actualización 2015 3.
bdrajer

Respuestas:

164

Asegúrate de llamar:

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

Esa es la versión de MsBuild que se incluye con Visual Studio 2015 y llama al compilador de C # que comprende esto. Puede obtener esta versión de MsBuild en su sistema instalando cualquier edición de Visual Studio 2015 o instalando Microsoft Build Tools 2015 independiente .

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

Install-Package Microsoft.Net.Compilers

Tenga en cuenta que Install-Package seleccionará la última versión disponible que puede no ser la que está buscando. Antes de instalar, consulte las notas de la versión y las dependencias para resolver el problema subyacente con la versión que se está tratando, que en este caso era más específica para VS 2015.

Entonces, para Visual Studio 2015:

Install-Package Microsoft.Net.Compilers -Version 1.0.0
jessehouwing
fuente
2
¿Existe alguna preocupación acerca de que esto cause errores ya que RyuJIT o lo que sea tiene tantos errores?
Maslow
3
Solo una nota sobre esto, si está actualizando su variable env PATH, asegúrese de eliminar la ubicación anterior (por ejemplo: C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319) porque aún podría llamar a eso al ejecutar "msbuild "de cmd
TheWebGuy
2
También tuve que instalar el paquete nuget Microsoft.Net.Compilers: consulte stackoverflow.com/a/36774876/584714
DrGriff
2
¿Existe una solución para esto sin tener que instalar un paquete nuget en cada proyecto? Tengo cientos de proyectos que necesitarían esto y me parece innecesario. Parece un error en alguna parte.
Cole W
2
¿Alguien tiene una respuesta para la pregunta de @ColeW?
Zinov
61

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
MuhKuh
fuente
En mi humilde opinión, hay una causa, por qué la pregunta se relaciona con ese entorno. Mejor haz un comentario a la pregunta.
jogo
24
Como stackoverflow no me permite comentar preguntas, lo publiqué de la única forma en que el sistema me lo permite. Y si no lo encuentra útil, simplemente ignórelo. Para mí, mientras buscaba la solución en mi servidor de compilación, este era el camino a seguir, en lugar de instalar VS2015
MuhKuh
Una vez que haya instalado "Microsoft Build Tools 2015" (o "Microsoft Build Tools 2017"), también tendrá control sobre qué versión de Visual Studio desea utilizar para crear la solución: MSBuild.exe / t: Build YourSolution.sln / p : VisualStudioVersion = 14.0 [configúrelo en 10.0 para VS2010, en 14.0 para VS2015 y 15.0 para VS2017]
Alex Sanséau
Para descargar e instalar Microsoft Build Tools 2015 Update 3 , visite descargas de VS anteriores y vaya a la Redistributables and Build Toolssección.
RBT
12

Probablemente ya tenga 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 finalmente me llevó a una solución.

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

Recientemente pasé por una actualización del servidor de compilación de TeamCity y ya instalé Microsoft Build Tools 2015 en él. 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 todos los proyectos tenían como objetivo .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 a mi servidor de compilación TeamCity no le gustó nada de eso.

Como lo mencionaron otros, intenté usar el paquete Microsoft.Net.Compilers NuGet. 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 (un requisito mío). Las versiones anteriores de ese paquete NuGet me permitirían publicar, pero la compilación no funcionaría.

Lo que descubrí que tenía que hacer era modificar en última instancia cada archivo de proyecto en mi solución para apuntar específicamente a la versión de MSBuild que pudiera manejar el código 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">

siendo el componente clave de esa línea la parte de ToolsVersion . Simplemente cambié esta línea en mis archivos de proyecto para leer lo siguiente:

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

La diferencia aquí fue que 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 TeamCity usó la versión correcta de MSBuild y pudo compilar mi código C # 6.0.

También tuve que actualizar manualmente el nodo xml 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 aquí.

Por favor, 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 las Herramientas de compilación 2017 instaladas y que tus proyectos apunten a 15.0 en lugar de 14.0, pero no lo he verificado.

usuario1059903
fuente