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

如何在夜间构建期间自动设置程序集版本?

  •  13
  • sharptooth  · 技术社区  · 14 年前

    VersionNumber.h #define 版本号。这个非常小的构建签出这个文件,增加后面的整数 #定义 并办理入住手续。所有Visual C++项目 #include 将该头文件放入其资源文件中,并使用该头文件定义版本(版本类似于smth) 1.0.3.ThatNumber ).

    到现在为止,一直都还不错。现在,我希望在相同的日常版本中构建C类库时使用相同的方法。目前他们都有

    [assembly: AssemblyVersion("1.0.*")]
    

    1.0.HorribleNumber.AnotherHorribleNumber 因为版本和两个数字与C++项目所使用的数字不相关。

    如何在我的C#项目中以最小的工作量获得相同的determenistic自动版本编号?

    4 回复  |  直到 14 年前
        1
  •  12
  •   Tim Lloyd    6 年前

    首先可以指定完整版本,如下所示:

    [assembly: AssemblyVersion("1.0.9.10")]
    

    add this file as a link 对于所有cs项目,请记住从AssemblyInfo.cs文件中删除版本属性。这样,您只需要更新一个文件(在运行构建之前)。您还可以在Version.cs文件中放置其他公共程序集属性,例如:NeutralResourcesLanguage或CLSCompliant。

    如果您不使用单一的“Version.cs”方法,那么您可以递归地遍历源代码目录结构,并单独更新AssemblyInfo文件(在运行构建之前)。

    它可能与您无关,但版本号(在AssemblyVersion中)的最大范围为16位。我看到这成为一个问题,其中日期已用于这些数字。如果您希望有更多的自由度,那么AssemblyFileVersion没有这些限制,只是在.Net中仅供参考,而不是程序集标识的一部分。当某些工具显示AssemblyVersion和AssemblyFileVersion的组合时,通常会将其设置为相同的值。

    What are differences between AssemblyVersion, AssemblyFileVersion and AssemblyInformationalVersion?

        2
  •  2
  •   Will Dean    14 年前

    显然这不是唯一的方法,但是如果你没有使用像FinalBuilder这样的东西,那么就试试吧-我们的经验是,你开始想知道为什么你以前花了这么长时间来处理makefile和批处理文件。。。

    但是如果您不想这样做,您能得到生成/修改VersionNumber.h文件的相同进程来同时输出VersionNumber.cs,其中包含AssemblyVersion行吗?然后你就可以在你的项目中包含这个文件了。

    AssemblyVersion指令不需要与AssemblyInfo的所有其他内容位于同一个文件中。

        3
  •  1
  •   Dr Herbie    14 年前

    你可以做一些你已经为C++技术所做的事情,但是搜索一下 "assembly: AssemblyVersion( 字符串并将引号中的数字替换为完整的必需版本号。

    在C语言中,版本号上的通配符告诉编译器自动更新版本号——如果没有通配符,则只使用提供的完整版本号。

    例如

    [assembly: AssemblyVersion("1.0.3.10")]
    

    将始终使用该版本号,直到您在文件中更改它。

        4
  •  0
  •   Boris Modylevsky    14 年前

    通过向另一个文件添加链接,可以从该文件设置程序集版本。类似的解决方案是

    link text