আমি কীভাবে এক্সিকিউটিং অ্যাসেম্বলি সংস্করণ পেতে পারি?


169

আমি নিম্নলিখিত কোডটি ব্যবহার করে সি # 3.0 এ এক্সিকিউটিভ অ্যাসেম্বলি সংস্করণটি পাওয়ার চেষ্টা করছি:

var assemblyFullName = Assembly.GetExecutingAssembly().FullName;
var version = assemblyFullName .Split(',')[1].Split('=')[1];

এটি করার অন্য কোনও সঠিক উপায় আছে কি?

উত্তর:


293

দুটি বিকল্প ... অ্যাপ্লিকেশন প্রকার নির্বিশেষে আপনি সর্বদা আবেদন করতে পারেন:

Assembly.GetExecutingAssembly().GetName().Version

যদি কোনও উইন্ডোজ ফর্ম অ্যাপ্লিকেশন, আপনি যদি বিশেষভাবে পণ্য সংস্করণটির সন্ধান করেন তবে আপনি সর্বদা অ্যাপ্লিকেশনটির মাধ্যমে অ্যাক্সেস করতে পারেন।

Application.ProductVersion

GetExecutingAssemblyঅ্যাসেম্বলি রেফারেন্সের জন্য ব্যবহার করা সর্বদা কোনও বিকল্প নয়। এরূপ হিসাবে, ব্যক্তিগতভাবে আমি এমন প্রকল্পগুলিতে স্থিতিশীল সহায়ক শ্রেণি তৈরি করা দরকারী বলে মনে করি যেখানে আমার অন্তর্নিহিত সমাবেশ বা সমাবেশের সংস্করণটি উল্লেখ করতে পারে:

// A sample assembly reference class that would exist in the `Core` project.
public static class CoreAssembly
{
    public static readonly Assembly Reference = typeof(CoreAssembly).Assembly;
    public static readonly Version Version = Reference.GetName().Version;
}

তারপরে আমি CoreAssembly.Versionপ্রয়োজনীয়ভাবে আমার কোডে পরিষ্কারভাবে উল্লেখ করতে পারি ।


7
যদি এটি ক্লিকঅনসের সাথে স্থাপন করা হয় তবে আপনার যাচাই করা দরকারSystem.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion
জাস্টিন মরগান

কী আকর্ষণীয় হবে: আপনার আসল সংস্করণটি নির্দিষ্ট করার দরকার কোথায়? আমি আমার এসেম্বলিআইএনফোসগুলিতে এসেম্বলি ভার্সন এবং এসেম্বলি ফাইল
ফাইলটি

@ জয়নোডিস আপনি যদি @ ClickOnceজাস্টিন দ্বারা উল্লিখিত সংস্করণটি উল্লেখ করছেন তবে Publishএটি প্রকল্পের বৈশিষ্ট্যগুলির মধ্যে থাকা ট্যাবে নির্দিষ্ট করা আছে (যেমন, এসেম্বলি ভার্সন বা এসেম্বলিফিলিভিশন সম্পর্কিত নয়)।
ক্রিস বাক্সটার

প্রতিক্রিয়াটির জন্য ক্যালগারিকোডার ধন্যবাদ জানায়, ক্লিকঅনস কী তা আমি জানি না, তবে ভিএস এর মাধ্যমে এসেম্বলিআইএনফো ফাইল সম্পাদনা করার সময় এটি হঠাৎ করেই ওয়ে হয়ে গেল। কোনও পাঠ্য সম্পাদকে ম্যানুয়ালি এসেম্বলিআইএনফো.কাস সম্পাদনা করার ফলে সমস্ত ক্ষেত্র খালি হয়ে গেছে। যেভাবেই হোক, এটি এখনই সমাধান করা হয়েছে :)
এজেন্টকনপফ

7
এটি উল্লেখযোগ্য যে প্রবর্তন প্রসঙ্গে, এটি ASP.NET MVC অ্যাপ্লিকেশনগুলিতে কাজ করে না। কাজের ওয়েবসাইটটি আপনার ওয়েবসাইট অ্যাসেমব্লিতে একটি পরিচিত প্রকারের উল্লেখ করতে পারে, যেমন সর্বব্যাপী এমভিসি HomeController, তাই রেজারে:v@(Assembly.GetAssembly(typeof(MyWebProject.Mvc.Controllers.HomeController)).GetName().Version.ToString(2))
জেমস ম্যাককর্ম্যাক

38

এমএসডিএন-তে, এসেম্বলি.গেটএক্সেকিউটিংএস্প্যাবিলিটি পদ্ধতিটি "জিটেক্সেকিউটিংএ্যাসবেশন" পদ্ধতি সম্পর্কে মন্তব্য করেছে যে পারফরম্যান্সের কারণে আপনাকে এই পদ্ধতিটি কেবল তখনই কল করা উচিত যখন আপনি ডিজাইনের সময় জানেন না কী কী অ্যাসেম্বলি বর্তমানে সম্পাদন করছে।

বর্তমান বিধানসভাটি উপস্থাপন করে এমন কোনও অ্যাসেমবিলি অবজেক্ট পুনরুদ্ধার করার প্রস্তাবিত উপায় হ'ল সমাবেশে Type.Assemblyপাওয়া কোনও প্রকারের সম্পত্তি ব্যবহার করা ।

নিম্নলিখিত উদাহরণটি চিত্রিত করে:

using System;
using System.Reflection;

public class Example
{
    public static void Main()
    {
        Console.WriteLine("The version of the currently executing assembly is: {0}",
                          typeof(Example).Assembly.GetName().Version);
    }
}

/* This example produces output similar to the following:
   The version of the currently executing assembly is: 1.1.0.0

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


19
using System.Reflection;
{
    string version = Assembly.GetEntryAssembly().GetName().Version.ToString();
}

এমএসডিএন http://msdn.microsoft.com/en-us/library/system.reflection.asocolate.getentryassembly%28v=vs.110%29.aspx থেকে মন্তব্যসমূহ :

GetEntryAssemblyপদ্ধতি ফিরে আসতে পারেন nullযখন সমাবেশ পরিচালিত একটি একটি অপরিচালিত অ্যাপ্লিকেশন থেকে লোড হয়েছে। উদাহরণস্বরূপ, যদি কোনও নিয়ন্ত্রণহীন অ্যাপ্লিকেশন সি # তে লিখিত কোনও COM উপাদানগুলির উদাহরণ তৈরি করে, GetEntryAssemblyতবে সি # উপাদান থেকে পদ্ধতিটিতে একটি কল আসে null, কারণ প্রক্রিয়াটির জন্য প্রবেশের বিন্দু একটি পরিচালিত অ্যাসেম্বলির পরিবর্তে নিয়ন্ত্রণহীন কোড ছিল।


2
+1 টি। GetEntryAssembly(বনাম GetCallingAssemblyবা GetExecutingAssembly) কেবলমাত্র রেফারেন্স লাইব্রেরির মধ্যে থেকে ডেকে এলে কাজ করে বলে মনে হয়।
ড্রাজস


1

অবশেষে আমি typeof(MyClass).GetTypeInfo().Assembly.GetName().Versionএকটি নেটস্ট্যান্ডার্ড 1.6 অ্যাপের জন্য স্থির হয়েছি। অন্যান্য প্রস্তাবিত উত্তরগুলির সমস্ত একটি আংশিক সমাধান উপস্থাপন করে। এটিই কেবলমাত্র আমার প্রয়োজনীয় জিনিসটি পেয়েছিল।

স্থানের সংমিশ্রণ থেকে উত্সাহিত:

https://msdn.microsoft.com/en-us/library/x4cw969y(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/2exyydhb(v=vs.110).aspx


1

Product Version আপনি যদি গিট ভার্সন বা অন্যান্য সংস্করণ সফ্টওয়্যার মাধ্যমে সংস্করণ ব্যবহার করছেন তবে পছন্দ করা যেতে পারে।

আপনার ক্লাস লাইব্রেরির মধ্যে থেকে এটি পেতে আপনি কল করতে পারেন System.Diagnostics.FileVersionInfo.ProductVersion:

using System.Diagnostics;
using System.Reflection;

//...

var assemblyLocation = Assembly.GetExecutingAssembly().Location;
var productVersion = FileVersionInfo.GetVersionInfo(assemblyLocation).ProductVersion

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

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