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

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

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

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

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

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

299
hultqvist 9 फरवरी 2017, 16:46
8
ध्यान दें कि यह डॉटनेट कोर से सख्ती से संबंधित नहीं है। यह बल्कि नए .csproj आधारित प्रारूप से संबंधित है। पुराने .NET फ्रेमवर्क को लक्षित करने के साथ इस नए .csproj प्रारूप का उपयोग करना बिल्कुल ठीक है, उदाहरण के लिए net461
 – 
Jim Aho
12 जून 2018, 16:18

8 जवाब

सबसे बढ़िया उत्तर

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

अगर आप इन्हें असेंबलीइन्फो.सीएस में रखना चाहते हैं, तो आप ऑटो-जेनरेटेड असेंबली एट्रिब्यूट्स को बंद कर सकते हैं।

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

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

406
T.S. 18 नवम्बर 2017, 02:29
62
यह देखकर खुशी हुई कि मैं इस बात को बंद कर सकता हूं। मुझे पुराने जमाने का कहें, लेकिन मैं .netcore के ऑटोजेनरेटेड सामान की तुलना में अच्छी पुरानी असेंबलीइन्फो.सीएस फाइल को पसंद करता हूं। इसके अलावा मैं अपने संस्करणों और अन्य AssembyInfo प्रविष्टियों की सामग्री को प्रबंधित करने के लिए बाहरी टूलिंग का उपयोग करता हूं। मैंने अपनी संपत्तियों को परियोजना से बाहर रखने के लिए एक कस्टम लक्ष्य का उपयोग करने की कोशिश की, लेकिन यह मुझे थोड़ी देर के लिए घुट गया।
 – 
Ivaylo Slavov
26 अप्रैल 2017, 15:47
10
NuGet AssemblyInfo.cs नहीं पढ़ता है। NuGet पैकेज संस्करण को परिभाषित करने के लिए आपको अभी भी MSBuild गुणों का उपयोग करना होगा।
 – 
natemcmaster
4 जुलाई 2017, 06:25
7
जब फ़ाइल स्वतः उत्पन्न हो जाती है, तो नए csproj प्रारूप में आंतरिक दृश्य विशेषता को कैसे सेट करें?
 – 
Shubhan
6 जुलाई 2017, 18:39
10
यह स्वत: जेनरेट की गई विशेषताओं में से एक नहीं है। अपने प्रोजेक्ट में कहीं खाली .cs फ़ाइल बनाएं और इसमें इंटरनल विज़िबलटू कोड जोड़ें
 – 
natemcmaster
6 जुलाई 2017, 18:47
2
असेंबलीइन्फोस से "चिपके" होने के कई अच्छे कारण हैं। शुरुआत के लिए उन्हें साझा करना और संपादित करना आसान होता है। अगर यह एक नया साल है और मुझे अपनी कॉपीराइट विशेषता पर तारीख बदलने की ज़रूरत है, या अगर मैं कंपनी विशेषता आदि में टेक्स्ट बदलने का फैसला करता हूं, तो मैं व्यक्तिगत रूप से सैकड़ों प्रोजेक्ट या दर्जनों समाधान नहीं खोलना चाहता हूं। इसे करें, और मैं .csproj फ़ाइलों को हाथ से संपादित नहीं करना चाहता। असेंबलीइन्फो के साथ यह आसान था - Shared.AssemblyInfo.cs, IDE UI में एक लिंक के रूप में जोड़ा गया। चीजों को करने के नए तरीके को हल करने के लिए हर हैक उससे कठिन है और देव समय की बर्बादी है।
 – 
BittermanAndy
10 सितंबर 2020, 14:17

मैं अपने .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>
145
Pang 8 अक्टूबर 2020, 10:40
मैंने अपने समाधान के मूल में Directory.Build.props जोड़ा, इसे अपनी कंपनी, उत्पाद और कॉपीराइट सेट करने के लिए अद्यतन किया, फिर समाधान बनाया। जब मैं किसी भी प्रोजेक्ट को खोलता हूं, तो उनके पास उन तीन क्षेत्रों के लिए सही मान नहीं होते हैं। मुझे किसकी याद आ रही है?
 – 
Justin
4 फरवरी 2019, 18:48
2
@ जस्टिन, आप उन्हें अपनी प्रोजेक्ट फाइलों में नहीं देख पाएंगे; वे परिणामी निर्मित विधानसभाओं पर लागू होते हैं।
 – 
pfx
4 फरवरी 2019, 19:12
2
हममें से उन लोगों के बारे में क्या जो एमएसबिल्ड का उपयोग नहीं करते हैं?
 – 
Joe Phillips
6 मार्च 2019, 18:10
यह अच्छा है। लेकिन अन्य परिदृश्य भी हैं, जब कुछ परियोजनाओं के साथ बहुत बड़े, बहु-समाधान का निर्माण होता है। नेट स्टैंडर्ड, अन्य - नेट एफडब्ल्यू/विभिन्न संस्करण, आदि? जब थर्ड पार्टी टूल्स वर्जनिंग करते हैं, और कुछ अन्य, अतिरिक्त और कस्टम गुण उनके द्वारा सेट किए जाते हैं।
 – 
T.S.
4 अप्रैल 2019, 19:10

आप हमेशा अपना AssemblyInfo.cs जोड़ सकते हैं, जो InternalsVisibleToAttribute, CLSCompliantAttribute और अन्य के काम आता है जो स्वचालित रूप से उत्पन्न नहीं होते हैं।

किसी प्रोजेक्ट में AssemblyInfo.cs जोड़ना

  1. सॉल्यूशन एक्सप्लोरर में, <project name> > Add > New Folder पर राइट क्लिक करें।

Add New Folder

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

Name folder Properties

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

Add New Item

  1. "क्लास" चुनें और इसे "AssemblyInfo.cs" नाम दें।

Name file AssemblyInfo.cs

ऑटो-जेनरेटेड एट्रीब्यूट्स को दबाना

यदि आप अपनी विशेषताओं को ऑटो-जेनरेट करने के बजाय वापस AssemblyInfo.cs पर ले जाना चाहते हैं, तो आप उन्हें MSBuild में दबा सकते हैं जैसा कि उसका जवाब

68
NightOwl888 13 मार्च 2018, 15:52
1
धन्यवाद NightOwl888, यही वह उत्तर है जिसकी मुझे तलाश है।
 – 
Junius
3 जून 2018, 08:39
3
मैं यह मानने से बचूंगा कि इन दिनों हर किसी के पास विजुअल स्टूडियो है, ऐसे अन्य संपादक हैं जिनका उपयोग इस उत्तर को कुछ के लिए पालन करना मुश्किल बना सकता है (उदाहरण के लिए मैं जेटब्रेन राइडर का उपयोग करके मैक/मोनो पर ऐसा कर रहा हूं)
 – 
PandaWood
6 सितंबर 2018, 03:53
2
कभी-कभी, नए Microsoft लीड को यह ध्यान में रखना चाहिए कि असेंबलीइन्फो.सीएस के साथ क्या अच्छा काम करता है ताकि स्वचालित बिल्ड अभी भी बिल्ड नंबरों को संशोधित करने के लिए काम कर सकें।
 – 
justdan23
24 जून 2020, 15:36

मैं इस विषय/उत्तरों को निम्नलिखित के साथ विस्तारित करना चाहता हूं। जैसा कि किसी ने उल्लेख किया है, यह स्वतः उत्पन्न 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'

8
T.S. 1 अक्टूबर 2019, 01:58

NightOwl888's answer में जोड़कर, आप एक कदम आगे जा सकते हैं और एक AssemblyInfo क्लास जोड़ सकते हैं न कि केवल एक प्लेन क्लास:

enter image description here

8
datchung 2 अगस्त 2019, 20:42
5
जब मैं नेटस्टैंडर्ड 1.1 प्रोजेक्ट के लिए वीएस2019 में इस संवाद को खोलता हूं तो कोई "असेंबली सूचना फ़ाइल" नहीं होती है।
 – 
SwissCoder
26 सितंबर 2019, 18:35
इसे पोस्ट करने के लिए धन्यवाद! मैं .NET कोर 3.1 का उपयोग कर रहा हूं और यह वहीं था! यह सभी प्रमुख डिफ़ॉल्ट भागों को जोड़ता है।
 – 
justdan23
24 जून 2020, 15:39

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

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

Project properties, tab Package

एक बार सहेजे जाने के बाद वे मान 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 को "उत्पाद संस्करण" के रूप में दिखाया गया है।

163
hultqvist 1 जून 2019, 19:36
1
यदि मेरा प्रोजेक्ट प्रकार Class Library (.NET Standard) है, तो प्रोजेक्ट गुणों में सेटिंग्स अनुपलब्ध प्रतीत होती हैं। क्या आपके पास कोई विचार है क्यों? मैं संस्करण 15.1, रिलीज़ 26403.7, सामुदायिक संस्करण का उपयोग कर रहा हूँ।
 – 
ventiseis
26 अप्रैल 2017, 00:23
2
मैं क्लास लाइब्रेरी (.NET मानक) का उपयोग कर रहा हूं और इसे पैकेज टैब में देखता हूं। क्या आप इसे वहां देखते हैं? एक बार जब आप डिफ़ॉल्ट के अलावा कुछ और "सहेजें", यह csproj में दिखाई देगा।
 – 
tofutim
8 जून 2017, 07:31
4
पैकेज टैब का उपयोग करते समय आप 1.0.*.* जैसे वाइल्डकार्ड का उपयोग कैसे करते हैं?
 – 
Soenhay
26 सितंबर 2018, 17:12
@Soenhay, वाइल्डकार्डिंग पैकेज संस्करण को परिभाषित करते समय अधिक समझ में नहीं आता है, केवल इसका उपभोग करते समय।
 – 
Paul Hatcher
23 मई 2019, 11:35
मेरी समझ यह है कि आप तब तक नहीं कर सकते जब तक आप तृतीय पक्ष टूल में समान सुविधा का उपयोग नहीं करते।
 – 
hultqvist
1 जून 2019, 19:29

.NET 5+ के साथ, आप असेंबली मेटाडेटा का उपयोग कर सकते हैं:

<AssemblyMetadata Include="Bar" Value="Baz" />

0
Vadim Peretokin 12 मई 2021, 21:21
4
उत्तर यह नहीं बताता कि यह प्रश्नों को कैसे संबोधित करता है।
 – 
hultqvist
13 मई 2021, 11:00
1
इसके बारे में कोई एमएसडीएन/डॉक्टर/अन्य संसाधन?
 – 
sommmen
14 सितंबर 2021, 14:51

धन्यवाद, इससे मुझे बहुत मदद मिली।

मेरे मामले में, प्रोजेक्ट बनाना 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>
0
Edgar.Bro 26 अक्टूबर 2021, 11:19