回答
Assembly assembly = Assembly.LoadFrom("MyAssembly.dll");
Version ver = assembly.GetName().Version;
重要: 應當指出的是,這是不是最好的答案,原來的問題。不要忘記在此頁面上閱讀更多內容。
這會將MyAssembly.dll加載到正在運行的AppDomain中......壞主意。 – staafl 2013-10-10 13:03:38
@staafl:我覺得這很可能是OP想要的。如果沒有,還有「Assembly.ReflectionOnlyLoadFrom」請參閱http://msdn.microsoft.com/en-us/library/system.reflection.assembly.reflectiononlyloadfrom.aspx – Kris 2013-10-10 13:36:08
我不相信OP以任何方式暗示它。此外,ReflectionOnlyLoadFrom還有其自身的副作用 - 「僅反射上下文與其他上下文沒有區別,加載到上下文中的程序集只能通過卸載應用程序域來卸載。」 – staafl 2013-10-10 13:49:43
您可以使用System.Reflection.Assembly.Load *()方法,然後獲取其AssemblyInfo。
爲了得到它而啓動的組件(WinForm的,控制檯應用程序等等)
using System.Reflection;
...
Assembly.GetEntryAssembly().GetName().Version
GetExecutingAssembly()也可能有所幫助。 – 2013-05-27 08:57:24
克里斯,你的版本需要加載從實際的DLL文件彙編時的偉大工程(和如果DLL在那裏!),但是,如果DLL是EMBEDDED(即,不是文件,而是嵌入式DLL),會得到一個不需要的錯誤。
的另一件事是,如果使用了版本控制方案的東西,如「1.2012.0508.0101」,當一個人得到的版本字符串,你就會得到「1.2012.518.101」; 注意缺失的零。
所以,這裏的一些額外的功能,以獲得一個DLL(嵌入式DLL文件或)的版本:
public static System.Reflection.Assembly GetAssembly(string pAssemblyName)
{
System.Reflection.Assembly tMyAssembly = null;
if (string.IsNullOrEmpty(pAssemblyName)) { return tMyAssembly; }
tMyAssembly = GetAssemblyEmbedded(pAssemblyName);
if (tMyAssembly == null) { GetAssemblyDLL(pAssemblyName); }
return tMyAssembly;
}//System.Reflection.Assembly GetAssemblyEmbedded(string pAssemblyDisplayName)
public static System.Reflection.Assembly GetAssemblyEmbedded(string pAssemblyDisplayName)
{
System.Reflection.Assembly tMyAssembly = null;
if(string.IsNullOrEmpty(pAssemblyDisplayName)) { return tMyAssembly; }
try //try #a
{
tMyAssembly = System.Reflection.Assembly.Load(pAssemblyDisplayName);
}// try #a
catch (Exception ex)
{
string m = ex.Message;
}// try #a
return tMyAssembly;
}//System.Reflection.Assembly GetAssemblyEmbedded(string pAssemblyDisplayName)
public static System.Reflection.Assembly GetAssemblyDLL(string pAssemblyNameDLL)
{
System.Reflection.Assembly tMyAssembly = null;
if (string.IsNullOrEmpty(pAssemblyNameDLL)) { return tMyAssembly; }
try //try #a
{
if (!pAssemblyNameDLL.ToLower().EndsWith(".dll")) { pAssemblyNameDLL += ".dll"; }
tMyAssembly = System.Reflection.Assembly.LoadFrom(pAssemblyNameDLL);
}// try #a
catch (Exception ex)
{
string m = ex.Message;
}// try #a
return tMyAssembly;
}//System.Reflection.Assembly GetAssemblyFile(string pAssemblyNameDLL)
public static string GetVersionStringFromAssembly(string pAssemblyDisplayName)
{
string tVersion = "Unknown";
System.Reflection.Assembly tMyAssembly = null;
tMyAssembly = GetAssembly(pAssemblyDisplayName);
if (tMyAssembly == null) { return tVersion; }
tVersion = GetVersionString(tMyAssembly.GetName().Version.ToString());
return tVersion;
}//string GetVersionStringFromAssemblyEmbedded(string pAssemblyDisplayName)
public static string GetVersionString(Version pVersion)
{
string tVersion = "Unknown";
if (pVersion == null) { return tVersion; }
tVersion = GetVersionString(pVersion.ToString());
return tVersion;
}//string GetVersionString(Version pVersion)
public static string GetVersionString(string pVersionString)
{
string tVersion = "Unknown";
string[] aVersion;
if (string.IsNullOrEmpty(pVersionString)) { return tVersion; }
aVersion = pVersionString.Split('.');
if (aVersion.Length > 0) { tVersion = aVersion[0]; }
if (aVersion.Length > 1) { tVersion += "." + aVersion[1]; }
if (aVersion.Length > 2) { tVersion += "." + aVersion[2].PadLeft(4, '0'); }
if (aVersion.Length > 3) { tVersion += "." + aVersion[3].PadLeft(4, '0'); }
return tVersion;
}//string GetVersionString(Version pVersion)
public static string GetVersionStringFromAssemblyEmbedded(string pAssemblyDisplayName)
{
string tVersion = "Unknown";
System.Reflection.Assembly tMyAssembly = null;
tMyAssembly = GetAssemblyEmbedded(pAssemblyDisplayName);
if (tMyAssembly == null) { return tVersion; }
tVersion = GetVersionString(tMyAssembly.GetName().Version.ToString());
return tVersion;
}//string GetVersionStringFromAssemblyEmbedded(string pAssemblyDisplayName)
public static string GetVersionStringFromAssemblyDLL(string pAssemblyDisplayName)
{
string tVersion = "Unknown";
System.Reflection.Assembly tMyAssembly = null;
tMyAssembly = GetAssemblyDLL(pAssemblyDisplayName);
if (tMyAssembly == null) { return tVersion; }
tVersion = GetVersionString(tMyAssembly.GetName().Version.ToString());
return tVersion;
}//string GetVersionStringFromAssemblyEmbedded(string pAssemblyDisplayName)
var versionAttrib = new AssemblyName(Assembly.GetExecutingAssembly().FullName);
下面是一個使用位反射得到一個版本的好方法包含特定類的DLL:
var ver = System.Reflection.Assembly.GetAssembly(typeof(!Class!)).GetName().Version;
只需更換!Class!用您希望獲取版本的DLL中定義的類的名稱。
這是我首選的方法,因爲如果我爲不同的部署移動DLL,我不必更改文件路徑。
請注意,這僅適用於所討論的程序集是由當前程序靜態引用的問題。 – staafl 2013-10-10 13:02:39
這是最好的答案,因爲DLL不一定是入口程序集,甚至不是從 – 2017-10-22 23:46:59
調用的程序集,請參閱https://stackoverflow.com/a/909583/492以獲取不同類型的版本信息。例如'FileVersionInfo' – 2017-10-23 00:20:06
如果dll是.net或Win32,此工作。如果dll是.net,反射方法纔有效。此外,如果你使用反射,你有負載整個DLL到內存的開銷。下面的方法不會將程序集加載到內存中。
// Get the file version for the notepad.
FileVersionInfo myFileVersionInfo = FileVersionInfo.GetVersionInfo(@"C:\MyAssembly.dll");
// Print the file name and version number.
Console.WriteLine("File: " + myFileVersionInfo.FileDescription + '\n' +
"Version number: " + myFileVersionInfo.FileVersion);
來源:http://msdn.microsoft.com/en-us/library/system.diagnostics.fileversioninfo.fileversion.aspx
我喜歡這個。爲什麼你會打擾加載DLL,然後使用反射來獲取版本,當你真正想要做的是這個? – aggieNick02 2013-02-25 17:19:03
+1非常好,正是我需要的。 – 2013-06-25 15:13:15
@ben,你可以編輯帖子嗎?我看到我失去了-1代表加入downvote,我不記得做。它不會讓我改變它,除非你編輯帖子。乾杯! – 2014-08-21 09:35:32
首先,有兩種可能的 '版本',你可能有興趣
的Windows文件系統文件的版本,適用到所有可執行文件
程序集構建版本,由編譯器嵌入到.NET程序集中(顯然只適用於。NET程序集DLL和EXE文件)
在前一種情況下,你應該使用本安德森的答案;在後一種情況下,請使用AssemblyName.GetAssemblyName(@"c:\path\to\file.dll").Version
或Tataro的答案,以防程序集引用該程序集。
請注意,您可以忽略使用.Load()
/.LoadFrom()
方法的所有答案,因爲這些方法實際上將程序集加載到當前的AppDomain中 - 這與裁減樹來查看它的年齡有些類似。
+1這是比我的更優的答案。 – Kris 2013-10-11 12:40:27
- 1. 以編程方式獲取最新版本Firefox的編號
- 2. 以編程方式獲取最新的joomla版本編號
- 3. 以編程方式獲取IIS版本
- 4. 以編程方式獲取SignalR版本
- 5. 以編程方式獲取最新穩定R版本號
- 6. 以編程方式增加版本號?
- 7. 如何以編程方式獲取應用程序的版本
- 8. 如何以編程方式獲取SVN修訂版號?
- 9. 以編程方式從bar-descriptor.xml文件中提取版本號
- 10. Erlang:以編程方式獲取應用程序版本
- 11. Firefox擴展如何以編程方式獲取自己的版本號?
- 12. 使用C,C++或Java以編程方式獲取Java和Flash的版本號
- 13. 以編程方式獲取maven軟件包的最新版本號
- 14. 以編程方式獲取最新的magento版本
- 15. 如何以編程方式獲取Android的固件版本?
- 16. 以編程方式獲取當前版本的ruby標準庫
- 17. 以編程方式獲取最新的npm軟件包版本?
- 18. 如何以編程方式獲取MSI產品版本的C#
- 19. 在iOS中以編程方式獲取應用的版本
- 20. 以編程方式獲取完整的Ruby版本?
- 21. 以編程方式獲取項目的Maven版本
- 22. Eclipse RCP:如何以編程方式從產品文件中獲取版本號?
- 23. 如何以編程方式獲取nuget包版本?
- 24. 如何以編程方式獲取HDFS和YARN版本?
- 25. 如何以編程方式獲取Eclipse版本?
- 26. 以編程方式獲取Jquery移動版本
- 27. 如何以編程方式檢索庫的版本號?
- 28. 以編程方式創建「版本」
- 29. 以編程方式使用android版本
- 30. 以編程方式檢查android版本
不能相信這是問了6分鐘前,正要問同樣的! – tpower 2009-11-18 12:03:24
哈哈 - 爲我工作... – 2009-11-18 12:50:26
查看這個鏈接也爲自動遞增版本 - http://blog.mbcharbonneau.com/2007/03/13/auto-incrementing-build-numbers-in-visual-studio/ – 2009-11-18 12:50:57