paint-brush
Cómo usar Common EditorConfig como un paquete NuGetpor@igorlopushko
6,976 lecturas
6,976 lecturas

Cómo usar Common EditorConfig como un paquete NuGet

por Igor Lopushko1m2022/06/17
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

EditorConfig ayuda a mantener estilos de codificación coherentes para varios desarrolladores que trabajan en el mismo proyecto en varios editores e IDE. Los archivos EditorConfig son fáciles de leer y funcionan bien con los sistemas de control de versiones. EditorConfg tiene algunas limitaciones en el mundo .NET también especificadas en este artículo en la sección [limitaciones] de este artículo. El proyecto EditorConfig consiste en un formato de archivo** para definir estilos de codificación y una colección de complementos de edición de texto** que permiten a los editores leer el formato de archivo y adherirse a los estilos definidos.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Cómo usar Common EditorConfig como un paquete NuGet
Igor Lopushko HackerNoon profile picture

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 .editorconfig en cada repositorio nuevo. Existía la tentación de modificar el archivo .editorconfig cada vez que no se ajustaba a las necesidades del desarrollador. Y nosotros hicimos esta falla.


No hay mucha información en Internet sobre cómo crear un archivo .editorconfig 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 esta solución. Gracias a Adam Craven que resolvió el mismo problema para su proyecto.

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 un formato de archivo para definir estilos de codificación y una colección de complementos de editor de texto 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.


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 EditorConfig : opciones de configuración basadas en archivos o carpetas.

  • Archivo Global AnalyzerConfig : opciones de configuración a nivel de proyecto. Útil cuando algunos archivos de proyecto residen fuera de la carpeta del proyecto.


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 gravedad de una regla en un archivo EditorConfig tiene prioridad sobre cualquier gravedad establecida en un conjunto de reglas o en el Explorador de soluciones.


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 limitaciones . 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.

La solución

Lo primero es lo primero, debe crear un nuevo proyecto de biblioteca C# para el paquete NuGet. Llamémoslo MyProject.EditorConfig . Este proyecto contendrá los siguientes archivos:

  • 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>



Como una de las limitaciones de EditorConfig es que algunas reglas tienen Location.None 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 .props :

 <PropertyGroup> <NoWarn>$(NoWarn);CA1014</NoWarn> </PropertyGroup>


Especifique la ubicación del archivo .editorconfig para copiar desde dentro de la estructura de carpetas del paquete NuGet:

 <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 Copy 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 BeforeBuild Target.

 <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 .props y .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 MyProject.EditorConfig para empaquetar un paquete NuGet:

 dotnet pack MyProject.EditorConfig.csproj -c Release -o out --no-restore


Publícalo en el almacenamiento local (carpeta). NuGet CLI debe instalarse de antemano:

 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 .editorconfig 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 .editorconfig se sobrescribirá en la compilación.

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.