ডটনেট কোর / সিএসপিজেজে এসেম্বলিআইনফো এর সমান


236

যেহেতু ডটনেট কোর .csprojফর্ম্যাটে ফিরে গেছে সেখানে একটি নতুন অটোজেনারেটেড রয়েছে MyProject.AssemblyInfo.csযা অন্যগুলির মধ্যে রয়েছে।

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

নোট করুন যে এটি প্রতিটি বিল্ড স্বয়ংক্রিয়ভাবে পুনরায় জেনারেট হয়। পূর্বে ফাইলটি / আপত্তি / ডিরেক্টরিতে পাওয়া যেত, এখন এটি কেবল স্মৃতিতে উপস্থিত বলে মনে হয় কারণ ফাইলটি ডিস্কে খুঁজে পাওয়া যায়নি এবং ত্রুটি বার্তায় ক্লিক করা কোনও ফাইল খুলবে না।

এটি ত্রুটি বার্তা: এখানে চিত্র বর্ণনা লিখুন

যেহেতু তারা সেখানে সংজ্ঞায়িত হয়েছে আমি তাদের ক্লাসিকালগুলিতে নিজের সংজ্ঞা দিতে পারি না AssemblyInfo.cs

আমি কোথায় / কীভাবে কোনও প্রকল্পের সংস্থা ও সংস্করণ সংজ্ঞায়িত করতে পারি?


5
নোট করুন যে এটি ডটনেট কোরের সাথে কঠোরভাবে সম্পর্কিত নয়। এটি বরং নতুন .csproj ভিত্তিক ফর্ম্যাট সম্পর্কিত। পুরানো। নেট ফ্রেমওয়ার্ক লক্ষ্য করে এই নতুন .csproj ফর্ম্যাটটি ব্যবহার করা পুরোপুরি ঠিক আছে, উদাহরণস্বরূপ নেট 461
জিম আহো

উত্তর:


334

আপনি ইতিমধ্যে লক্ষ্য করেছেন, আপনি .csproj এ এই বেশিরভাগ সেটিংস নিয়ন্ত্রণ করতে পারেন।

আপনি যদি এগুলি বরং এসেম্বলিআইএনফো-তে রাখেন তবে আপনি স্বয়ংক্রিয়ভাবে উত্পন্ন সমাবেশ বৈশিষ্ট্যগুলি বন্ধ করতে পারেন।

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

আপনি যদি হুডের নীচে কী চলছে তা দেখতে চান, মাইক্রোসফ্ট.নেট.এসডকের অভ্যন্তরে মাইক্রোসফ্ট.এনইটি.জেনারেটঅ্যাস্পেসইনফো.আর্টেজ চেকআউট করুন ।


41
আমি এই জিনিসটি বন্ধ করতে পারি তা দেখে আনন্দিত। আমাকে পুরাতন ফ্যাশন বলুন তবে আমি। নেটকোরের স্বয়ংক্রিয়ভাবে তৈরি স্টাফের চেয়ে ভাল পুরাতন এসেম্বলিআইএনফো ফাইলগুলি পছন্দ করি। এছাড়াও আমি আমার সংস্করণগুলি এবং অন্যান্য এসেম্বিআইএনএফও এন্ট্রিগুলির বিষয়বস্তুগুলি পরিচালনা করতে বাহ্যিক সরঞ্জামাদি ব্যবহার করি। আমি নিজের সম্পত্তিটিকে প্রকল্পের বাইরে রাখার জন্য একটি কাস্টম লক্ষ্য ব্যবহার করার চেষ্টা করেছি তবে এটি আমাকে কিছু সময়ের জন্য দম বন্ধ করে দিয়েছে।
Ivaylo Slavov

1
একই অবস্থা. নতুন csproj ভিত্তিক সিস্টেমের সাথে, আমি আমার উত্তরাধিকার সরঞ্জামটি ব্যবহার করতে পারিনি। এই সম্পত্তি সহ, আমি এখন ফিরে যেতে পারি, যা আমি ভালবাসি!
21:16

5
নিউগেট অ্যাসেমব্লিআইএনফো-সি পড়েন না। নুগেট প্যাকেজ সংস্করণটি সংজ্ঞায়িত করতে আপনাকে এখনও এমএসবিল্ড বৈশিষ্ট্য ব্যবহার করতে হবে।
নাটেমকাস্টার

6
যখন ফাইলটি স্বয়ংক্রিয়ভাবে উত্পন্ন হয়, নতুন সিএসপিজেজ ফর্ম্যাটে কীভাবে অভ্যন্তরীণে ভিজিবলটো বৈশিষ্ট্যটি সেট করবেন?
শুভন

8
@ শুভান এটি স্বয়ংক্রিয়ভাবে উত্পন্ন বৈশিষ্ট্যগুলির মধ্যে একটি নয়। আপনার প্রকল্পের কোথাও একটি খালি .cs ফাইল তৈরি করুন এবং এতে ইন্টার্নালভিসিবলতো কোড যুক্ত করুন
natemcmaster

128

এই সেটিংস .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হিসাবে দেখানো হয় এবং "পণ্য সংস্করণ" হিসাবে দেখানো হয়


1
প্রকল্পের বৈশিষ্ট্যগুলির সেটিংসটি আমার প্রকল্পের ধরণটি অনুপস্থিত বলে মনে হচ্ছে Class Library (.NET Standard)। আপনি কেন কোন ধারণা আছে? আমি 15.1 সংস্করণ, 26403.7 রিলিজ, সম্প্রদায় সংস্করণ ব্যবহার করছি।
ভেন্টিসিস

2
আমি ক্লাস লাইব্রেরি (.NET স্ট্যান্ডার্ড) ব্যবহার করছি এবং এটি প্যাকেজ ট্যাবে দেখুন। তুমি ওখানে দেখছ? একবার আপনি ডিফল্ট ব্যতীত অন্য কিছু "সংরক্ষণ করুন" হয়ে গেলে এটি সিএসপিজে প্রদর্শিত হবে।
তোফুটিম

3
আপনি কীভাবে 1.0 এর মতো ওয়াইল্ডকার্ড ব্যবহার করেন? *। * প্যাকেজ ট্যাব ব্যবহার করার সময়?
সোমেনহে

@ সোহনহে, প্যাকেজ সংস্করণটি সংজ্ঞায়িত করার সময় ওয়াইল্ডকার্ডিং এর অর্থ গ্রহণ করে না, কেবল এটি গ্রহণ করার সময়।
পল হ্যাচার

@ সোনহাহে আমার বোঝা হল আপনি তৃতীয় পক্ষের সরঞ্জামগুলিতে অনুরূপ বৈশিষ্ট্যটি ব্যবহার না করা আপনি পারবেন না।
হাল্টকিভিস্ট

115

আমার .NET স্ট্যান্ডার্ড 2.0 প্রকল্পগুলির জন্য আমি নিম্নলিখিতগুলি করি।

একটি Directory.Build.propsফাইল তৈরি করুন (যেমন আপনার রেপোর মূলের মধ্যে) এবং বৈশিষ্ট্যগুলি .csprojফাইল থেকে এই ফাইলে ভাগ করে নেওয়া হবে।

এমএসবিল্ড এটিকে স্বয়ংক্রিয়ভাবে গ্রহণ করবে এবং সেগুলি স্বয়ংক্রিয়ভাবে জেনারেটে প্রয়োগ করবে AssemblyInfo.cs

dotnet packভিজুয়াল স্টুডিও 2017 সালে ইউআই এর মাধ্যমে বা এর মাধ্যমে একটি তৈরি করার সময় তারা নুগেট প্যাকেজটিতে প্রয়োগ হয় ।

Https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build দেখুন


12
এটি আরও উত্সাহ পাওয়া উচিত, স্বয়ংক্রিয়ভাবে উত্পন্ন উত্সাহিত করার অনুমতি দেয় তবে একটি সমাধান জুড়ে এখনও কিছু জিনিস ভাগ করে নেওয়া যায়
ড্যান

@ ড্যান রাজি, এটি অন্যান্য উত্তরগুলির তুলনায় অনেক বেশি যে আমি সন্দেহ করি যে বেশিরভাগ লোকেরা এটি পড়ে শেষ করে না।
লুনিক্স

1
@ জাস্টিন, আপনি তাদের আপনার প্রকল্পের ফাইলের মধ্যে দেখতে পাবেন না; ফলস্বরূপ নির্মিত অ্যাসেমব্লিতে তারা প্রয়োগ হয়।
পিএফএক্স

1
আমাদের মধ্যে যারা মিসবিল্ড ব্যবহার করেন না তাদের কী হবে?
জো ফিলিপস

1
এটি একটি দুর্দান্ত উত্তর ছিল। ধন্যবাদ. এটি আমাদের বৃহত সমাধানে ব্যবহৃত হয়েছে যা কিছু নিউগেট প্যাকেজ তৈরি করে এবং নতুন এসডিকে শৈলী প্রকল্পগুলির জন্য পুরানো সমাবেশের তথ্যের এটি একটি দুর্দান্ত বিকল্প
ডেভিড অ্যান্ডারসন

56

আপনি সর্বদা আপনার নিজের যোগ করতে পারেন AssemblyInfo.cs , যা সুবিধাজনক জন্য আসে InternalsVisibleToAttribute, CLSCompliantAttributeএবং অন্যদের যে স্বয়ংক্রিয়ভাবে উত্পন্ন করা হয় না।

একটি প্রকল্পে এসেম্বলিআইএনএফ.সি.এস যোগ করা

  1. সলিউশন এক্সপ্লোরার-এ ডান ক্লিক করুন <project name> > Add > New Folder

নতুন ফোল্ডার যুক্ত করুন

  1. "সম্পত্তি" ফোল্ডারের নাম দিন।

নাম ফোল্ডার বৈশিষ্ট্য

  1. "সম্পত্তি" ফোল্ডারে ডান ক্লিক করুন এবং ক্লিক করুন Add > New Item...

নতুন আইটেম যোগ করুন

  1. "শ্রেণি" নির্বাচন করুন এবং এর নাম "সমাবেশআইএনফো.সি.এস" রাখুন।

নাম ফাইল ফাইল એસেম্বলিআইএনফো

স্বতঃ উত্পাদিত বৈশিষ্ট্য দমন করা

আপনি আপনার বৈশিষ্ট্যাবলী ফিরে স্থানান্তর করতে চান তাহলে AssemblyInfo.cs তাদের স্বয়ংক্রিয়ভাবে তৈরি, আপনি তাদের MSBuild মধ্যে দমন করতে natemcmaster মধ্যে নির্দিষ্ট না থাকার পরিবর্তে তার উত্তর


1
ধন্যবাদ নাইটওয়েল ৮৮৮, এটিই আমি উত্তর খুঁজছি।
জুনিউজ

3
আমি আজকাল প্রত্যেকের ভিজ্যুয়াল স্টুডিও অনুমান করা এড়াতে পারব, এমন আরও কিছু সম্পাদক রয়েছে যেগুলি এই উত্তরটি কারও কারও পক্ষে অনুসরণ করা কঠিন করে তোলে (যেমন আমি জ্যাকব্রেইনস রাইডার ব্যবহার করে ম্যাক / মনোতে এটি করছি)
পান্ডাউড

কখনও কখনও, নতুন মাইক্রোসফ্ট শীর্ষস্থানীয়গুলি এসেম্বলিআইএনফো-সি-তে কী ভাল কাজ করে তা বিবেচনা করা উচিত যাতে স্বয়ংক্রিয় বিল্ডগুলি এখনও বিল্ড সংখ্যা সংশোধন করতে কাজ করতে পারে।
justdan23

6

নাইটওয়েল ৮৮৮ এর উত্তরে যোগ করা, আপনি AssemblyInfoকেবল একটি সরল শ্রেণীর চেয়ে আরও এক ধাপ এগিয়ে যেতে পারেন এবং একটি ক্লাস যুক্ত করতে পারেন :

এখানে চিত্র বর্ণনা লিখুন


5
নেটস স্ট্যান্ডার্ড ১.১ প্রকল্পের জন্য যখন ভিএস ২০১৯ এ এই ডায়ালগটি খুলছি তখন কোনও "এসেম্বল ইনফরমেশন ফাইল" নেই।
সুইসকোডার

এই পোস্ট করার জন্য ধন্যবাদ! আমি নেট নেট 3.1 ব্যবহার করছি এবং এটি ঠিক সেখানে ছিল! এটি সমস্ত মূল ডিফল্ট অংশ যুক্ত করে।
justdan23

6

আমি নিম্নলিখিত সহ এই বিষয় / উত্তরগুলি প্রসারিত করতে চাই। যেমনটি কেউ উল্লেখ করেছেন, বাহ্যিক সরঞ্জামগুলির জন্য স্বয়ংক্রিয়ভাবে উত্পন্ন এই অ্যাসেমব্লিলিইনফোটি বাধা হতে পারে। আমার ক্ষেত্রে, ফাইনালবিল্ডার ব্যবহার করে , আমার একটি সমস্যা ছিল যে বিল্ডিং অ্যাকশনের মাধ্যমে এসেম্বলিআইএনফো আপডেট হচ্ছে না। দৃশ্যত, FinalBuilder উপর নির্ভর ~projফাইলের অবস্থান খুঁজে পেতে AssemblyInfo । আমি ভেবেছিলাম, এটি প্রকল্প ফোল্ডারের অধীনে কোথাও খুঁজছেন। না। সুতরাং, এটি পরিবর্তন

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

শুধুমাত্র অর্ধেক কাজ করেছে, এটি ভিএস আইডিই / এমএস বিল্ড দ্বারা নির্মিত যদি কাস্টম সমাবেশ সম্পর্কিত তথ্য অনুমোদিত করে info তবে আমার দরকার ফাইনালবিল্ডারকে সমাবেশ তথ্য ফাইলটিতে ম্যানুয়াল ম্যানিপুলেশন ছাড়াই এটি করা। আমার সমস্ত প্রোগ্রাম, এমএসবিল্ড / ভিএস এবং ফাইনালবিল্ডারকে সন্তুষ্ট করা দরকার।

আমি বিদ্যমানটিতে একটি এন্ট্রি যুক্ত করে এটি সমাধান করেছি 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এমএসবিল্ড / ডিভেনভ এই এন্ট্রিটিকে উপেক্ষা করতে দেয় এবং Compileসাধারণত projফাইলে অ্যাসেম্বলি তথ্য এন্ট্রি নিয়ে আসে এমন ক্রিয়া ভিত্তিক একটি ত্রুটি রিপোর্ট করে না ।

সি: \ প্রোগ্রাম ফাইলসমূহ \ ডটনেট \ এসডিকে \ ২.০.২ \ এসডিএসস \ মাইক্রোসফট.এনইটি.এসডিকি \ বিল্ড \ মাইক্রোসফট.এনইটি.এসডিকি.ডাফল্ট আইটেমস.টারজেটস (২3৩,৫): ত্রুটি: নকল 'কমাইল' আইটেম অন্তর্ভুক্ত ছিল। .NET SDK- এ ডিফল্টরূপে আপনার প্রকল্প ডিরেক্টরি থেকে আইটেমগুলি 'সংকলন' অন্তর্ভুক্ত করে। হয় আপনি আপনার প্রকল্পের ফাইল থেকে এই আইটেমগুলি সরিয়ে ফেলতে পারেন, বা যদি আপনি প্রজেক্ট ফাইলটিতে স্পষ্টভাবে অন্তর্ভুক্ত করতে চান তবে 'সক্ষম করুন ডিফল্টকম্পাইলআইটেমস' সম্পত্তিটিকে 'ভুয়া'তে সেট করতে পারেন। আরও তথ্যের জন্য, https://aka.ms/sdkimp Clearitems দেখুন । সদৃশ আইটেমগুলি ছিল: 'এসেম্বলিআইনফো.সি.এস'

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.