जवाबों:
दो विकल्प ... आवेदन प्रकार की परवाह किए बिना आप हमेशा चालान कर सकते हैं:
Assembly.GetExecutingAssembly().GetName().Version
यदि कोई Windows प्रपत्र अनुप्रयोग, आप हमेशा उत्पाद संस्करण के लिए देख रहे हैं, तो अनुप्रयोग के माध्यम से पहुँच सकते हैं।
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
अपने कोड में आवश्यकतानुसार सफाई कर सकता हूं।
ClickOnce
@Justin द्वारा उल्लिखित संस्करण का उल्लेख कर रहे हैं , तो यह Publish
परियोजना के गुणों के भीतर टैब पर निर्दिष्ट किया गया है (अर्थात, असेंबलीव्यू या असेंबली फ़ाइलवेशन से संबंधित नहीं)।
HomeController
, इसलिए रेजर में:v@(Assembly.GetAssembly(typeof(MyWebProject.Mvc.Controllers.HomeController)).GetName().Version.ToString(2))
MSDN में, असेंबली .GetExecutingAssembly विधि , विधि "getexecutingassembly" के बारे में टिप्पणी है, कि प्रदर्शन कारणों से, आपको इस विधि को केवल तभी कॉल करना चाहिए जब आप डिज़ाइन समय पर नहीं जानते कि वर्तमान में असेंबली क्या निष्पादित कर रही है।
असेंबली ऑब्जेक्ट को पुनर्प्राप्त करने का अनुशंसित तरीका जो वर्तमान असेंबली का प्रतिनिधित्व करता 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
बेशक यह सहायक वर्ग "सार्वजनिक स्टेटिक क्लास CoreAssembly" के साथ उत्तर के समान है, लेकिन, यदि आपको कम से कम एक प्रकार की एग्जिबिशन असेंबली के बारे में पता है, तो यह सहायक वर्ग बनाने के लिए अनिवार्य नहीं है, और यह आपका समय बचाता है।
using System.Reflection;
{
string version = Assembly.GetEntryAssembly().GetName().Version.ToString();
}
MSDN http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getentryassembly%28v=vs.110%29.aspx से रिमार्क्स :
GetEntryAssembly
विधि लौट सकते हैं null
जब विधानसभा में कामयाब एक एक अप्रबंधित आवेदन से लोड किया गया है। उदाहरण के लिए, यदि कोई अप्रबंधित एप्लिकेशन C # में लिखे गए COM घटक का एक उदाहरण बनाता है, तो GetEntryAssembly
C # घटक रिटर्न से विधि पर कॉल करता है null
, क्योंकि प्रक्रिया के लिए प्रवेश बिंदु प्रबंधित असेंबली के बजाय अप्रबंधित कोड था।
GetEntryAssembly
(बनाम GetCallingAssembly
या GetExecutingAssembly
) केवल एक चीज प्रतीत होती है जो एक संदर्भ पुस्तकालय के भीतर से कॉल करने पर काम करती है।
यह करना चाहिए:
Assembly assem = Assembly.GetExecutingAssembly();
AssemblyName aName = assem.GetName();
return aName.Version.ToString();
मैं आखिरकार बस गया typeof(MyClass).GetTypeInfo().Assembly.GetName().Version
एक netstandard1.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
Product Version
यदि आप GitVersion या अन्य संस्करण सॉफ़्टवेयर के माध्यम से संस्करण का उपयोग कर रहे हैं, तो इसे प्राथमिकता दी जा सकती है।
अपनी कक्षा के पुस्तकालय से इसे प्राप्त करने के लिए आप कॉल कर सकते हैं System.Diagnostics.FileVersionInfo.ProductVersion
:
using System.Diagnostics;
using System.Reflection;
//...
var assemblyLocation = Assembly.GetExecutingAssembly().Location;
var productVersion = FileVersionInfo.GetVersionInfo(assemblyLocation).ProductVersion
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion