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
Respuestas:
Asegúrate de llamar:
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:
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:
fuente
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:
fuente
Redistributables and Build Tools
sección.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:
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:
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.
fuente