【问题标题】:MSBuild: error MSB4057: The target does not exist in the projectMSBuild:错误MSB4057:项目中不存在目标
【发布时间】:2018-07-30 14:38:22
【问题描述】:

我们正在将我们的编译系统迁移到msbuild,我们发现一些项目报告了以下错误:

c:\src\libs\a_lib\A\A.vcxproj : 错误 MSB4057: 项目中不存在目标“C”。

c:\src\libs\a_lib\B\B.vcxproj:错误MSB4057:项目中不存在目标“C”。

c:\src\libs\a_lib\C\C.vcxproj : 错误 MSB4057: 项目中不存在目标“C”。

c:\src\libs\a_lib\D\D.vcxproj:错误MSB4057:项目中不存在目标“C”。

编译行是

msbuild "c:\src\libs\a_lib\a_lib.sln" /nologo "/target:C" /t:build "/p:Configuration=Release" "/p:Platform=Win32"

可以看出,该解决方案有多个项目。项目本身存在于解决方案中,可以从 VS IDE 中编译。此外,其他目标也不会失败(以下示例:A、B、D)。

我们之前的编译行在同一个项目上正常工作:

devenv "c:\src\libs\a_lib\a_lib.sln" /project "C" /build /nologo "Release|Win32"

【问题讨论】:

    标签: visual-studio msbuild target


    【解决方案1】:

    问题来自这样一个事实,即此类项目嵌套在解决方案资源管理器中的解决方案文件夹(本示例中为Tests)中。目标名称必须包含此类文件夹的名称(Tests\C),因此正确的编译行是

    msbuild "c:\src\libs\a_lib\a_lib.sln" /nologo "/target:Tests\C" /t:build "/p:Configuration=Release" "/p:Platform=Win32"
    

    【讨论】:

    • 这是我需要的答案,但需要注意的是:此处引用的“文件夹”似乎是解决方案文件夹,而不是磁盘文件夹。 Studio 使您可以在解决方案树中创建自己的文件夹结构,与实际的基于磁盘的文件夹结构分开。我们可能都试图让两者互相模仿,但我有一个文件夹,它在磁盘上的名称与在解决方案资源管理器中的名称不同。重命名解决方案资源管理器文件夹以匹配磁盘名称解决了该问题。大概使用解决方案文件夹名称而不是磁盘名称也可以。
    • @BRebey 感谢您指出这一点。事实上,就我而言,正如您所提到的,该文件夹只是一个解决方案文件夹(不是磁盘文件夹)。我已经更新了答案以反映这一点。
    • @cbuchart 谢谢你,它终于奏效了。我的项目位于解决方案文件夹中,必须用引号指定!
    • 另请注意,您必须使用反斜杠。使用正斜杠不起作用。
    【解决方案2】:

    如另一个答案所示,问题与 msbuild 未找到的目标项目有关。除了错误的路径之外,还有另一个潜在的原因:多目标。
    这发生在一个非 SDK 风格的项目中,当引用一个 SDK 风格的项目时,目标是:net461 和 netstandard2.0。在这种情况下,您可能必须通过定义项目引用的目标框架来扩展非 SDK 样式项目中的项目引用:

    <ProjectReference Include="..\..\myProjRef.csproj">
      <Project>{d1b31534-48ae-428e-a174-b679fda90dde}</Project>
      <Name>MyProjRef</Name>
      <AdditionalProperties>TargetFramework=net461</AdditionalProperties>
    </ProjectReference>
    

    注意,&lt;AdditionalProperties&gt; 指定:TargetFramework=net461 指向 MyProjRef 项目内部的特定目标并消除了错误。

    【讨论】:

      猜你喜欢
      • 2015-11-11
      • 2016-12-23
      • 2018-04-29
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      相关资源
      最近更新 更多