Le problème 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 dans chaque nouveau référentiel. Il y avait une tentation de modifier le fichier chaque fois qu'il ne correspondait pas aux besoins du développeur. Et nous avons commis cette faute. .editorconfig .editorconfig Il n'y a pas beaucoup d'informations sur Internet sur la façon de créer un fichier 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é solution. Merci à qui a résolu le même problème pour son projet. .editorconfig cette Adam Craven Pourquoi EditorConfig 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' pour définir les styles de codage et d'une collection de 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. un format de fichier plugins d'éditeur de texte 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 : options de configuration basées sur des fichiers ou des dossiers. EditorConfig Fichier : options de configuration au niveau du projet. Utile lorsque certains fichiers de projet résident en dehors du dossier du projet. global AnalyzerConfig 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 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. gravité 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 . 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. limitations La solution Tout d'abord, vous devez créer un nouveau projet de bibliothèque C# pour le package NuGet. Appelons-le . Ce projet contiendra les fichiers suivants : MyProject.EditorConfig fichier .props fichier .csproj fichier .editorconfig fichier .props Vous devez ajouter PropertyGroup avec les propriétés suivantes définies sur la vraie valeur : <PropertyGroup> <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild> <EnableNETAnalyzers>true</EnableNETAnalyzers> </PropertyGroup> - permet aux spécifiées dans le fichier EditorConfig d'être vérifiées dans le cadre de la construction ; EnforceCodeStyleInBuild règles de style de code est , mais définissez-le plutôt sur true pour prendre en charge les versions antérieures de .NET ; EnableNETAnalyzers true par défaut pour .NET 5.0 Comme l'une des limitations de EditorConfig est que certaines règles ont 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 : Location.None .props <PropertyGroup> <NoWarn>$(NoWarn);CA1014</NoWarn> </PropertyGroup> Spécifiez l'emplacement du fichier à copier depuis la structure de dossiers du package NuGet : .editorconfig <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 n'est pas copié. \ / .editorconfig Utilisez la tâche de 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 . Copy 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> fichier .csproj 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 et : .props .editorconfig <ItemGroup> <None Include="MyProject.EditorConfig.props" Pack="true" PackagePath="\build" /> <None Include=".editorconfig" Pack="true" PackagePath="\content\Rules" /> </ItemGroup> Construire et tester le package NuGet 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 pour compresser un package NuGet : MyProject.EditorConfig dotnet pack MyProject.EditorConfig.csproj -c Release -o out --no-restore Publiez-le dans le stockage local (dossier). doit être installé au préalable : NuGet CLI 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 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 sera écrasé sur la construction. .editorconfig .editorconfig Conclusion 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.