Je souhaite commencer à utiliser Microsoft.Net.Compilers
pour simplifier le travail avec notre serveur de génération. Cependant, je ne pouvais le faire fonctionner qu'au niveau par projet , en ajoutant le package à tous les projets.
Ceci est problématique car le paquet devrait être ajouté à chaque nouveau projet créé. Cela peut conduire à un cas où le code est compilé sur la machine du développeur (qui possède le dernier compilateur) mais échouant sur le serveur de génération. Nous avons de nombreux projets (plus de 100), ce qui est relativement courant.
Existe-t-il un moyen d'utiliser Microsoft.Net.Compilers
au niveau de la solution?
S'il n'y a pas de moyen pris en charge, existe-t-il un outil de ligne de commande que je n'aurais pas à installer sur le serveur de génération? Sinon, n'est-ce pas une utilisation prévue de ces outils?
Si dans VS 2017 (mise à jour 1, numéros de construction> = 15.1. *), Vous pouvez utiliser le mécanisme MSvu intégré PackageReference
au lieu de packages.config
qui n'était auparavant disponible que pour les types de projet standard .net core et .net. Reportez-vous à la documentation de PackageReference ainsi qu'à la publication de blog de NuGet annonçant le support, en particulier la section "Qu'en est-il des autres types de projets qui ne sont pas .NET Core?".
L'idée est de passer de l'installation d'un package à l'ajout de packages.config pour la restauration, en spécifiant simplement un élément MSBuild dans le fichier csproj. Cela peut être configuré pour les nouveaux projets dans VS: (l'animation provient du billet de blog de NuGet lié ci-dessus)
Une nouvelle fonctionnalité de MSBuild 15 est qu'il prend en charge automatiquement l'inclusion de fichiers dans la hiérarchie des répertoires ayant des noms spéciaux. Ce sont Directory.Build.props
et Directory.Build.targets
qui seront inclus avant (props) et après (cibles) le contenu de votre fichier de projet (il existe un bogue avec la version .targets
pour les projets à ciblage multiple pour lesquels un correctif est sur le point d'être publié).
Si vous créez un fichier Directory.Build.props
avec le contenu suivant au niveau de la solution, tous les projets de la hiérarchie de répertoires située en dessous hériteront de son contenu et vous pourrez imposer une dépendance NuGet à chaque projet:
<Project>
<ItemGroup>
<PackageReference Include="Microsoft.Net.Compilers" Version="2.1.0"/>
</ItemGroup>
</Project>
Cliquez avec le bouton droit sur votre solution> Gérer les packages NuGet pour la solution ...
... Ou:
Outils> Gestionnaire de packages de bibliothèque> Gérer les packages NuGet pour la solution ...
Ajoutez-le ensuite à tous les projets en recherchant votre paquet, puis en cochant la case en haut, puis en cliquant sur installer.
Source: https://stackoverflow.com/a/8653312/7007466
Créez un modèle imitant celui d'origine pour chaque type de projet dont vous avez besoin (Console, Bibliothèque, etc.) et en y ajoutant le package.
Remarque: Utilisez uniquement des caractères d'identification valides lorsque vous nommez un projet qui sera la source d'un modèle. Un modèle exporté à partir d'un projet portant des caractères non valides peut entraîner des erreurs de compilation dans les projets futurs basés sur le modèle.
Si le Kit de développement logiciel Visual Studio est installé, vous pouvez envelopper le modèle final dans un fichier .vsix pour le déploiement à l'aide du modèle de projet VSIX.
Source: https://msdn.Microsoft.com/en-us/library/xkh1wxd8.aspx
Si quelqu'un a un moyen plus facile que de créer des modèles, je le prendrai avec plaisir.