paint-brush
एक NuGet पैकेज के रूप में Common EditorConfig का उपयोग कैसे करेंद्वारा@igorlopushko
6,868 रीडिंग
6,868 रीडिंग

एक NuGet पैकेज के रूप में Common EditorConfig का उपयोग कैसे करें

द्वारा Igor Lopushko1m2022/06/17
Read on Terminal Reader
Read this story w/o Javascript

बहुत लंबा; पढ़ने के लिए

EditorConfig विभिन्न संपादकों और IDE में एक ही प्रोजेक्ट पर काम करने वाले कई डेवलपर्स के लिए लगातार कोडिंग शैलियों को बनाए रखने में मदद करता है। EditorConfig फ़ाइलें आसानी से पढ़ने योग्य हैं और संस्करण नियंत्रण प्रणालियों के साथ अच्छी तरह से काम करती हैं। इस आलेख के [सीमाएं] खंड में इस आलेख में निर्दिष्ट .NET दुनिया में भी EditorConfg की कुछ सीमाएँ हैं। EditorConfig प्रोजेक्ट में कोडिंग शैलियों को परिभाषित करने के लिए एक फ़ाइल प्रारूप** और टेक्स्ट संपादक प्लग इन का एक संग्रह शामिल है** जो संपादकों को फ़ाइल प्रारूप को पढ़ने और परिभाषित शैलियों का पालन करने में सक्षम बनाता है।

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - एक NuGet पैकेज के रूप में Common EditorConfig का उपयोग कैसे करें
Igor Lopushko HackerNoon profile picture

समस्या

हमारे संगठन में, हम विभिन्न वेब सेवाओं के साथ कई GitHub रिपॉजिटरी चला रहे हैं। इन सभी परियोजनाओं को कोड स्टाइलिंग के लिए सामान्य नियमों की आवश्यकता होती है। हम सही तरीके से आगे बढ़े और एक सर्विस टेम्प्लेट प्रोजेक्ट बनाया जो सभी .NET समाधानों का आधार है और एक सामान्य आर्किटेक्चर को परिभाषित करता है। इसमें सही नामकरण और संदर्भों के साथ परियोजनाओं का एक समूह होता है। हालाँकि, हम गलत तरीके से चले गए और .editorconfig फ़ाइल को हर नए रिपॉजिटरी में कॉपी कर लिया। जब भी .editorconfig फ़ाइल डेवलपर की ज़रूरतों के अनुरूप नहीं होती है तो उसे संशोधित करने का प्रलोभन दिया जाता था। और हमने यह गलती की।


एक सामान्य .editorconfig फ़ाइल कैसे बनाई जाए और इसे कई रिपॉजिटरी में कैसे वितरित किया जाए, इस बारे में इंटरनेट पर अधिक जानकारी नहीं है। देव भावना ने बताया कि यह एक NuGet पैकेज होना चाहिए। समस्या को गुगल करने के लंबे समय के बाद, हमें यह समाधान मिला। एडम क्रेवन को धन्यवाद जिन्होंने अपनी परियोजना के लिए उसी मुद्दे को हल किया।

क्यों EditorConfig

EditorConfig विभिन्न संपादकों और IDE में एक ही प्रोजेक्ट पर काम करने वाले कई डेवलपर्स के लिए लगातार कोडिंग शैलियों को बनाए रखने में मदद करता है। EditorConfig प्रोजेक्ट में कोडिंग शैलियों को परिभाषित करने के लिए एक फ़ाइल स्वरूप और टेक्स्ट संपादक प्लगइन्स का एक संग्रह शामिल है जो संपादकों को फ़ाइल प्रारूप को पढ़ने और परिभाषित शैलियों का पालन करने में सक्षम बनाता है। EditorConfig फ़ाइलें आसानी से पठनीय हैं और वे संस्करण नियंत्रण प्रणालियों के साथ अच्छी तरह से काम करती हैं।


.NET दुनिया में, कोड विश्लेषण नियमों में विभिन्न कॉन्फ़िगरेशन विकल्प होते हैं। आप इन विकल्पों को निम्न विश्लेषक कॉन्फ़िगरेशन फ़ाइलों में से एक में कुंजी-मान जोड़े के रूप में निर्दिष्ट करते हैं:

  • EditorConfig फ़ाइल: फ़ाइल-आधारित या फ़ोल्डर-आधारित कॉन्फ़िगरेशन विकल्प।

  • ग्लोबल एनालाइज़र कॉन्फ़िग फ़ाइल: प्रोजेक्ट-स्तरीय कॉन्फ़िगरेशन विकल्प। उपयोगी जब कुछ प्रोजेक्ट फ़ाइलें प्रोजेक्ट फ़ोल्डर के बाहर रहती हैं।


आप निम्न सिंटैक्स के साथ EditorConfig फ़ाइल में कंपाइलर चेतावनियों या विश्लेषक नियमों के लिए गंभीरता सेट कर सकते हैं:

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


किसी EditorConfig फ़ाइल में किसी नियम की गंभीरता को सेट करना किसी नियम सेट में या समाधान एक्सप्लोरर में सेट की गई किसी भी गंभीरता पर प्राथमिकता लेता है।


कुछ परियोजनाओं में, स्थानीय और वैश्विक कॉन्फ़िगरेशन फ़ाइलों का मिश्रण होता है। इसके अलावा, इस लेख में सीमा अनुभाग में निर्दिष्ट .NET दुनिया में भी EditorConfg की कुछ सीमाएँ हैं। हमने दोनों तरीकों की कोशिश की और इन दो दृष्टिकोणों के साथ आगे-पीछे हुए। और अंत में हमारी परियोजनाओं के लिए केवल EditoConfig का उपयोग करने का एक आसान तरीका स्थानांतरित करने का निर्णय लिया।

समाधान

सबसे पहले चीज़ें, आपको NuGet पैकेज के लिए एक नया C# लाइब्रेरी प्रोजेक्ट बनाने की आवश्यकता है। आइए इसे MyProject.EditorConfig कहते हैं। इस परियोजना में निम्नलिखित फाइलें होंगी:

  • .props फ़ाइल
  • .csproj फ़ाइल
  • .editorconfig फ़ाइल

.प्रोप फ़ाइल

आपको PropertyGroup को निम्नलिखित गुणों के साथ सही मान पर सेट करना होगा:

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



जैसा कि EditorConfig की सीमाओं में से एक यह है कि कुछ नियमों में Location.None है। कोई नहीं और एक EditorConfig फ़ाइल में निर्दिष्ट नहीं किया जा सकता है। यदि आप हमारी तरह ग्लोबल एनालाइज़र कॉन्फिग फ़ाइल का उपयोग नहीं करते हैं, तो आपके पास उन नियमों को .props फ़ाइल में अक्षम करने का विकल्प होगा:

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


NuGet पैकेज फ़ोल्डर संरचना के भीतर से कॉपी करने के लिए .editorconfig फ़ाइल का स्थान निर्दिष्ट करें:

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


विभिन्न प्लेटफार्मों पर फ़ाइल पथ स्ट्रिंग में \ और / प्रतीकों से सावधान रहें। हमें वास्तव में यह पता लगाने में काफी समय लगा कि .editorconfig फ़ाइल कॉपी क्यों नहीं की जाती है।


बनाया जा रहा है जो .NET प्रोजेक्ट के फ़ोल्डर में फ़ाइल की प्रतिलिपि बनाने के लिए 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>

.csproj फ़ाइल

डिफ़ॉल्ट रूप से, एक अवधि के साथ शुरू होने वाली NuGet फ़ाइलों को पैक करते समय अनदेखा कर दिया जाता है। इससे बचने के लिए आपको .csproj फ़ाइल में निम्न कोड जोड़ना होगा:

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


उसके बाद आपको .props और .editorconfig फाइल को शामिल करना होगा:

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

NuGet पैकेज का निर्माण और परीक्षण करें

जब सारा काम हो जाए तो आप NuGet पैकेज को स्थानीय स्टोरेज में प्रकाशित कर सकते हैं और सत्यापित कर सकते हैं कि यह काम करता है।


NuGet पैकेज पैक करने के लिए MyProject.EditorConfig प्रोजेक्ट फ़ोल्डर में निम्न आदेश निष्पादित करें:

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


इसे स्थानीय भंडारण (फ़ोल्डर) में प्रकाशित करें। NuGet CLI को पहले से इंस्टॉल करना होगा:

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

-Source पैरामीटर के साथ एक लक्ष्य फ़ोल्डर निर्दिष्ट करें।


स्थानीय NuGet पैकेज पथ पंजीकृत करें:

 dotnet nuget add source /Users/igorlopushko/test_nuget_expand/


लक्ष्य प्रोजेक्ट में स्थानीय NuGet पैकेज जोड़ने के लिए इस कमांड को लक्ष्य प्रोजेक्ट के फ़ोल्डर में निष्पादित करें:

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


जब आप अपना लक्ष्य प्रोजेक्ट बनाते हैं तो आपको इस प्रोजेक्ट की रूट डायरेक्टरी में .editorconfig फाइल मिल जाएगी। हर बार जब आप कोई प्रोजेक्ट बनाते हैं तो इसे अधिलेखित कर दिया जाएगा। भले ही इसे गलती से किसी भी तरह से संशोधित किया गया हो, .editorconfig फ़ाइल को बिल्ड पर अधिलेखित कर दिया जाएगा।

निष्कर्ष

समाधान काफी सरल है, लेकिन इसने हमारी टीम के जीवन को आसान बना दिया है। हमने इस NuGet पैकेज को अपनी सभी परियोजनाओं में जोड़ा है और सभी रिपॉजिटरी में कोड शैलियों में डीसिंक्रनाइज़ेशन से बचते हैं।