什么是build.force文件,为什么在更改构建配置时会出现?

时间:2018-10-18 14:39:41

标签: c# visual-studio-2017

我们遇到了一个问题,即我们有多个使用通用项目的解决方案,即使它是刚刚构建的,也将重新生成该项目。 FooProject和BarProject都有服务参考(不确定这是否是相关信息)。 MobileProject和SecurityProject没有服务引用。我们看到的问题是,如果打开TestA.sln,将配置更改为Release a build.force将出现在obj / release文件夹中。

TestA.sln和TestB.sln具有完全相同的4个项目-FooProject,BarProject,MobileProject和SecurityProject(显然是出于测试目的)

以下是我们重现此问题的步骤:

  1. 在VS 2017中打开TestA.sln
  2. 切换到发布配置
  3. 构建
  4. 关闭VS
  5. 等待一分钟或2
  6. 在VS2017中打开TestB.sln
  7. 切换到Release配置(force.build文件出现在FooProject \ bin \ x86 \ Release和BarProject \ bin \ x86 \ Release中)
  8. 建立VS
  9. 打开FooProject \ bin \ x86 \ Release。请注意,在构建TestB.sln时,如何重新编译FooProject.dll和BarProject.dll

这些复制步骤在VS2015中无效。此问题仅在VS2017中发生。

如果在切换到发行版之后但在构建之前删除了build.force文件,则该项目将不会重新构建。如果您将其保留为启用诊断版本输出,则将看到类似

的消息
  

项目'FooProject'不是最新的。上一个版本包含未保存的文件。

据我所知,build.force文件是通过创建上次构建中未包含的文件来强制构建的一种方法。为什么仅在VS2017中发生这种情况?为什么要假设它完全需要构建?

其他详细信息:

我对上述再现步骤都有解决方法。如果我打开TestA.sln->发布->构建。然后打开TestB.sln->关闭VS 2017->打开TestB.sln->发布->构建。现在,该解决方案将正确构建任何项目。

我不认为这与循环引用有关。我已清除所有引用,并在没有警告的情况下重新添加了它们。 Build顺序似乎很好,因为它是按照依赖关系顺序进行构建的(只有4个项目,非常容易看到)。

0 个答案:

没有答案