2011-02-09 80 views
132

我試圖讓用C#3.0中執行的程序集版本,使用下面的代碼:我如何獲得正在執行的程序集版本?

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

是否有這樣做的另一種適當的方式?

回答

231

兩個選項...不管應用程序類型,隨時可以調用:

Assembly.GetExecutingAssembly().GetName().Version 

如果Windows Forms應用程序,你可以隨時通過應用程序來訪問,如果專門針對產品版本期待。

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在我的代碼的要求。

+5

如果它部署的ClickOnce,您需要檢查`System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion` – 2011-02-09 04:36:06

+0

會是什麼很有意思:你需要在哪裏指定實際版本?我在AssemblyInfo.cs中指定了AssemblyVersion和AssemblyFileVersion,並且從上述方法調用中得到的所有結果都是:0.0.0.0,儘管指定了1.0.0 – AgentKnopf 2013-06-07 09:35:15

+0

@Zainodis如果您指的是@Justin提到的`ClickOnce`版本,它是在項目屬性中的「發佈」選項卡上指定(即與AssemblyVersion或AssemblyFileVersion無關)。 – 2013-06-07 12:55:53

5

這應該這樣做:

Assembly assem = Assembly.GetExecutingAssembly(); 
AssemblyName aName = assem.GetName(); 
return aName.Version.ToString(); 
17
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組件的實例,則從C#組件調用GetEntryAssembly方法時將返回null,因爲該進程的入口點是非託管代碼而非託管程序集。

29

在MSDN,Assembly.GetExecutingAssembly Method,約法「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」的答案,但是,如果你知道至少有一個類型的執行程序集的,它不是強制創建助手類,並節省您的時間。

相關問題