আমি কীভাবে সমাবেশ ফাইল সংস্করণ পেতে পারি


727

ইন AssemblyInfoদুই সমাবেশ সংস্করণ আছে:

  1. AssemblyVersion: বিশিষ্ট সমাবেশটির সংস্করণ উল্লেখ করুন।
  2. AssemblyFileVersion: উইন 32 ফাইল সংস্করণ সংস্থার জন্য একটি নির্দিষ্ট সংস্করণ নম্বর ব্যবহার করতে একটি সংকলককে নির্দেশ দেয়। উইন 32 ফাইল সংস্করণটি সমাবেশের সংস্করণ সংখ্যার মতো হতে হবে না।

Assembly Versionনিম্নলিখিত কোডের লাইন সহ আমি এটি পেতে পারি :

Version version = Assembly.GetEntryAssembly().GetName().Version;

তবে আমি কীভাবে এটি পেতে পারি Assembly File Version?


2
"সমাবেশ ভার্সন" এর বিপরীতে "অ্যাসেম্বলি ফাইল সংস্করণ" বলতে কী বোঝ? আপনি কি একটি উদাহরণ দিতে পারেন?
জিয়াওফু

7
@ Xiaofu - "সংসদীয় সংস্করণ" হ'ল। নেট অভ্যন্তরীণভাবে ব্যবহার করে। "অ্যাসেম্বলি ফাইল সংস্করণ" হ'ল যা আপনি যখন কোনও ফাইলের উপর ডান ক্লিক করেন এবং "বৈশিষ্ট্যগুলি" তারপরে "বিশদ" ট্যাবে যান তা প্রদর্শিত হয়। তারা একই নয়।
rory.ap

আমি খুঁজে পেয়েছি যে অ্যাপ্লাডাটাতে ইউজার.কনফিগের অবস্থান নির্ধারণের সময় অ্যাসেম্বলি সংস্করণটি কী ব্যবহার করা হয়।
কাইল

উত্তর:


865

আপনি আসলে কী চান সে সম্পর্কে স্পষ্টতা চেয়ে জিজ্ঞাসা করতে আমার উপরের মন্তব্যটি দেখুন। আশা করি এটি হ'ল:

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fvi.FileVersion;

4
@ শিয়াফু: এর পরিবর্তে কোনও এসেম্বলিআইএনফোস ফাইল থেকে সংস্করণ নম্বরগুলি পাওয়ার কোনও উপায় আছে কি?
মার্কাস

56
এই কোডটির সাথে একটি সমস্যা হ'ল, এটি আসলে 1.0 ফিরে আসবে * *। * যদি আপনি বিল্ড এবং রিভিশন নম্বর নির্দিষ্ট না করে থাকেন। AssemblyName.GetAssemblyName (assembly.Location) .Version.ToString (); যদি আপনি উভয় সংস্করণ একইভাবে সেট করে থাকেন তবে ফাইলটি ভার্সনের মতো হওয়া উচিত - এটি 'সংকলিত' সংস্করণ নম্বর পেয়ে যাবে।
ডোগুহান উলুকা

17
@ DoguhanUluca- এ তারা দুটি আলাদা জিনিস। এটি আপনাকে বিধানসভা সংস্করণ দেবে, ফাইল সংস্করণ নয়। "যদি আপনি উভয় সংস্করণ একইভাবে সেট করেন" তবে এটি সমাধান নয় not
নায়ারগডস

1
না FileVersionInfoকেবলমাত্র stringবৈশিষ্ট্য এবং কোন Versionবৈশিষ্ট্য?
কাইল

3
@ ইয়েজচাক: Assembly.GetEntryAssembly()অফিস অ্যাড-ইনগুলির প্রসঙ্গে এবং অন্যান্য অনেক ক্ষেত্রে NULL প্রদান করে। এছাড়াও, আপনি যদি অ্যাডিন্স / প্লাগইনগুলি সম্পর্কে ভাবেন - এন্ট্রিঅ্যাস্পব্যাকশন হল হোস্ট অ্যাপ্লিকেশন, এবং বেশিরভাগ ক্ষেত্রে আপনি আপনার কোড (টিএম) এর সংস্করণ চান :) তবে এটির উত্তরে, উত্তরটিতে ব্যবহৃত উত্তরটিও নালাগুলি assembly.Locationহতে পারে (অর্থাত্ প্রথম এলোমেলোভাবে কেস বেরিয়েছে: github.com/Azure/azure-funifications-host/issues/1233 ) এবং এটি সম্ভবত নাল এন্ট্রি- অ্যাসেমব্লি হওয়ার চেয়েও বেশিবার ঘটে।
কোয়েটজলকোটল

209

এখানে তিনটি সংস্করণ রয়েছে : সমাবেশ , ফাইল এবং পণ্য । এগুলি বিভিন্ন বৈশিষ্ট্য দ্বারা ব্যবহৃত হয় এবং আপনি যদি তাদের স্পষ্টভাবে নির্দিষ্ট না করেন তবে বিভিন্ন ডিফল্ট মান গ্রহণ করে।

string assemblyVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); 
string assemblyVersion = Assembly.LoadFile("your assembly file").GetName().Version.ToString(); 
string fileVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion; 
string productVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).ProductVersion;

17
সেই ব্লগ পোস্টটি কোনও দিন অদৃশ্য হয়ে যাওয়ার জন্য, এখানে এটি রেফারেন্সের জন্য সিদ্ধ করা হয়েছে:string assemblyVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); string assemblyVersion = Assembly.LoadFile('your assembly file').GetName().Version.ToString(); string fileVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion; string productVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).ProductVersion;
জেএমডি

3
এবং যাঁরা এসেম্বলিআইএনফোস ফাইলগুলিতে [assembly: AssemblyVersion("2.0.*")]এইটি নির্দিষ্ট করতে চান, তাদের জন্য এসেম্বলি ভার্সন ব্যবহারের জন্য (আপনি যে নম্বরই চান) === ফাইল ভার্সন ব্যবহারের জন্য === [assembly: AssemblyFileVersion("2.0.*")]এবং প্রোডাক্ট ভার্সন ব্যবহারের জন্য === সামঞ্জস্যতার [assembly: AssemblyInformationalVersion("2.0.*")] জন্য শেষটি স্ট্রিং প্রত্যয় নিতে পারে SemVer:[assembly: AssemblyInformationalVersion("2.0.0-alpha")]
জেসি

সংযোজন: প্রত্যয় স্বরলিপি AssemblyFileVersionব্যবহার করতে পারে না *। :( এটি চারটি সংখ্যার প্রয়োজন[assembly: AssemblyFileVersion("2.0.0.1")]
জেসি

66

আমি যখন অ্যাপ্লিকেশন ফাইল সংস্করণটি অ্যাক্সেস করতে চাই (যা সমাবেশের তথ্য -> ফাইল সংস্করণে সেট করা আছে) সংস্করণটি প্রদর্শনের জন্য ফর্ম লোডে কোনও লেবেলের পাঠ্য সেট করতে বলুন, আমি সবেমাত্র ব্যবহার করেছি

versionlabel.Text = "Version " + Application.ProductVersion;

53
নোট করুন যে এর জন্য System.Windows. forms সম্পর্কিত একটি রেফারেন্স প্রয়োজন এবং তাই এটি সমস্ত অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত নাও হতে পারে।
ব্র্যাডলিডটনেট

2
দুর্ভাগ্যক্রমে, এটি একটি স্ট্রিং। আপনি যদি এটিকে আরও সাধারণ "v1.08" ধরণের বিন্যাসে নিজেকে ফর্ম্যাট করতে চান তবে আদর্শ নয়। আপনি যদি পূর্ণসংখ্যার হিসাবে উপ-উপাদানগুলি পেতে ভার্সন অবজেক্টটি আসলে পান তবে অনেকগুলি হ্যান্ডিয়ার।
নায়ারগডস

1
এছাড়াও, এটি এসেম্বলি
ভার্সন

কোনও উচ্চ প্রতিনিধি ব্যবহারকারী এই উত্তরটি সম্পাদন করতে পারবেন যে এটি আরও উইন্ডোজ ফর্মগুলির জন্যই এটি আরও পরিষ্কার করে দেওয়া যায়?
জুন

আমি ঠিক এটিই খুঁজছিলাম, উত্তরের জন্য ধন্যবাদ!
ডেভিড রেফুয়া

23

আপডেট: আমার উদ্ধৃত পোস্ট , আইইন এবং @ দিমিত্রি লোবানভের উপরে রিচার্ড গ্রিমেস যেভাবে উল্লেখ করেছেন , আমার উত্তর তাত্ত্বিকভাবে সঠিক তবে বাস্তবে ভুল।

যেমন আমার অগণিত বই ইত্যাদি থেকে মনে রাখা উচিত ছিল, যখন কেউ এই বৈশিষ্ট্যগুলি ব্যবহার করে সেট করে [assembly: XXXAttribute], সেগুলি সংকলক দ্বারা হাইজ্যাক করে এবং এতে স্থাপন করা হয়VERSIONINFO রিসোর্সে ।

উপরের কারণগুলির জন্য, আপনাকে @ জিওফুর উত্তরে পদ্ধতির ব্যবহার করতে হবে কারণ সেগুলি থেকে সংকেত বের হওয়ার পরে বৈশিষ্ট্যগুলি ছিনিয়ে নেওয়া হয়েছে।


পাবলিক স্ট্যাটিক স্ট্রিং গেটপ্রডাক্ট ভার্সন ()
{
  var বৈশিষ্ট্য = (সমাবেশ ভার্সনঅ্যাট্রিবিউট) বিধানসভা
    .GetExecutingAssembly ()
    .গেটকাস্টমঅ্যাট্রিবিউটস (টাইপফ (এসেম্বলি ভার্সনঅ্যাট্রিবিউট), সত্য)
    .Single ();
   রিটার্ন অ্যাট্রিবিউট. ইনফরমেশনাল ভার্সন;
}

( Http://bytes.com/groups/net/420417- বিচ্ছিন্ন রূপান্তরপত্রিকা থেকে - যেমন এখানে উল্লেখ করা হয়েছে, আপনি যদি অন্য কোনও বৈশিষ্ট্যের সন্ধান করছেন তবে উপরের পরিবর্তে)


আরে রুবেন, 2 নোট। প্রথমত, প্রশ্নটি অ্যাসেম্বলি ফাইল সংস্করণ নয়, এসেম্বলি ভার্সন চেয়েছিল। দ্বিতীয়ত, এসেম্বলি.গেটএক্সেকিউটিংঅ্যাস্পাবশন ()। গেটকাস্টমঅ্যাট্রিবিউটস (টাইপফ (এসেম্বলি ভার্সনঅ্যাট্রিবিউট), সত্য) দৈর্ঘ্যের একটি অ্যারে 0 প্রদান করে I
আয়ান

প্রথম পয়েন্টটি আবার বলুন, কেন আমি বললাম "যদি আপনি কোনও আলাদা বৈশিষ্ট্যের সন্ধান করেন তবে উপরেরটির পরিবর্তে" (আইআইআরসি আমি এটি চেষ্টা করে দেখিনি)। দ্বিতীয়টি, এটি
দুর্ভাগ্যজনক

হ্যাঁ, আপনি আসলে .GetCustomAttribute () এর মাধ্যমে એસেম্বলি ভার্সন বৈশিষ্ট্যটি পেতে পারেন না, সমাবেশের সংস্করণটি AssemblyName.Versionকেবলমাত্র সম্পত্তির মাধ্যমে পুনরুদ্ধার করা যেতে পারে । তবে অন্য সমস্ত বৈশিষ্ট্যের সাথে এটি করার সঠিক উপায়
দিমিত্রি লোবানভ

@ দিমিত্রিলবানভ এবং আইইন অনুরোধগুলির জন্য ধন্যবাদ। আমি আশা করি সম্পাদনাটি মোছার পরিবর্তে উত্তরটি রাখার পক্ষে যথেষ্ট পরিমাণে কভার করেছে - আমাকে জানাবেন!
রুবেন বারটেলিংক

1
আমি নেট নেট 3.1 এর AssemblyInformationalVersionAttributeপরিবর্তে ব্যবহার করেছিAssemblyVersionAttribute
ভাস্যায় মিলিভিডভ

5

এটা ব্যবহার কর:

((AssemblyFileVersionAttribute)Attribute.GetCustomAttribute(
    Assembly.GetExecutingAssembly(), 
    typeof(AssemblyFileVersionAttribute), false)
).Version;

অথবা এটা:

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