चूंकि डॉटनेट कोर .csproj
प्रारूप में वापस चला गया है, इसलिए एक नया ऑटोजेनरेटेड MyProject.AssemblyInfo.cs
है जिसमें अन्य शामिल हैं:
[assembly: AssemblyCompany("MyProject")]
[assembly: AssemblyVersion("1.0.0.0")]
ध्यान दें कि यह प्रत्येक बिल्ड को स्वचालित रूप से पुन: उत्पन्न करता है। पहले, फ़ाइल /obj/ निर्देशिका में पाई जाती थी, अब यह केवल स्मृति में प्रतीत होती है क्योंकि फ़ाइल डिस्क पर नहीं मिल सकती है और त्रुटि संदेश पर क्लिक करने से कोई फ़ाइल नहीं खुलती है।
चूंकि उन्हें वहां परिभाषित किया गया है, इसलिए मैं उन्हें स्वयं शास्त्रीय AssemblyInfo.cs
में परिभाषित नहीं कर सकता।
मैं कंपनी और परियोजना के संस्करण को कहां/कैसे परिभाषित कर सकता हूं?
8 जवाब
जैसा कि आप पहले ही देख चुके हैं, आप इनमें से अधिकतर सेटिंग्स को .csproj में नियंत्रित कर सकते हैं।
अगर आप इन्हें असेंबलीइन्फो.सीएस में रखना चाहते हैं, तो आप ऑटो-जेनरेटेड असेंबली एट्रिब्यूट्स को बंद कर सकते हैं।
<PropertyGroup>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
यदि आप देखना चाहते हैं कि हुड के नीचे क्या हो रहा है, तो चेकआउट करें Microsoft.NET.GenerateAssemblyInfo.targets Microsoft.NET.Sdk के अंदर।
मैं अपने .NET मानक 2.0 प्रोजेक्ट्स के लिए निम्न कार्य करता हूं।
एक Directory.Build.props
फ़ाइल बनाएँ (जैसे आपके रेपो की जड़ में) और .csproj
फ़ाइल से साझा किए जाने वाले गुणों को इस फ़ाइल में स्थानांतरित करें।
MSBuild इसे स्वचालित रूप से उठाएगा और उन्हें स्वत: उत्पन्न AssemblyInfo.cs
पर लागू करेगा।
dotnet pack
के साथ या विजुअल स्टूडियो 2017 में UI के माध्यम से एक का निर्माण करते समय वे nuget पैकेज पर भी लागू होते हैं।
देखें https://docs.microsoft.com/en-us/ Visualstudio/msbuild/customize-your-build
उदाहरण:
<Project>
<PropertyGroup>
<Company>Some company</Company>
<Copyright>Copyright © 2020</Copyright>
<AssemblyVersion>1.0.0.1</AssemblyVersion>
<FileVersion>1.0.0.1</FileVersion>
<Version>1.0.0.1</Version>
<!-- ... -->
</PropertyGroup>
</Project>
आप हमेशा अपना AssemblyInfo.cs जोड़ सकते हैं, जो InternalsVisibleToAttribute
, CLSCompliantAttribute
और अन्य के काम आता है जो स्वचालित रूप से उत्पन्न नहीं होते हैं।
किसी प्रोजेक्ट में AssemblyInfo.cs जोड़ना
- सॉल्यूशन एक्सप्लोरर में,
<project name> > Add > New Folder
पर राइट क्लिक करें।
- फ़ोल्डर को "गुण" नाम दें।
- "गुण" फ़ोल्डर पर राइट क्लिक करें, और
Add > New Item...
पर क्लिक करें।
- "क्लास" चुनें और इसे "AssemblyInfo.cs" नाम दें।
ऑटो-जेनरेटेड एट्रीब्यूट्स को दबाना
यदि आप अपनी विशेषताओं को ऑटो-जेनरेट करने के बजाय वापस AssemblyInfo.cs पर ले जाना चाहते हैं, तो आप उन्हें MSBuild में दबा सकते हैं जैसा कि उसका जवाब।
मैं इस विषय/उत्तरों को निम्नलिखित के साथ विस्तारित करना चाहता हूं। जैसा कि किसी ने उल्लेख किया है, यह स्वतः उत्पन्न AssemblyInfo बाहरी उपकरणों के लिए एक बाधा हो सकता है। मेरे मामले में, FinalBuilder का उपयोग करते हुए, मुझे एक समस्या थी कि AssemblyInfo बिल्ड एक्शन द्वारा अपडेट नहीं हो रहा था। जाहिर है, FinalBuilder AssemblyInfo के स्थान का पता लगाने के लिए ~proj
फ़ाइल पर निर्भर करता है। मैंने सोचा, यह प्रोजेक्ट फ़ोल्डर के अंतर्गत कहीं भी देख रहा था। नहीं, तो, इसे बदल रहे हैं
<PropertyGroup>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
केवल आधा काम किया, अगर वीएस आईडीई/एमएस बिल्ड द्वारा निर्मित कस्टम असेंबली जानकारी की अनुमति दी गई। लेकिन मुझे असेंबली जानकारी फ़ाइल में मैन्युअल हेरफेर के बिना 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 का स्थान ढूंढता है और फ़ाइल को संशोधित करता है। जबकि क्रिया None
MSBuild/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'
NightOwl888's answer में जोड़कर, आप एक कदम आगे जा सकते हैं और एक AssemblyInfo
क्लास जोड़ सकते हैं न कि केवल एक प्लेन क्लास:
वे सेटिंग .csproj फ़ाइल में चली गई हैं।
डिफ़ॉल्ट रूप से वे दिखाई नहीं देते हैं लेकिन आप उन्हें प्रोजेक्ट गुण Package
टैब में विजुअल स्टूडियो 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
को "उत्पाद संस्करण" के रूप में दिखाया गया है।
Class Library (.NET Standard)
है, तो प्रोजेक्ट गुणों में सेटिंग्स अनुपलब्ध प्रतीत होती हैं। क्या आपके पास कोई विचार है क्यों? मैं संस्करण 15.1, रिलीज़ 26403.7, सामुदायिक संस्करण का उपयोग कर रहा हूँ।
.NET 5+ के साथ, आप असेंबली मेटाडेटा का उपयोग कर सकते हैं:
<AssemblyMetadata Include="Bar" Value="Baz" />
धन्यवाद, इससे मुझे बहुत मदद मिली।
मेरे मामले में, प्रोजेक्ट बनाना Blazor Server Side Website
, Release
और Debug
दोनों पर सफल रहा, लेकिन वेबसाइट को प्रकाशित करना अभी भी Duplicate Attribute
त्रुटि के साथ विफल रहा, जिसने मुझे थोड़ा भ्रमित किया।
समाधान <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
को .csproj
और .pubxml
फ़ाइल में जोड़ना था:
पथ: <Project>/Properties/PublishProfiles/<ProfileName>.pubxml:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
...
<!-- Add the line below -->
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
</Project>
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
visual-studio
यदि आप Visual Studio सुविधाओं और कार्यक्षमता के बारे में कोई विशिष्ट प्रश्न पूछना चाहते हैं तो इस टैग का उपयोग करें। इस टैग का उपयोग कोड के बारे में उन सवालों पर न करें जो केवल विजुअल स्टूडियो में लिखे गए थे। अपने प्रश्न लिंक के सटीक प्रौद्योगिकी क्षेत्र को टैग करने और विज़ुअल स्टूडियो के अधिक विशिष्ट संस्करण को टैग करने पर भी विचार करें। कृपया अपने प्रश्न में अपने सटीक VS संस्करण, संस्करण और अद्यतन स्तर का उल्लेख करें।