【问题标题】:MSBuild task to get update FileAssemblyVersion for only projects with changesMSBuild 任务仅针对有更改的项目获取更新 FileAssemblyVersion
【发布时间】:2010-08-02 17:02:45
【问题描述】:

是否有任何方法(使用 msbuild 或其他方式)来检测哪些项目在当前构建中发生更改,并仅为这些项目更新 AssemblyInfo.cs 中的 FileAssemblyVersion 属性?

【问题讨论】:

  • 您的问题与 MSBuild 几乎没有关系,您实际上要问的是“我如何以编程方式识别一段时间内的一组更改”,这完全取决于您的源代码控制服务器,所以没有可以在不知道您想从哪个源代码控制系统中查询此信息的情况下回答这个问题。
  • 我正在使用 TFS 2008。我天上掉馅饼的想法是这样的:在我调用编译 sln 的目标之前,我调用一个更新 FileAssemblyVersion 的 MSBuild 自定义任务对于任何具有更改文件的项目,这反过来又触发了当前构建。显然,我们在这里讨论的是持续集成设置。

标签: c# msbuild assemblies msbuild-task


【解决方案1】:

假设您已设置增量 [get and] 编译,下一步将是挂钩到 MSBuild 序列。看看FrameworkDir\Microsoft.Common.Targets。问题是事情并没有以这种方式工作——事实上有_TimestampBeforeCompile_TimeStampAfterCompile 步骤只是表明你不能先验地确定某些东西是否要编译。虽然理论上您可以在 [特定于语言的] CoreCompile [例如,在 Microsoft.CSharp.targets 中] 之前挂钩,但问题是您需要拥有与它相同的 Inputs 才能确定它是否会发生,这意味着大量的剪切和粘贴以及与系统文件保持同步。在_ComputeNonExistentFileProperty 目标顶部的评论中指出了另一件需要注意的事情。

因此,除了对序列进行一些非常深入的修改(例如,如果您的自定义 _TimeStampAfterCompile 检测到发生了编译,则挂钩在“构建后”位中强制进行第二次编译,我想说没有简单、推荐或支持的方法。

话虽如此,AssemblyFileVersion(您参考 FileAssemblyVersion,它不存在 :P)在编译后很容易修改,因为它只是一个资源 - 您会找到相应的工具。但我假设您实际上是在谈论同时做这件事和AssemblyVersion,事后不能以同样的方式进行调整。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    相关资源
    最近更新 更多