回答
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