डॉटनेट कोर / csproj में असेंबलीइन्फो के बराबर


236

चूंकि डॉटनेट कोर .csprojप्रारूप में वापस आ गया है, इसलिए एक नया ऑटोगेनेरेटेड है MyProject.AssemblyInfo.csजिसमें अन्य शामिल हैं।

[assembly: AssemblyCompany("MyProject")]
[assembly: AssemblyVersion("1.0.0.0")]

ध्यान दें कि यह प्रत्येक बिल्ड को स्वचालित रूप से पुनर्जीवित करता है। पहले फ़ाइल / obj / निर्देशिका में मिली थी, अब यह केवल मेमोरी में दिखाई देती है क्योंकि फ़ाइल डिस्क पर नहीं मिल सकती है और त्रुटि संदेश पर क्लिक करने से कोई फ़ाइल नहीं खुलती है।

यह त्रुटि संदेश है: यहां छवि विवरण दर्ज करें

चूंकि वे वहां परिभाषित हैं इसलिए मैं उन्हें खुद को शास्त्रीय में परिभाषित नहीं कर सकता AssemblyInfo.cs

मैं किसी प्रोजेक्ट की कंपनी और संस्करण को कहां / कैसे परिभाषित कर सकता हूं?


5
ध्यान दें कि यह सख्ती से डॉटनेट कोर से संबंधित नहीं है। यह नए .csproj आधारित प्रारूप से संबंधित है। पुराने .NET फ्रेमवर्क को लक्षित करने के साथ इस नए .csproj प्रारूप का उपयोग करना पूरी तरह से ठीक है, उदाहरण के लिए net461
जिम अहो

जवाबों:


334

जैसा कि आपने पहले ही देखा है, आप इन सेटिंग्स में से अधिकांश को .csproj में नियंत्रित कर सकते हैं।

यदि आप इन्हें असेंबलीइन्फो में रखते हैं, तो आप स्वत: उत्पन्न असेंबली विशेषताओं को बंद कर सकते हैं।

<PropertyGroup>
   <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup> 

यदि आप यह देखना चाहते हैं कि हुड के नीचे क्या हो रहा है, तो Microsoft.NET.GenerateAssemblyInfo.targets चेक को Microsoft.NET.Sdk के अंदर चेकआउट करें ।


41
मुझे खुशी है कि मैं इस बात को बंद कर सकता हूं। मुझे पुराने जमाने की कॉल करें, लेकिन मैं अच्छे पुराने असेंबलीइन्फो.क्स फ़ाइल को पसंद करता हूं। इसके अलावा मैं अपने संस्करणों और अन्य AssembyInfo प्रविष्टियों की सामग्री का प्रबंधन करने के लिए बाहरी टूलिंग का उपयोग करता हूं। मैंने अपने गुणों को प्रोजेक्ट से बाहर रखने के लिए एक कस्टम लक्ष्य का उपयोग करने की कोशिश की, लेकिन यह मुझे थोड़ी देर के लिए चोक हो गया।
Ivaylo Slavov

1
मुझे भी। नई csproj आधारित प्रणाली के साथ, मैं अपनी विरासत टूलिंग का उपयोग नहीं कर सका। इस संपत्ति के साथ, मैं अब वापस जा सकता हूं, जिसे मैं प्यार करता हूं!
जुन्न

5
NuGet असेंबलीInfo.cs को नहीं पढ़ता है। NuGet पैकेज संस्करण को परिभाषित करने के लिए आपको अभी भी MSBuild संपत्तियों का उपयोग करना होगा।
natemcmaster

6
जब फ़ाइल स्वतः उत्पन्न होती है, तो नए csproj प्रारूप में InternalsVoubleTo विशेषता कैसे सेट करें?
शुभ

8
@ शुभान यह ऑटो-जेनरेट किए गए गुणों में से एक नहीं है। अपनी परियोजना में कहीं न कहीं एक खाली .cs फ़ाइल बनाएँ और इसमें InternalsVoubleTo कोड जोड़ें
natemcmaster

128

वे सेटिंग .csproj फ़ाइल में चली गई हैं।

डिफ़ॉल्ट रूप से वे दिखाई नहीं देते हैं, लेकिन आप उन्हें प्रोजेक्ट प्रॉपर्टीज Packageटैब में Visual Studio 2017 से खोज सकते हैं ।

प्रोजेक्ट गुण, टैब पैकेज

एक बार सहेजने के बाद उन मूल्यों को पाया जा सकता है MyProject.csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net461</TargetFramework>
    <Version>1.2.3.4</Version>
    <Authors>Author 1</Authors>
    <Company>Company XYZ</Company>
    <Product>Product 2</Product>
    <PackageId>MyApp</PackageId>
    <AssemblyVersion>2.0.0.0</AssemblyVersion>
    <FileVersion>3.0.0.0</FileVersion>
    <NeutralLanguage>en</NeutralLanguage>
    <Description>Description here</Description>
    <Copyright>Copyright</Copyright>
    <PackageLicenseUrl>License URL</PackageLicenseUrl>
    <PackageProjectUrl>Project URL</PackageProjectUrl>
    <PackageIconUrl>Icon URL</PackageIconUrl>
    <RepositoryUrl>Repo URL</RepositoryUrl>
    <RepositoryType>Repo type</RepositoryType>
    <PackageTags>Tags</PackageTags>
    <PackageReleaseNotes>Release</PackageReleaseNotes>
  </PropertyGroup>

फ़ाइल एक्सप्लोरर गुण सूचना टैब में, FileVersion"फ़ाइल संस्करण" के Versionरूप में दिखाया गया है और इसे "उत्पाद संस्करण" के रूप में दिखाया गया है


1
यदि मेरी परियोजना का प्रकार है, तो परियोजना के गुणों की सेटिंग्स गायब लगती हैं Class Library (.NET Standard)। क्या आपके पास कोई विचार है क्यों? मैं संस्करण 15.1, रिलीज़ 26403.7, सामुदायिक संस्करण का उपयोग कर रहा हूं।
वेंटीसिस

2
मैं क्लास लाइब्रेरी (.NET स्टैंडर्ड) का उपयोग कर रहा हूं और इसे संकुल टैब में देखता हूं। क्या आप इसे वहां देखते हैं? एक बार जब आप डिफॉल्ट के अलावा कुछ बचाते हैं, तो यह csproj में दिखाई देगा।
टोफुटिम

3
पैकेज टैब का उपयोग करते समय आप 1.0 जैसे एक वाइल्डकार्ड का उपयोग कैसे करते हैं। *।
सोन्हेय

@ संसय, पैकेज संस्करण को परिभाषित करते समय वाइल्डकार्डिंग का कोई मतलब नहीं है, केवल इसका उपभोग करते समय।
पॉल हैचर

@ मेरी समझ में यह है कि आप तब तक नहीं कर सकते जब तक आप तीसरे पक्ष के उपकरण में समान सुविधा का उपयोग नहीं करते हैं।
हॉल्टकविस्ट

115

मैं अपने .NET मानक 2.0 परियोजनाओं के लिए निम्न कार्य करता हूं।

एक Directory.Build.propsफ़ाइल बनाएँ (जैसे कि आपके रेपो की जड़ में) और .csprojफ़ाइल से इस फ़ाइल में साझा किए जाने वाले गुणों को स्थानांतरित करें ।

MSBuild इसे स्वचालित रूप से उठाएगा और उन्हें ऑटोजेनरेटेड पर लागू करेगा AssemblyInfo.cs

dotnet packविजुअल स्टूडियो 2017 में UI के साथ या उसके निर्माण के दौरान वे नगेट पैकेज पर भी लागू होते हैं ।

Https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build देखें


12
यह अधिक अपवित्र होना चाहिए, ऑटो उत्पन्न करने की अनुमति देने के लिए अच्छा है लेकिन फिर भी एक समाधान में कुछ सामान साझा करें
दान

@ डान सहमत हैं, यह अभी तक अन्य उत्तरों से नीचे है कि मुझे संदेह है कि ज्यादातर लोगों को यह पढ़ने का अंत नहीं है।
लूनियक्स

1
@ जस्टिन, आप उन्हें अपनी परियोजना फाइलों में नहीं देखेंगे; वे परिणामस्वरूप निर्मित विधानसभाओं पर लागू होते हैं।
pfx

1
उन लोगों के बारे में क्या है जो msbuild का उपयोग नहीं करते हैं?
जो फिलिप्स

1
यह बहुत अच्छा जवाब था। धन्यवाद। इसका उपयोग हमारे बड़े समाधान में किया गया है जो कुछ NuGet पैकेजों का उत्पादन करता है और यह नए sdk स्टाइल प्रोजेक्ट्स के लिए पुराने असेंबली जानकारी के लिए एक बढ़िया विकल्प है
डेविड एंडरसन

57

आप हमेशा अपने खुद के असेंबलीइन्फो.ऑक्स को जोड़ सकते हैं , जो काम में आता है InternalsVisibleToAttribute, CLSCompliantAttributeऔर अन्य जो स्वचालित रूप से उत्पन्न नहीं होते हैं।

एक परियोजना में AssemblyInfo.cs को जोड़ना

  1. Solution Explorer में, राइट क्लिक करें <project name> > Add > New Folder

नया फ़ोल्डर जोड़ें

  1. "गुण" फ़ोल्डर का नाम दें।

नाम फ़ोल्डर गुण

  1. "गुण" फ़ोल्डर पर राइट क्लिक करें, और क्लिक करें Add > New Item...

नए सामान को जोड़ो

  1. "क्लास" का चयन करें और इसे "असेंबलीइन्फो .cs" नाम दें।

नाम फ़ाइल AssemblyInfo.cs

दमनकारी ऑटो-जनरेट किए गए गुण

आप अपने गुण के लिए वापस ले जाना चाहते हैं AssemblyInfo.cs उन्हें स्वत: जनरेट, तो आप उन्हें MSBuild में दबाने के रूप में natemcmaster में बताया के बजाय अपने जवाब


1
धन्यवाद NightOwl888, यह वह उत्तर है जिसकी मुझे तलाश है।
जनिउज

3
मैं यह मानने से बचूंगा कि इन दिनों हर किसी के पास विजुअल स्टूडियो है, ऐसे अन्य संपादक हैं जिनका उपयोग इस उत्तर को कुछ के लिए अनुसरण करना मुश्किल बना सकता है (उदाहरण के लिए मैं इसे एक मैक / मोनो पर
Jetbrains

कभी-कभी, नए Microsoft लीड को असेंबली के साथ अच्छी तरह से काम करने पर विचार करना चाहिए। इसलिए स्वचालित बिल्ड अभी भी बिल्ड नंबरों को संशोधित करने के लिए काम कर सकते हैं।
justdan23

6

NightOwl888 के जवाब में जोड़ते हुए, आप एक कदम आगे जा सकते हैं और AssemblyInfoएक सादे वर्ग के बजाय एक वर्ग जोड़ सकते हैं :

यहां छवि विवरण दर्ज करें


5
कोई "असेंबली इन्फॉर्मेशन फाइल" नहीं है जब मैं वीएस 2019 में नेटस्टैंडर्ड 1.1 प्रोजेक्ट के लिए यह डायलॉग खोल रहा हूं।
स्विस कोड

इसे पोस्ट करने के लिए धन्यवाद! मैं .NET कोर 3.1 का उपयोग कर रहा हूं और यह वहीं था! यह सभी प्रमुख डिफ़ॉल्ट भागों को जोड़ता है।
justdan23

6

मैं इस विषय / उत्तर का विस्तार निम्नलिखित के साथ करना चाहता हूं। जैसा कि किसी ने उल्लेख किया है, यह ऑटो-जनरेट असेंबलीइन्फो बाहरी उपकरणों के लिए एक बाधा हो सकती है। मेरे मामले में, FinalBuilder का उपयोग करते हुए , मेरे पास एक मुद्दा था कि असेम्बलीइन्फो को बिल्ड एक्शन द्वारा अपडेट नहीं किया जा रहा था। जाहिर है, FinalBuilder पर निर्भर करता है ~projफ़ाइल के स्थान को खोजने के लिए AssemblyInfo । मैंने सोचा, यह परियोजना फ़ोल्डर के तहत कहीं भी देख रहा था। नहीं, तो, यह बदल रहा है

<PropertyGroup>
   <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup> 

केवल आधा काम किया, अगर वीएस आईडीई / एमएस बिल्ड द्वारा बनाया गया तो उसने कस्टम असेंबली की जानकारी दी। लेकिन मुझे जरूरत थी FinalBuilder विधानसभा जानकारी फ़ाइल के लिए मैनुअल जोड़तोड़ के बिना भी करते हैं। मुझे सभी कार्यक्रमों, MSBuild / VS और FinalBuilder को संतुष्ट करने की आवश्यकता थी।

मैंने मौजूदा में प्रविष्टि जोड़कर इसे हल किया ItemGroup

<ItemGroup>
   <Compile Remove="Common\**" />
   <Content Remove="Common\**" />
   <EmbeddedResource Remove="Common\**" />
   <None Remove="Common\**" />
   <!-- new added item -->
   <None Include="Properties\AssemblyInfo.cs" />
</ItemGroup>

अब, यह आइटम होने, FinalBuilder के स्थान पाता है AssemblyInfo और संशोधित फ़ाइल। हालांकि कार्रवाई NoneMSBuild / DevEnv इस प्रविष्टि को अनदेखा करती है और अब Compileकार्रवाई के आधार पर एक त्रुटि की रिपोर्ट नहीं करती है जो आमतौर पर projफाइलों में असेंबली इन्फो प्रविष्टि के साथ आती है ।

C: \ Program Files \ dotnet \ sdk \ 2.0.2 \ Sdks \ Microsoft.NET.Sdk \ build \ Microsoft.NET.Sdk.DefaultItems.targets (263,5): त्रुटि: डुप्लिकेट 'संकलित' आइटम शामिल थे। .NET SDK में डिफ़ॉल्ट रूप से आपकी प्रोजेक्ट निर्देशिका से 'संकलन' आइटम शामिल हैं। यदि आप स्पष्ट रूप से अपनी परियोजना फ़ाइल में शामिल करना चाहते हैं तो आप इन वस्तुओं को अपनी परियोजना फ़ाइल से हटा सकते हैं, या 'EnableDefaultCompileItems' संपत्ति को 'गलत' पर सेट कर सकते हैं। अधिक जानकारी के लिए, https://aka.ms/sdkimplicititems देखें । डुप्लिकेट आइटम थे: 'AssemblyInfo.cs'

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.