我的主管,来自非网络背景,希望我使用他的特殊版本编号方案作为major.minor.revision.build [-Dev | RC1 | RC2]。他希望能够右键单击dll并查看这样的版本号,或者从Dll或Exe中检索版本号以显示。我不知道怎么和我的研究说MS不支持这种事情。我需要一个解决方法。有什么想法吗?
哦,是的,在Windows XP Pro SP3上用VS2008 VB.Net编码。
谢谢!
答案 0 :(得分:2)
不。正如您所见:
http://msdn.microsoft.com/en-us/library/system.version.aspx
Version
类对所有版本组件都有Int32
个值,并且能够将版本号相互比较。
摘录:
版本号由两到四个组成部分组成:major,minor, 构建和修订。主要和次要组件是必需的;该 构建和修订组件是可选的,但构建组件是 如果定义了修订组件,则需要。 所有已定义的组件 必须是大于或等于0的整数。版本的格式 数字如下(可选组件显示在方括号中 ([和]):
答案 1 :(得分:1)
如果要使用使用Microsoft安装程序技术(MSI)的安装程序安装这些应用程序,则可用的最大粒度为three digits(即1.1.1),并且您被限制为固定的,正的每个数字的数值范围:
前两个字段(Major和Minor)不能大于255,最后一个字段(Revision)不能大于65535。
答案 2 :(得分:0)
我总是使用Visual Studio加载项。它的效果非常好。它在CodePlex上称为Build Version Increment。有趣的是,每次在Visual Studio中进行构建和/或重建时,都可以将其配置为为您生成版本号(并增加它)。
它支持Visual Studio 2005和2008.现在还有一个针对Visual Studio 2010发布的版本.Build Version Increment修改了Assembly.cs文件。我总是设置它来修改和增加我的AssemblyVersion。然后在代码中,为了获取版本并将其显示在我的表单上,我使用以下代码:
string strAssemblyVersion = "Version " + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
我希望这会对你有所帮助。
答案 3 :(得分:0)
我知道这是一个旧帖子,但我今天遇到了这个。 https://docs.microsoft.com/en-us/dotnet/api/system.reflection.assemblyinformationalversionattribute?view=net-5.0
显然这个属性从 .Net 1.1 开始就存在了。您也可以在 FileVersion 中使用非标准版本,但您会收到编译器警告。如果它的格式不正确,则不会编译 AssemblyVersion。 InformationalVersion 显然可以是任何东西。
如果您设置了非标准的 FileVersion,Windows 属性会尝试将其解析为正常版本,因此在下面的示例屏幕截图中,“-RC1”会被删除。如果你输入一些无意义的东西(比如'blarg'),那么它就变成了文件版本的'0.0.0.0'。
在您的代码中,如果您是 WinForms 项目,则可以从 Application.ProductVersion
访问新的信息版本。对于非 WinForms,为了避免将 WinForms DLL 加载到内存中,您基本上可以从 Application.ProductVersion 的参考源代码中复制代码。无论哪种方式,它都是一个字符串,所以如果你想在你的代码中做任何类型的比较逻辑,如果你不能立即将它解析为 Version 对象,你将需要编写自己的解析器/比较器。
Assembly entryAssembly = Assembly.GetEntryAssembly();
if (entryAssembly != null) {
object[] attrs = entryAssembly.GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false);
if (attrs != null && attrs.Length > 0) {
productVersion = ((AssemblyInformationalVersionAttribute)attrs[0]).InformationalVersion;
}
}