在AssemblyInfo
中有两个汇编版本:
AssemblyVersion
:指定要归因的程序集的版本。AssemblyFileVersion
:指示编译器使用Win32文件版本资源的特定版本号。 Win32文件版本不需要与程序集的版本号相同。我可以使用以下代码行获取Assembly Version
:
Version version = Assembly.GetEntryAssembly().GetName().Version;
但我怎样才能获得Assembly File Version
?
答案 0 :(得分:794)
请参阅上面的评论,要求澄清您真正想要的内容。希望就是这样:
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fvi.FileVersion;
答案 1 :(得分:177)
有three versions:汇编,文件和产品。它们由不同的功能使用,如果您没有明确指定它们,则采用不同的默认值。
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;
答案 2 :(得分:59)
当我想访问应用程序文件版本(程序集信息中设置的内容 - >文件版本)时,比如在表单加载时设置标签的文本以显示版本,我刚刚使用过
versionlabel.Text = "Version " + Application.ProductVersion;
答案 3 :(得分:20)
更新:正如Richard Grimes在my cited post,@ Iain和@Dmitry Lobanov所提到的,我的答案在理论上是正确的,但在实践中却是错误的。
正如我应该记得的无数书籍等,当使用[assembly: XXXAttribute]
设置这些属性时,它们会被编译器劫持并放入VERSIONINFO
资源。
由于上述原因,您需要使用@Xiaofu's answer中的方法,因为在从中提取信号后剥离属性。
public static string GetProductVersion() { var attribute = (AssemblyVersionAttribute)Assembly .GetExecutingAssembly() .GetCustomAttributes( typeof(AssemblyVersionAttribute), true ) .Single(); return attribute.InformationalVersion; }
(来自http://bytes.com/groups/net/420417-assemblyversionattribute - 如上所述,如果您正在寻找不同的属性,请将其替换为上述内容)
答案 4 :(得分:3)
使用此:
((AssemblyFileVersionAttribute)Attribute.GetCustomAttribute(
Assembly.GetExecutingAssembly(),
typeof(AssemblyFileVersionAttribute), false)
).Version;
或者这个:
new Version(System.Windows.Forms.Application.ProductVersion);
答案 5 :(得分:-5)
您可以使用My.Application.Info.Version