【问题标题】:How to prevent msbuild from building a project if a dependency has changed如果依赖项已更改,如何防止 msbuild 构建项目
【发布时间】:2011-10-09 11:21:43
【问题描述】:

我在 2 个独立的解决方案中有 2 个项目

一个通过 DLL 引用来引用另一个。

例如:MyProjectA 通过 DLL 引用 MyprojectB

在 ProjectB 中,我在类文件中添加了一行不相关的代码(即字符串 abc = "abc";) 我重建 ProjectB,ProjectB.dll 被放入 ProjectA 引用的目录中

我未对 ProjectA 进行任何更改并尝试“构建”projectA,它会构建并更新 DLL。我不希望这种情况发生。 如果我再次在 projectA 上运行构建,则会跳过构建,因为没有进行任何更改。

不直接影响项目 A 对其调用的依赖项的更改不应影响 msbuild 实际上正在构建 ProjectA 的事实。这导致我们的版本控制/签名出现问题,我们不得不再次向客户提供所有文件。

换句话说,如果我对基础项目进行小改动,我应该只需要构建该基础项目并将其 DLL 重新部署到客户端,但由于更改,所有项目都将重新构建依赖。当我们必须对基础项目进行小的更改时,这对于连接速度较慢的人来说确实令人沮丧,并且不得不重新下载所有内容。

【问题讨论】:

  • 您能否详细说明版本控制/签名问题?重建不应影响签约。我的直觉告诉我 msbuild 的行为是正确的。我担心的是,如果您确实禁用了此行为,那么当您更改项目 B 中确实对项目 A 有影响的某些内容时,您会遇到问题
  • james,它影响签名的原因是因为混淆了。每次构建都会发生变化
  • 似乎发生的事情是 msbuild 将 .cs 文件和依赖 DLL(输入)与输出(dll)进行比较,如果任何输入文件比输出新,它会自动构建。这是微软在这里做出的一个可怕的假设。

标签: msbuild build dependencies


【解决方案1】:

您应该将项目 B 重构为 2 个类库 (DLL)。一个 DLL (proj-B-core.dll) 包含项目 A 实际依赖的东西......和第二个 DLL (prod-B-misc.dll) 包含项目 A 不关心的东西。将项目 A 更改为引用 proj-B-core.dll,您将获得所需的行为。

最好, /jhd

【讨论】:

    【解决方案2】:

    我不相信这是 msbuild 的问题。我建议调查您的版本控制方法,但是如果没有更多信息,我无法真正发表评论。在这种特定情况下可能会有所帮助的一件事是使用policy redirect。当只有 1 个程序集引用发生更改时,这应该可以阻止您重新分发整个应用程序。您可以重新分发新程序集和策略文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 2012-08-20
      • 1970-01-01
      相关资源
      最近更新 更多