How can I get the assembly file version
在AssemblyInfo中,有两种组件版本:
AssemblyVersion:指定所属程序集的版本。
AssemblyFileVersion:指示编译器为win32文件版本资源使用特定的版本号。Win32文件版本不需要与程序集的版本号相同。
我可以用以下代码行获得Assembly Version:
1
| Version version = Assembly.GetEntryAssembly().GetName().Version; |
但是我怎样才能得到Assembly File Version?
- 与"程序集版本"相比,"程序集文件版本"是什么意思?你能举个例子吗?
- @小福--"程序集版本"是.NET内部使用的。"程序集文件版本"是右键单击文件并转到"属性",然后转到"详细信息"选项卡时显示的内容。它们不一样。
- 我发现程序集版本是在AppData中确定user.config位置时使用的版本。
型
请看我上面的评论,要求澄清你真正想要什么。希望是这样:
1 2 3
| System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fvi.FileVersion; |
号
- 孝:"有什么办法把数从一个版本中放程序的文件,而不是吗?
- 和这一问题的代码是,事实上,它会返回1.0。*。*如果你没有specified建立和修改数。assemblyname.getassemblyname(assembly.location)。version.tost zwnj &;& # 8203号();环;将你的版本号由哪些应该作为fileversion一样,如果你重新设定的两个版本的相同的方式。
- 好的,但太多而使用的filemajorpart / / / fileminorpart filebuildpart fileprivatepart置业两integers而不是把《fileversion格式化的字符串。没有人喜欢看到"1.9.0.0"的一种东西,在标题栏的一个程序。
- "doguhanuluca它们是两个不同的东西。这将给你的组件的版本,不是文件的版本。"如果你重新设定的两个版本的相同的方式"是一个workaround,不是一个解决方案。
- FileVersionInfo只读的。有没有Versionstring性质和属性?
- 这是好的。我在用它的WinForms项目和它的工作。
- 你为什么用assembly.getexecutingassembly(?)归来的DLL,流,但如果我想在"主executable打电话:assembly.getentryassembly()
- "yitzchak空Assembly.GetEntryAssembly()归来:例如,在背景处添加插件,也和很多其他的用例。也,如果你想你的需求/插件entryassembly是主机的应用,大多数或你想要的版本yourcode(TM)):从那一山脉,它的价值增两个答案,这个答案assembly.Location用于可以为空(即第一阱随机案例:想了github.com / azure azure函数/咳嗽/问题/ 1233),这可能甚至更多的发生往往比零组件有出入。
型
有三个版本:程序集、文件和产品。它们由不同的特性使用,如果不显式地指定它们,它们将采用不同的默认值。
1 2 3 4
| 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; |
- 当我为一些博客disappears节,它boiled冰下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;供参考:
- 和那些specify缺少这两个文件的assemblyversion中放程序,使用你想用什么数)= [assembly: AssemblyVersion("2.0.*")]为fileversion使用= [assembly: AssemblyFileVersion("2.0.*")]和productversion使用= [assembly: AssemblyInformationalVersion("2.0.*")]可以把最后一个字符串的后缀为SemVer兼容性:[assembly: AssemblyInformationalVersion("2.0.0-alpha")]
- 附录:AssemblyFileVersion可能不使用的*后缀表示法。全:(它需要四个数。[assembly: AssemblyFileVersion("2.0.0.1")]
型
当我想要访问应用程序文件版本(在程序集信息->文件版本中设置的内容)时,比如说在表单加载时设置标签的文本以显示版本,我刚刚使用
1
| versionlabel.Text ="Version" + Application.ProductVersion; |
。
- 型请注意,这需要引用System.Windows.Forms,因此可能不适用于所有应用程序。
- 型不幸的是,这是一个字符串。如果你想把它格式化成更简单的"v1.08"格式,那就不理想了。如果您真的获得version对象以从整数形式获取子组件,那么就容易多了。
- 型此外,它从assemblyinfo而不是assemblyversion获取assemblyfileversion,因此请注意
- 型高代表用户是否可以编辑此答案以更清楚地表明这仅适用于Windows窗体?
- 型这正是我要找的,谢谢你的回答!
型
更新:正如Richard Grimes在我的引文@iain和@dmitry lobanov中提到的,我的回答理论上是正确的,但实际上是错误的。
正如我应该从无数的书中记起的那样,当一个人使用[assembly: XXXAttribute]设置这些属性时,编译器会将它们高举并放入VERSIONINFO资源中。
基于以上原因,您需要在@xiaofu的答案中使用该方法,因为在从属性中提取信号后,属性将被剥离。
1 2 3 4 5 6 7 8
| public static string GetProductVersion ()
{
var attribute = (AssemblyVersionAttribute )Assembly
.GetExecutingAssembly()
.GetCustomAttributes( typeof(AssemblyVersionAttribute ), true )
.Single();
return attribute .InformationalVersion;
} |
(来自http://bytes.com/groups/net/420417-assemblyversionattribute-如前所述,如果要查找其他属性,请将其替换为上述属性)
- 嘿,鲁本的票据,2。第一个问题,你对assemblyversion assemblyfileversion槽。(二),(assembly.getexecutingassembly .getcustomattributes(AssemblyVersionAttribute){T,威胁)归来的阵列长度为0。我想这是因为AssemblyVersionAttribute冰槽的自定义属性。
- 第一点是,这就是为什么我说"如果你在一个不同的属性lookign代用品,这为"以上"(它在试图回答不出来。二是,那似乎是合理的,但没有两个小时你在…
- 是的,你不能让我assemblyversion通过.getcustomattribute(属性),众议院的版本可以通过AssemblyName.Version只读retrieved性质。但与其他网络的每一个属性的方式做它。
- dmitrylobanov"和"谢谢prompts伊恩。希望《封面编辑信息,使sufficiently答案和保鲜deleting -而不是你让我知道!
型
使用此:
1 2 3 4
| ((AssemblyFileVersionAttribute )Attribute .GetCustomAttribute(
Assembly .GetExecutingAssembly(),
typeof(AssemblyFileVersionAttribute ), false)
).Version; |
或者这个:
1
| new Version (System.Windows.Forms.Application.ProductVersion); |
。
型
您可以使用My.Application.Info.Version获得汇编版本。
- 这是VB的是,它不是吗?问题是# C。
- 在没有看到之间的差异# C和VB。而不是我的,你可以粘贴这个效应是一样的。可以在mistaken。
- 它应该工作如预期。
- 型你会在哪里打电话?Application是什么类型的?
- 型@Oliver您需要添加一个对相关Microsoft.VisualBasic...程序集的引用,并且您将拥有My根对象(从技术上讲,它只是一个.NET框架程序集,您所需要做的就是不要再键入一个简单的5个字母的单词:p)。
- 型啊,不错。在VB名称空间中有这么多有趣的东西。
- 型嗯,不,不知道。我添加了参考资料,但找不到我的东西。