MSBuild:错误MSB4057:项目中不存在目标

时间:2018-07-30 14:38:22

标签: visual-studio msbuild target

我们正在将编译系统迁移到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"

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:0)

如另一个答案所示,问题与 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>

注意,指定的 <AdditionalProperties>TargetFramework=net461 指向 MyProjRef 项目中的特定目标并删除了错误。