Dans notre organisation, nous exécutons plusieurs référentiels GitHub avec différents services Web. Tous ces projets nécessitent des règles communes pour le style du code. Nous nous sommes déplacés dans le bon sens et avons créé un projet de modèle de service qui sert de base à toutes les solutions .NET et définit une architecture commune. Il contient un ensemble de projets avec des noms et des références corrects. Cependant, nous nous sommes déplacés dans le mauvais sens et avons copié le fichier .editorconfig
dans chaque nouveau référentiel. Il y avait une tentation de modifier le fichier .editorconfig
chaque fois qu'il ne correspondait pas aux besoins du développeur. Et nous avons commis cette faute.
Il n'y a pas beaucoup d'informations sur Internet sur la façon de créer un fichier .editorconfig
commun et de le distribuer sur plusieurs référentiels. Le sentiment divin a dit qu'il devait s'agir d'un package NuGet. Après une longue période de recherche sur Google, nous avons trouvé cette solution. Merci à Adam Craven qui a résolu le même problème pour son projet.
EditorConfig aide à maintenir des styles de codage cohérents pour plusieurs développeurs travaillant sur le même projet dans différents éditeurs et IDE. Le projet EditorConfig se compose d' un format de fichier pour définir les styles de codage et d'une collection de plugins d'éditeur de texte qui permettent aux éditeurs de lire le format de fichier et de respecter les styles définis. Les fichiers EditorConfig sont facilement lisibles et fonctionnent bien avec les systèmes de contrôle de version.
Dans le monde .NET, les règles d'analyse de code ont diverses options de configuration. Vous spécifiez ces options sous forme de paires clé-valeur dans l'un des fichiers de configuration d'analyseur suivants :
Fichier EditorConfig : options de configuration basées sur des fichiers ou des dossiers.
Fichier global AnalyzerConfig : options de configuration au niveau du projet. Utile lorsque certains fichiers de projet résident en dehors du dossier du projet.
Vous pouvez définir la gravité des avertissements du compilateur ou des règles de l'analyseur dans un fichier EditorConfig avec la syntaxe suivante :
dotnet_diagnostic.<rule ID>.severity = <severity>
La définition de la gravité d'une règle dans un fichier EditorConfig est prioritaire sur toute gravité définie dans un ensemble de règles ou dans l'Explorateur de solutions.
Dans certains projets, il existe un mélange de fichiers de configuration locaux et globaux. De plus, EditorConfg a certaines limitations dans le monde .NET également spécifiées dans cet article dans la section des limitations . Nous avons essayé dans les deux sens et avons fait des allers-retours avec ces deux approches. Et finalement décidé de passer d'une manière simple à utiliser uniquement EditoConfig pour nos projets.
Tout d'abord, vous devez créer un nouveau projet de bibliothèque C# pour le package NuGet. Appelons-le MyProject.EditorConfig
. Ce projet contiendra les fichiers suivants :
.props
.csproj
.editorconfig
Vous devez ajouter PropertyGroup avec les propriétés suivantes définies sur la vraie valeur :
<PropertyGroup> <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild> <EnableNETAnalyzers>true</EnableNETAnalyzers> </PropertyGroup>
EnforceCodeStyleInBuild
- permet aux règles de style de code spécifiées dans le fichier EditorConfig d'être vérifiées dans le cadre de la construction ;EnableNETAnalyzers
esttrue par défaut pour .NET 5.0 , mais définissez-le plutôt sur true pour prendre en charge les versions antérieures de .NET ;
Comme l'une des limitations de EditorConfig est que certaines règles ont Location.None
et ne peuvent pas être spécifiées dans un fichier EditorConfig. Si vous n'utilisez pas le fichier Global AnalyzerConfig comme nous le faisons, vous auriez la possibilité de désactiver ces règles dans le fichier .props
:
<PropertyGroup> <NoWarn>$(NoWarn);CA1014</NoWarn> </PropertyGroup>
Spécifiez l'emplacement du fichier .editorconfig
à copier depuis la structure de dossiers du package NuGet :
<ItemGroup> <EditorConfigFilesToCopy Include="$(MSBuildThisFileDirectory)../content/Rules/.editorconfig" /> </ItemGroup>
Soyez prudent avec les symboles
\
et/
dans la chaîne du chemin d'accès au fichier sur différentes plates-formes. Il nous a vraiment fallu beaucoup de temps pour comprendre pourquoi le fichier.editorconfig
n'est pas copié.
Utilisez la tâche de Copy
MSBuild pour copier le fichier dans le dossier du projet .NET en cours de génération. Cette cible est définie pour s'exécuter avant la cible MSBuild BeforeBuild
.
<Target Name="CopyEditorConfig" BeforeTargets="BeforeBuild"> <Message Text="Copying the .editorconfig file from '@(EditorConfigFilesToCopy)' to '$(SolutionFolder)'"></Message> <Copy SourceFiles="@(EditorConfigFilesToCopy)" DestinationFolder="$(SolutionFolder)" SkipUnchangedFiles="true" UseHardlinksIfPossible="false" /> </Target>
Par défaut, lors de la compression, les fichiers NuGet commençant par un point sont ignorés. Pour éviter cela, vous devez ajouter le code suivant au fichier .csproj
:
<PropertyGroup> <NoDefaultExcludes>true</NoDefaultExcludes> </PropertyGroup>
Après cela, vous devez inclure les fichiers .props
et .editorconfig
:
<ItemGroup> <None Include="MyProject.EditorConfig.props" Pack="true" PackagePath="\build" /> <None Include=".editorconfig" Pack="true" PackagePath="\content\Rules" /> </ItemGroup>
Lorsque tout le travail est terminé, vous pouvez publier le package NuGet sur le stockage local et vérifier qu'il fonctionne.
Exécutez la commande suivante dans le dossier du projet MyProject.EditorConfig
pour compresser un package NuGet :
dotnet pack MyProject.EditorConfig.csproj -c Release -o out --no-restore
Publiez-le dans le stockage local (dossier). NuGet CLI doit être installé au préalable :
nuget add out/MyProject.EditorConfig.1.0.0.nupkg -Source /Users/igorlopushko/test_nuget_expand/ -Expand
Spécifiez un dossier cible avec le paramètre -Source
.
Enregistrez le chemin d'accès au package NuGet local :
dotnet nuget add source /Users/igorlopushko/test_nuget_expand/
Pour ajouter un package NuGet local au projet cible, exécutez cette commande dans le dossier du projet cible :
dotnet add package MyProject.EditorConfig -s /Users/igorlopushko/test_nuget_expand/
Lorsque vous créez votre projet cible, vous obtenez le fichier .editorconfig
dans le répertoire racine de ce projet. Il sera écrasé à chaque fois que vous créerez un projet. Même s'il a été modifié d'une manière ou d'une autre par erreur, le fichier .editorconfig
sera écrasé sur la construction.
La solution est assez simple, mais elle a facilité la vie de notre équipe. Nous avons ajouté ce package NuGet à tous nos projets et évitons la désynchronisation des styles de code dans tous les référentiels.