代码之家  ›  专栏  ›  技术社区  ›  Pandincus

如何将C 35;.NET CF程序的AssemblyInfo版本传播到资源管理器“属性”窗口?

  •  3
  • Pandincus  · 技术社区  · 18 年前

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

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

    编辑:我应该提到,这是专门为.NET设计的 紧凑型框架 2.0,它不支持AssemblyFileVersion。所有的希望都破灭了吗?

    7 回复  |  直到 18 年前
        1
  •  6
  •   Jan    17 年前

    请注意 汇编文件版本 属性在.NET下不可用 紧凑型框架 !

    见 this Daniel Mooth的一篇文章。

        2
  •  2
  •   jarmst    12 年前

    注意:此答案用于访问.NET CF 3.5应用程序中的AssemblyInfo属性。它不会传播到Windows资源管理器中可执行文件的“属性”(但可用于写入文件、控制台或在应用程序中显示)

    我知道这是一个很老的问题,但这里有一个解决方案,我发现使用反射和Linq来获取“AssemblyInformationalVersion”(新的Visual Studio项目中的产品版本)。

    首先,我将此添加到AssemblyInfo.cs中(将字符串替换为您要使用的任何内容):

    [assembly: AssemblyInformationalVersion("1.0.0.0 Alpha")]
    

    然后,可以使用此方法提取属性(我将其放在AssemblyInfo.cs文件中的静态类中)。get方法是一个包含所有程序集属性的数组,然后选择与属性名匹配的第一个结果(并将其强制转换为适当的类型)。然后可以访问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();
        }
    }
    
        3
  •  1
  •   Paul van Brenk    18 年前
        4
  •  1
  •   Nigel Hawkins    18 年前

    您需要添加另一个属性:

    [assembly: AssemblyFileVersion("1.0.114.0")]

    请注意,您仍然需要AssemblyVerison来正确地将程序集标识给.NET运行时。

        5
  •  1
  •   Wolfwyrd    18 年前

    版本号会传播到“属性”对话框中的“版本”选项卡,但不会传播到摘要。不幸的是,VS不会自动填充文件的摘要信息,因为该信息是附加到文件本身的元数据。但是,您可以使用Microsoft提供的免费DSO OleDocument Properties Reader自行访问和操作摘要信息。

    您可以从以下站点获取库: 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")]
    
        6
  •  0
  •   Matt    18 年前

    我不确定修正号是要查找的正确字段。

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

        7
  •  0
  •   eric burkeeric burke    18 年前

    在我的项目中,我们使用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”->用于资源管理器的产品版本

    AssemblyFileVersion=“YYYY.MM.DD.XXX”->在资源管理器的文件版本中使用