CSharp - 我如何获取程序集文件的版本

  显示原文与译文双语对照的内容

AssemblyInfo 中有两个程序集版本:

  1. AssemblyVersion: 指定正被归属的程序集的版本。
  2. 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;

当我想要访问应用程序文件版本( 程序集信息中的设置-> 文件版本), 说设置标签的文本形式加载显示版本,我刚使用


versionlabel.Text ="Version" + Application.ProductVersion;

使用这里选项


 static public class ApplicationInfo
 {
 public static Version Version { get { return Assembly.GetCallingAssembly().GetName().Version; } }

 public static string Title
 {
 get
 {
 object[] attributes = Assembly.GetCallingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
 if (attributes.Length> 0)
 {
 AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0];
 if (titleAttribute.Title.Length> 0) return titleAttribute.Title;
 }
 return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);
 }
 }

 public static string ProductName
 {
 get
 {
 object[] attributes = Assembly.GetCallingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false);
 return attributes.Length == 0?"" : ((AssemblyProductAttribute)attributes[0]).Product;
 }
 }

 public static string Description
 {
 get
 {
 object[] attributes = Assembly.GetCallingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);
 return attributes.Length == 0?"" : ((AssemblyDescriptionAttribute)attributes[0]).Description;
 }
 }

 public static string CopyrightHolder
 {
 get
 {
 object[] attributes = Assembly.GetCallingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false);
 return attributes.Length == 0?"" : ((AssemblyCopyrightAttribute)attributes[0]).Copyright;
 }
 }

 public static string CompanyName
 {
 get
 {
 object[] attributes = Assembly.GetCallingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false);
 return attributes.Length == 0?"" : ((AssemblyCompanyAttribute)attributes[0]).Company;
 }
 }

 }

更新:就像 Richard Grimes在中提到的我引用的博文 @Iain 和 @Dmitry Lobanov,我的答案在理论上是正确的,但在实践中却是错误的。

从无数的书我应该记得, 等等, 当一个使用 [assembly: XXXAttribute] 设置这些属性,它们被编译器和放入 highjacked VERSIONINFO 资源。

出于上原因,你需要使用 @Xiaofu's 应答的方法,因为在提取信号后,属性被删除了。


public static string GetProductVersion()
{
 var attribute = (AssemblyVersionAttribute)Assembly
. GetExecutingAssembly()
. GetCustomAttributes( typeof(AssemblyVersionAttribute), true )
. Single();
 return attribute.InformationalVersion;
}

( 从 http://bytes.com/groups/net/420417-assemblyversionattribute 中- 注意,如果你正在寻找一个不同的属性,请将它的替换为上面的)

...