web-dev-qa-db-fra.com

Comment mettre à jour msbuild en C # 6?

Je souhaite utiliser le C # 6 dans mon projet (propagation nulle, autres fonctionnalités).

J'ai installé VS 2015 sur mon PC et cela fonctionne brillamment et construit un code de test comme

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

Mais lorsque j'applique mon projet au référentiel et que CI commence à le construire, la construction échoue à cause de ? non pris en charge.

J'ai également installé VS2015 sur le serveur CI, mais il semble qu'il ne l'utilise pas. Que puis-je faire?

CI - CruiseControl .NET construit avec C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe

103
Anna Prosvetova

Assurez-vous d'appeler:

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

C'est la version de MsBuild fournie avec Visual Studio 2015 et appelée le compilateur C # qui comprend cela. Vous pouvez obtenir cette version de MsBuild sur votre système en installant n'importe quelle édition de Visual Studio 2015 ou en installant le programme autonome Microsoft Build Tools 2015 .

Ajouter une référence au après le paquetage NuGet forcera également l’utilisation du nouveau compilateur:

Install-Package Microsoft.Net.Compilers

Veuillez noter que Install-Package choisira la dernière version disponible qui ne correspond peut-être pas à celle que vous recherchez. Avant de procéder à l'installation, veuillez consulter les notes de publication et les dépendances pour résoudre le problème sous-jacent avec la version traitée, qui dans ce cas était plus spécifique de VS 2015.

Donc pour Visual Studio 2015:

Install-Package Microsoft.Net.Compilers -Version 1.0.0
162
jessehouwing

Vous pouvez par ailleurs également installer "Microsoft Build Tools 2015" à la place de VS2015 sur votre serveur de génération.

https://www.Microsoft.com/en-us/download/details.aspx?id=48159

Il installe MSBuild dans le même chemin:

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

Cela fonctionne probablement déjà, mais cela pourrait aider quelqu'un d'autre à l'avenir. Je suis tombé sur cette question récemment et cela m'a fait avancer dans la bonne direction et a finalement conduit à une solution.

Une autre solution possible consiste à mettre à jour manuellement vos fichiers de projet afin de cibler la version de MSBuild avec laquelle vous souhaitez générer vos projets.

J'ai récemment effectué une mise à jour du serveur de génération TeamCity et j'y ai déjà installé Microsoft Build Tools 2015. Je pensais que tout était en place sur le serveur de génération, que ma solution ciblait C # 6.0 et que chaque projet ciblait .net 4.6.1. Comme vous, tout avec du code spécifique à C # 6.0 construit parfaitement dans mon environnement local, mais mon serveur de génération TeamCity ne l'aime pas du tout.

Comme mentionné par d'autres, j'ai essayé d'utiliser le package NuGet Microsoft.Net.Compilers. La dernière version de celui-ci permettait à la compilation de fonctionner sur mon serveur de build, mais elle ne me permettait pas de publier mon code localement (une de mes exigences). Les versions antérieures de ce paquet NuGet me permettraient de publier, mais la construction ne fonctionnerait pas.

Ce que j’ai trouvé à faire, c’est finalement de modifier chaque fichier de projet de ma solution pour cibler spécifiquement la version de MSBuild pouvant gérer le code C # 6.0. Dans chacun de mes fichiers de projet, j'ai trouvé une ligne similaire à la suivante:

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

le composant clé de cette ligne étant la partie ToolsVersion. J'ai simplement changé cette ligne dans mes fichiers de projet pour lire ce qui suit:

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

La différence ici était que je visais la version 14, et non 4. La version 14.0 correspond à Build Tools 2015. En le modifiant, mon serveur de génération TeamCity a utilisé la version correcte de MSBuild et a été en mesure de générer mon code C # 6.0.

J'ai également dû mettre à jour manuellement le nœud xml TargetFrameworkVersion de celui-ci pour utiliser la version 4.6.1, car VS2015 ne faisait pas correctement les choses et gâchait ma construction locale, mais ce n'est pas pertinent ici.

S'il vous plaît, corrigez-moi si je me trompe, mais juste pour référence, je pense que les numéros de version ressemblent à ceci:

4.0 = VS2012

12,0 = VS2013

14,0 = VS2015

15,0 = VS2017

Je pense que si vous voulez utiliser .net 4.7, vous devez installer Build Tools 2017 et cibler vos projets sur 15.0 au lieu de 14.0, mais je ne l’ai pas encore vérifié.

9
user1059903