我如何获得程序集文件版本
在AssemblyInfo
有两个汇编版本:
-
AssemblyVersion
:指定要归因的组件版本。 -
AssemblyFileVersion
:指示编译器为Win32文件版本资源使用特定的版本号。 Win32文件版本不需要与程序集的版本号相同。
我可以用下面的代码行得到Assembly Version
:
Version version = Assembly.GetEntryAssembly().GetName().Version;
但是我怎样才能得到Assembly File Version
?
看到我上面的评论要求澄清你真正想要什么。 希望是这样的:
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location); string version = fvi.FileVersion;
有三个版本 : 程序集 , 文件和产品 。 它们被不同的function使用,如果不明确地指定它们,则会采用不同的默认值。
string assemblyVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); string assemblyVersion = Assembly.LoadFile('your assembly file').GetName().Version.ToString(); string fileVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion; string productVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).ProductVersion;
当我想要访问应用程序文件版本(在Assembly Information – > File version中设置了什么)时,说在表单加载中设置标签的文本以显示版本,我刚刚使用过
versionlabel.Text = "Version " + Application.ProductVersion;
更新:正如理查德·格里姆斯在我引用的文章中提到的 ,@Iain和@Dmitry Lobanov,我的答案在理论上是正确的,但在实践中是错误的。
正如我应该从无数书籍等中记住的,当使用[assembly: XXXAttribute]
设置这些属性时,它们被编译器劫持并放入VERSIONINFO
资源。
由于上述原因,您需要使用@ Xiaofu的答案中的方法,因为从信号中提取信号后,属性被剥离。
公共静态stringGetProductVersion() { var属性=(AssemblyVersionAttribute)程序集 .GetExecutingAssembly() .GetCustomAttributes(typeof(AssemblyVersionAttribute),true) 。单(); 返回属性.InformationalVersion; }
(来自http://bytes.com/groups/net/420417-assemblyversionattribute – 如上所述,如果你正在寻找一个不同的属性,用上面的代替)
用这个:
((AssemblyFileVersionAttribute)Attribute.GetCustomAttribute( Assembly.GetExecutingAssembly(), typeof(AssemblyFileVersionAttribute), false) ).Version;
或这个:
new Version(System.Windows.Forms.Application.ProductVersion);
您可以使用My.Application.Info.Version
获取程序集版本