在AssemblyInfo中有两个程序集版本:
AssemblyVersion:指定要属性化的程序集的版本。AssemblyFileVersion:指示编译器使用Win32文件版本资源的特定版本号。Win32文件版本不需要与程序集的版本号相同。
我可以使用以下代码行获取程序集版本:
Version version = Assembly.GetEntryAssembly().GetName().Version;
但是,如何获取程序集文件版本?
在AssemblyInfo中有两个程序集版本:
AssemblyVersion:指定要属性化的程序集的版本。AssemblyFileVersion:指示编译器使用Win32文件版本资源的特定版本号。Win32文件版本不需要与程序集的版本号相同。
我可以使用以下代码行获取程序集版本:
Version version = Assembly.GetEntryAssembly().GetName().Version;
但是,如何获取程序集文件版本?
当前回答
有三个版本:程序集、文件和产品。它们由不同的功能使用,如果不明确指定它们,则采用不同的默认值。
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;
其他回答
当我想访问应用程序文件版本(在程序集信息->文件版本中设置的版本)时,比如在表单加载时为其设置标签文本以显示版本,我刚刚使用了
versionlabel.Text = "Version " + Application.ProductVersion;
此方法需要引用System.Windows.Forms。
使用此项:
((AssemblyFileVersionAttribute)Attribute.GetCustomAttribute(
Assembly.GetExecutingAssembly(),
typeof(AssemblyFileVersionAttribute), false)
).Version;
或者这个:
new Version(System.Windows.Forms.Application.ProductVersion);
有三个版本:程序集、文件和产品。它们由不同的功能使用,如果不明确指定它们,则采用不同的默认值。
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;
请参阅我上面的评论,要求澄清您真正想要的内容。希望就是这样:
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fvi.FileVersion;
更新:正如理查德·格里姆斯在我引用的帖子@Iain和@Dmitry Lobanov中所提到的,我的答案在理论上是正确的,但在实践中是错误的。
我应该从无数本书中记住,当人们使用[assembly:XXXAttribute]设置这些财产时,它们被编译器劫持并放入VERSIONINFO资源中。
出于上述原因,您需要使用@Xiaofu的答案中的方法,因为在从属性中提取信号后,属性会被剥离。
公共静态字符串GetProductVersion(){var attribute=(AssemblyVersionAttribute)程序集.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyVersionAttribute),true).Single();return attribute.InformationVersion;}(发件人http://bytes.com/groups/net/420417-assemblyversionattribute-如上所述,如果您正在寻找不同的属性,请将其替换为上述属性)