paint-brush
Cách sử dụng Common EditorConfig làm gói NuGetby@igorlopushko
6,310
6,310

Cách sử dụng Common EditorConfig làm gói NuGet

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

EditorConfig giúp duy trì các kiểu mã hóa nhất quán cho nhiều nhà phát triển làm việc trên cùng một dự án trên nhiều trình soạn thảo và IDE khác nhau. Các tệp EditorConfig dễ đọc và hoạt động tốt với hệ thống kiểm soát phiên bản. EditorConfg có một số hạn chế trong thế giới.NET cũng được nêu rõ trong bài viết này trong phần [hạn chế] của bài viết này. Dự án EditorConfig bao gồm một định dạng tệp ** để xác định kiểu mã hóa và một bộ sưu tập các plugin trình chỉnh sửa văn bản ** cho phép người chỉnh sửa đọc định dạng tệp và tuân thủ các kiểu đã xác định.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Cách sử dụng Common EditorConfig làm gói NuGet
Igor Lopushko HackerNoon profile picture

Vấn đề

Trong tổ chức của chúng tôi, chúng tôi đang chạy nhiều kho lưu trữ GitHub với các dịch vụ web khác nhau. Tất cả các dự án này đều yêu cầu các quy tắc chung để tạo kiểu mã. Chúng tôi đã di chuyển đúng cách và tạo một dự án mẫu dịch vụ, dự án này là cơ sở cho tất cả các giải pháp .NET và xác định một kiến trúc chung. Nó chứa một tập hợp các dự án có tên và tham chiếu chính xác. Tuy nhiên, chúng tôi đã di chuyển sai cách và sao chép tệp .editorconfig vào mọi kho lưu trữ mới. Có một sự cám dỗ để sửa đổi tệp .editorconfig bất cứ khi nào nó không phù hợp với nhu cầu của nhà phát triển. Và chúng tôi đã làm lỗi này.


Không có nhiều thông tin trên Internet về cách tạo tệp .editorconfig phổ biến và phân phối nó trên nhiều kho lưu trữ. Vị thần bảo rằng nó phải là một gói NuGet. Sau một thời gian dài tìm kiếm sự cố, chúng tôi đã tìm ra giải pháp này . Cảm ơn Adam Craven , người đã giải quyết vấn đề tương tự cho dự án của anh ấy.

Tại sao EditorConfig

EditorConfig giúp duy trì các kiểu mã hóa nhất quán cho nhiều nhà phát triển làm việc trên cùng một dự án trên nhiều trình soạn thảo và IDE khác nhau. Dự án EditorConfig bao gồm một định dạng tệp để xác định kiểu mã hóa và một bộ sưu tập các plugin trình chỉnh sửa văn bản cho phép người chỉnh sửa đọc định dạng tệp và tuân theo các kiểu đã xác định. Các tệp EditorConfig dễ đọc và chúng hoạt động tốt với hệ thống kiểm soát phiên bản.


Trong thế giới .NET, các quy tắc phân tích mã có nhiều tùy chọn cấu hình khác nhau. Bạn chỉ định các tùy chọn này dưới dạng các cặp khóa-giá trị trong một trong các tệp cấu hình trình phân tích sau:

  • Tệp EditorConfig : Tùy chọn cấu hình dựa trên tệp hoặc dựa trên thư mục.

  • Tệp Global AnalyzerConfig : Tùy chọn cấu hình mức dự án. Hữu ích khi một số tệp dự án nằm ngoài thư mục dự án.


Bạn có thể đặt mức độ nghiêm trọng cho cảnh báo trình biên dịch hoặc quy tắc phân tích trong tệp EditorConfig bằng cú pháp sau:

dotnet_diagnostic.<rule ID>.severity = <severity>


Đặt mức độ nghiêm trọng của quy tắc trong tệp EditorConfig sẽ được ưu tiên hơn bất kỳ mức độ nghiêm trọng nào được đặt trong bộ quy tắc hoặc trong Giải pháp Explorer.


Trong một số dự án, có sự kết hợp của các tệp cấu hình cục bộ và toàn cầu. Hơn nữa, EditorConfg có một số hạn chế trong thế giới .NET cũng được nêu rõ trong bài viết này trong phần giới hạn . Chúng tôi đã thử cả hai cách và di chuyển qua lại với hai cách tiếp cận này. Và cuối cùng đã quyết định chuyển sang một cách đơn giản chỉ sử dụng EditoConfig cho các dự án của chúng tôi.

Giải pháp

Điều đầu tiên, bạn cần tạo một dự án thư viện C # mới cho gói NuGet. Hãy gọi nó là MyProject.EditorConfig . Dự án này sẽ chứa các tệp sau:

  • tệp .props
  • tệp .csproj
  • tệp .editorconfig

tệp .props

Bạn phải thêm PropertyGroup với các thuộc tính sau được đặt thành giá trị true:

 <PropertyGroup> <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild> <EnableNETAnalyzers>true</EnableNETAnalyzers> </PropertyGroup>



Một trong những hạn chế của EditorConfig là một số quy tắc có Location.None và không thể được chỉ định trong tệp EditorConfig. Nếu bạn không sử dụng tệp Global AnalyzerConfig như chúng tôi, bạn sẽ có một tùy chọn để tắt các quy tắc đó trong tệp .props :

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


Chỉ định vị trí của tệp .editorconfig để sao chép từ bên trong cấu trúc thư mục gói NuGet:

 <ItemGroup> <EditorConfigFilesToCopy Include="$(MSBuildThisFileDirectory)../content/Rules/.editorconfig" /> </ItemGroup>


Hãy cẩn thận với các ký hiệu \/ trong chuỗi đường dẫn tệp trên các nền tảng khác nhau. Chúng tôi thực sự mất nhiều thời gian để tìm ra lý do tại sao tệp .editorconfig không được sao chép.


Sử dụng Tác vụ Copy MSBuild để sao chép tệp vào thư mục của Dự án .NET đang được xây dựng. Mục tiêu này được xác định để thực thi trước Mục tiêu 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>

tệp .csproj

Theo mặc định, khi đóng gói các tệp NuGet bắt đầu bằng dấu chấm sẽ bị bỏ qua. Để tránh điều đó, bạn phải thêm mã sau vào tệp .csproj :

 <PropertyGroup> <NoDefaultExcludes>true</NoDefaultExcludes> </PropertyGroup>


Sau đó, bạn phải bao gồm các tệp .props.editorconfig :

 <ItemGroup> <None Include="MyProject.EditorConfig.props" Pack="true" PackagePath="\build" /> <None Include=".editorconfig" Pack="true" PackagePath="\content\Rules" /> </ItemGroup>

Xây dựng và thử nghiệm gói NuGet

Khi tất cả công việc hoàn tất, bạn có thể xuất bản gói NuGet vào bộ nhớ cục bộ và xác minh rằng nó hoạt động.


Thực thi lệnh sau trong thư mục dự án MyProject.EditorConfig để đóng gói gói NuGet:

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


Xuất bản nó vào bộ nhớ cục bộ (thư mục). NuGet CLI cần được cài đặt trước:

 nuget add out/MyProject.EditorConfig.1.0.0.nupkg -Source /Users/igorlopushko/test_nuget_expand/ -Expand

Chỉ định một thư mục đích với tham số -Source .


Đăng ký đường dẫn gói NuGet cục bộ:

 dotnet nuget add source /Users/igorlopushko/test_nuget_expand/


Để thêm gói NuGet cục bộ vào dự án mục tiêu, hãy thực hiện lệnh này trong thư mục của dự án mục tiêu:

 dotnet add package MyProject.EditorConfig -s /Users/igorlopushko/test_nuget_expand/


Khi bạn xây dựng dự án mục tiêu của mình, bạn sẽ nhận được tệp .editorconfig trong thư mục gốc của dự án này. Nó sẽ bị ghi đè mỗi khi bạn xây dựng một dự án. Ngay cả khi nó đã được sửa đổi bằng cách nào đó do nhầm lẫn, tệp .editorconfig sẽ bị ghi đè trên bản dựng.

Sự kết luận

Giải pháp khá đơn giản, nhưng nó đã giúp cuộc sống của nhóm chúng tôi dễ dàng hơn. Chúng tôi đã thêm gói NuGet này vào tất cả các dự án của mình và tránh đồng bộ hóa trong các kiểu mã trên tất cả các kho lưu trữ.