【问题标题】:MSBuild successful but Visual Studio failedMSBuild 成功但 Visual Studio 失败
【发布时间】:2017-09-25 12:15:06
【问题描述】:

我们正在使用 Jenkins 使用 msbuild 构建项目。

我添加了对现有项目的项目引用,但忘记将这些新项目添加到所有解决方案文件中。

我承诺了,但 Jenkins 告诉我一切正常。 我在命令行上试过了:

msbuild test.sln /t:Rebuild /p:Configuration=Debug

在 Jenkins 和我的开发机器上拥有一个工作正常的完全清除的工作目录。输出告诉我 msbuild 找到了该项目并构建它。

但如果我打开 Visual Studio 2017 并尝试构建该解决方案,它会告诉我找不到依赖项目。

没错。

如何强制 msbuild 仅构建解决方案文件中指定的项目,以便我们能够找到错过该新项目的所有解决方案?

顺便说一句:我们不需要提示如何找到需要包含该新项目的所有解决方案。找到解决方案非常容易。

【问题讨论】:

  • “但忘记将这些新项目添加到所有解决方案文件中”是什么意思?你的意思是你没有提交这个新项目吗?您能否给我一些更详细的步骤来重现此问题?
  • @Leo-MSFT 我们有多个解决方案,它们都包含一个共同的项目。该项目引用了一个新程序集。我只将此项目添加到一个解决方案中,即我创建它的那个解决方案,而忘记了所有其他解决方案文件。为了更好地理解:我们正在使用项目引用。
  • 感谢您的回复。您的项目结构是这样的吗:1drv.ms/i/s!Ai1sp_yvodHfc7qaSvEkVpyMOHc,现在,您想构建指定的公共项目,然后能够找到错过该新项目的所有解决方案? AFAIK,我们可以使用命令行:“msbuild CommonProjectName.csproj /t:Rebuild /p:Configuration=Debug”来构建一个解决方案文件中的指定,除了构建所有解决方案之外,我们找不到错过该新项目的所有解决方案。
  • @Leo-MSFT 是的,我们的解决方案结构看起来像您的示例。大多。项目本身包含引用,但解决方案文件不包含。构建所有解决方案并不奏效,因为这就是我们目前正在做的事情。即使未在解决方案文件中指定,MSBuild 也能够找到丢失的项目。我们正在寻找一种强制 MSBuild 仅构建解决方案文件中指定的项目的解决方案。

标签: c# visual-studio msbuild


【解决方案1】:

如何强制 msbuild 仅构建解决方案文件中指定的项目,以便我们能够找到错过该新项目的所有解决方案?

避免MSBuild默认重建解决方案文件中列出的所有依赖项的正确方法是将BuildProjectReferences属性设置为false,因此构建命令行应该是:

MSBuild Test.sln /t:Rebuild /p:Configuration=Debug /p:BuildProjectReferences=false

使用此命令行后,MSBuild 将在 VS 中遇到相同的错误,因此我们能够找到所有错过该新项目的解决方案

注意:BuildProjectReferences 将检查解决方案文件中列出的所有依赖项,因此请保持他的值为 true,除非用于检查缺少的依赖项。

希望这会有所帮助。

【讨论】:

  • 这看起来与我正在寻找的解决方案完全一样。错误发生如预期。但是,如果我有正确的解决方案,它就不起作用。无法构建正确的解决方案。
  • @Verarind,是的,BuildProjectReferences 会检查解决方案文件中列出的所有依赖项,所以请保持他的值为 true,除非用于检查缺少的依赖项。
猜你喜欢
  • 2014-08-18
  • 1970-01-01
  • 2020-12-06
  • 2022-12-10
  • 1970-01-01
  • 2014-10-12
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多