El problema En nuestra organización, ejecutamos varios repositorios de GitHub con diferentes servicios web. Todos estos proyectos requieren reglas comunes para el estilo del código. Nos movimos en la dirección correcta y creamos un proyecto de plantilla de servicio que es la base para todas las soluciones .NET y define una arquitectura común. Contiene un conjunto de proyectos con nombres y referencias correctos. Sin embargo, nos movimos por el camino equivocado y copiamos el archivo en cada repositorio nuevo. Existía la tentación de modificar el archivo cada vez que no se ajustaba a las necesidades del desarrollador. Y nosotros hicimos esta falla. .editorconfig .editorconfig No hay mucha información en Internet sobre cómo crear un archivo común y distribuirlo en varios repositorios. El sentimiento de dios dijo que debe ser un paquete NuGet. Después de mucho tiempo de buscar en Google el problema, encontramos solución. Gracias a que resolvió el mismo problema para su proyecto. .editorconfig esta Adam Craven Por qué EditorConfig EditorConfig ayuda a mantener estilos de codificación coherentes para varios desarrolladores que trabajan en el mismo proyecto en varios editores e IDE. El proyecto EditorConfig consta de para definir estilos de codificación y una colección de que permiten a los editores leer el formato de archivo y adherirse a los estilos definidos. Los archivos EditorConfig son fáciles de leer y funcionan bien con los sistemas de control de versiones. un formato de archivo complementos de editor de texto En el mundo .NET, las reglas de análisis de código tienen varias opciones de configuración. Estas opciones se especifican como pares clave-valor en uno de los siguientes archivos de configuración del analizador: Archivo : opciones de configuración basadas en archivos o carpetas. EditorConfig Archivo : opciones de configuración a nivel de proyecto. Útil cuando algunos archivos de proyecto residen fuera de la carpeta del proyecto. Global AnalyzerConfig Puede establecer la gravedad de las advertencias del compilador o las reglas del analizador en un archivo EditorConfig con la siguiente sintaxis: dotnet_diagnostic.<rule ID>.severity = <severity> Establecer la de una regla en un archivo EditorConfig tiene prioridad sobre cualquier gravedad establecida en un conjunto de reglas o en el Explorador de soluciones. gravedad En algunos proyectos, hay una combinación de archivos de configuración locales y globales. Además, EditorConfg tiene algunas limitaciones en el mundo .NET también especificadas en este artículo en la sección de . Probamos en ambos sentidos y avanzamos y retrocedimos con estos dos enfoques. Y finalmente decidimos movernos de una manera simple para usar solo EditoConfig para nuestros proyectos. limitaciones La solución Lo primero es lo primero, debe crear un nuevo proyecto de biblioteca C# para el paquete NuGet. Llamémoslo . Este proyecto contendrá los siguientes archivos: MyProject.EditorConfig archivo .props archivo .csproj archivo .editorconfig archivo .props Debe agregar PropertyGroup con las siguientes propiedades establecidas en el valor verdadero: <PropertyGroup> <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild> <EnableNETAnalyzers>true</EnableNETAnalyzers> </PropertyGroup> : permite especificadas en el archivo EditorConfig se verifiquen como parte de la compilación; EnforceCodeStyleInBuild que las reglas de estilo de código es , pero configúrelo en verdadero para admitir versiones anteriores de .NET; EnableNETAnalyzers verdadero de forma predeterminada para .NET 5.0 Como una de las limitaciones de EditorConfig es que algunas reglas tienen y no se pueden especificar en un archivo EditorConfig. Si no usa el archivo Global AnalyzerConfig como lo hacemos nosotros, tendría la opción de deshabilitar esas reglas en el archivo : Location.None .props <PropertyGroup> <NoWarn>$(NoWarn);CA1014</NoWarn> </PropertyGroup> Especifique la ubicación del archivo para copiar desde dentro de la estructura de carpetas del paquete NuGet: .editorconfig <ItemGroup> <EditorConfigFilesToCopy Include="$(MSBuildThisFileDirectory)../content/Rules/.editorconfig" /> </ItemGroup> Tenga cuidado con los símbolos y en la cadena de ruta del archivo en diferentes plataformas. Realmente nos llevó mucho tiempo averiguar por qué no se copia el archivo . \ / .editorconfig Utilice la tarea de de MSBuild para copiar el archivo en la carpeta del proyecto .NET que se está compilando. Este destino está definido para ejecutarse antes que MSBuild Target. 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> archivo .csproj De forma predeterminada, cuando se empaquetan los archivos NuGet que comienzan con un punto, se ignoran. Para evitar eso, debe agregar el siguiente código al archivo : .csproj <PropertyGroup> <NoDefaultExcludes>true</NoDefaultExcludes> </PropertyGroup> Después de eso, debe incluir los archivos y : .props .editorconfig <ItemGroup> <None Include="MyProject.EditorConfig.props" Pack="true" PackagePath="\build" /> <None Include=".editorconfig" Pack="true" PackagePath="\content\Rules" /> </ItemGroup> Cree y pruebe el paquete NuGet Cuando todo el trabajo haya terminado, puede publicar el paquete NuGet en el almacenamiento local y verificar que funciona. Ejecute el siguiente comando en la carpeta del proyecto para empaquetar un paquete NuGet: MyProject.EditorConfig dotnet pack MyProject.EditorConfig.csproj -c Release -o out --no-restore Publícalo en el almacenamiento local (carpeta). debe instalarse de antemano: NuGet CLI nuget add out/MyProject.EditorConfig.1.0.0.nupkg -Source /Users/igorlopushko/test_nuget_expand/ -Expand Especifique una carpeta de destino con el parámetro . -Source Registre la ruta del paquete NuGet local: dotnet nuget add source /Users/igorlopushko/test_nuget_expand/ Para agregar un paquete NuGet local al proyecto de destino, ejecute este comando en la carpeta del proyecto de destino: dotnet add package MyProject.EditorConfig -s /Users/igorlopushko/test_nuget_expand/ Cuando construya su proyecto de destino, obtendrá el archivo en el directorio raíz de este proyecto. Se sobrescribirá cada vez que construyas un proyecto. Incluso si se modificó de alguna manera por error, el archivo se sobrescribirá en la compilación. .editorconfig .editorconfig Conclusión La solución es bastante simple, pero facilitó la vida de nuestro equipo. Hemos agregado este paquete NuGet a todos nuestros proyectos y evitamos la desincronización en estilos de código en todos los repositorios.