4

似乎如果您编译 Visual Studio 解决方案并在您的 AssemblyInfo.cs 文件中有一个版本号,它应该传播到 Windows 资源管理器属性对话框。这样,某人只需右键单击 *.exe 并单击“属性”即可查看版本#。Visual Studio 中是否有特殊设置可以实现这一点?

示例图片 http://content.screencast.com/users/Pincas/folders/Jing/media/40442efd-6d74-4d8a-8e77-c1e725e6c150/2008-09-24_0849.png

编辑:我应该提到,这特别适用于不支持 AssemblyFileVersion的 .NET Compact Framework 2.0。所有的希望都失去了吗?

4

7 回答 7

6

请注意,AssemblyFileVersion属性在 .NET Compact Framework下不可用!

有关解决方法,请参阅Daniel Mooth 的这篇文章。

于 2008-10-07T14:49:40.993 回答
2

注意:此答案用于访问 .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();
    }
}
于 2014-09-04T17:52:16.500 回答
1

AssemblyFileVersion 属性有帮助吗?

于 2008-09-24T12:56:00.127 回答
1

您需要添加另一个属性:

[assembly: AssemblyFileVersion("1.0.114.0")]

请注意,您仍然需要一个 AssemblyVerison 来正确识别 .NET 运行时的程序集。

于 2008-09-24T12:56:28.533 回答
1

版本号确实会传播到属性对话框中的“版本”选项卡,但不会传播到摘要。不幸的是,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")]
于 2008-09-24T12:57:59.980 回答
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

于 2008-09-24T19:48:54.423 回答
0

我不确定 RevisionNumber 是否是要查找的正确字段。

尝试资源管理器,右键单击 -> 版本选项卡,然后查看那里的 AssemblyVersion 字段。

于 2008-09-24T12:58:59.197 回答