似乎如果您编译 Visual Studio 解决方案并在您的 AssemblyInfo.cs 文件中有一个版本号,它应该传播到 Windows 资源管理器属性对话框。这样,某人只需右键单击 *.exe 并单击“属性”即可查看版本#。Visual Studio 中是否有特殊设置可以实现这一点?
编辑:我应该提到,这特别适用于不支持 AssemblyFileVersion的 .NET Compact Framework 2.0。所有的希望都失去了吗?
似乎如果您编译 Visual Studio 解决方案并在您的 AssemblyInfo.cs 文件中有一个版本号,它应该传播到 Windows 资源管理器属性对话框。这样,某人只需右键单击 *.exe 并单击“属性”即可查看版本#。Visual Studio 中是否有特殊设置可以实现这一点?
编辑:我应该提到,这特别适用于不支持 AssemblyFileVersion的 .NET Compact Framework 2.0。所有的希望都失去了吗?
请注意,AssemblyFileVersion属性在 .NET Compact Framework下不可用!
有关解决方法,请参阅Daniel Mooth 的这篇文章。
注意:此答案用于访问 .NET CF 3.5 应用程序中的 AssemblyInfo 属性。它不会传播到 Windows 资源管理器内的可执行文件的“属性”(但可用于写入文件、控制台或显示在应用程序中)
我知道这是一个非常古老的问题,但这是我使用 Reflection 和 Linq 找到的解决方案来获取“AssemblyInformationalVersion”(较新的 Visual Studio 项目中的产品版本)。
首先,我将其添加到 AssemblyInfo.cs 中(将字符串替换为您想要使用的任何内容):
[assembly: AssemblyInformationalVersion("1.0.0.0 Alpha")]
然后,您可以使用此方法提取属性(我将其放在 AssemblyInfo.cs 文件中的静态类中)。方法 get 是所有 Assembly 属性的数组,然后选择与属性名称匹配的第一个结果(并将其转换为正确的类型)。然后可以访问 InformationalVersion 字符串。
//using System.Reflection;
//using System.Linq;
public static string AssemblyInformationalVersion
{
get
{
AssemblyInformationalVersionAttribute informationalVersion = (AssemblyInformationalVersionAttribute)
(AssemblyInformationalVersionAttribute.GetCustomAttributes(Assembly.GetExecutingAssembly())).Where(
at => at.GetType().Name == "AssemblyInformationalVersionAttribute").First();
return informationalVersion.InformationalVersion;
}
}
要获得我使用的正常“AssemblyVersion”属性:
//using System.Reflection;
public static string AssemblyVersion
{
get
{
return Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
}
您需要添加另一个属性:
[assembly: AssemblyFileVersion("1.0.114.0")]
请注意,您仍然需要一个 AssemblyVerison 来正确识别 .NET 运行时的程序集。
版本号确实会传播到属性对话框中的“版本”选项卡,但不会传播到摘要。不幸的是,VS 不会自动填充文件的摘要信息,因为该信息是附加到文件本身的元数据。但是,您可以使用 Microsoft 提供的免费 DSO OleDocument 属性阅读器自行访问和操作摘要信息。
您可以从以下网址获取该库: http: //www.microsoft.com/downloads/details.aspx?FamilyId= 9BA6FAC6-520B-4A0A-878A-53EC8300C4C2&displaylang=en
有关其使用的更多信息,请访问: http: //www.developerfusion.co.uk/show/5093/
编辑:正如上面 pb 和 Nigel Hawkins 所说,您可以使用 AssemblyFileVersion 属性获取要传播的属性,例如:
[assembly: AssemblyFileVersion("1.0.114.0")]
在我的项目中,我们使用 FileVersion = YYYY.MM.DD.BUILD(例如 2008.9.24.1),但 ProductVersion 应该是 major.minor.revision.BUILD。我们使用 AssemblyInformationalVersion 来解决这个问题。
AssemblyVersion="MAJ.MIN.REV.1" --> 由 .NET 使用
AssemblyInformationalVersion="MAJ.MIN.REV.XXX" --> 用于资源管理器的 ProductVersion
AssemblyFileVersion="YYYY.MM.DD.XXX" --> 用于资源管理器的 FileVersion
我不确定 RevisionNumber 是否是要查找的正确字段。
尝试资源管理器,右键单击 -> 版本选项卡,然后查看那里的 AssemblyVersion 字段。