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

cbu*_*art 9 msbuild target visual-studio

我们正在将我们的编译系统迁移到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"
Run Code Online (Sandbox Code Playgroud)

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

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

devenv "c:\src\libs\a_lib\a_lib.sln" /project "C" /build /nologo "Release|Win32"
Run Code Online (Sandbox Code Playgroud)

cbu*_*art 14

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

msbuild "c:\src\libs\a_lib\a_lib.sln" /nologo "/target:Tests\C" /t:build "/p:Configuration=Release" "/p:Platform=Win32"
Run Code Online (Sandbox Code Playgroud)

  • 这是我需要的答案,但有一个警告:此处引用的“文件夹”似乎是解决方案文件夹,而不是磁盘文件夹。Studio 使您可以在解决方案树中创建自己的文件夹结构,与实际的基于磁盘的文件夹结构分开。我们可能都试图让两者互相模仿,但我的磁盘上有一个文件夹的名称与解决方案资源管理器中的名称不同。重命名解决方案资源管理器文件夹以匹配磁盘名称修复了问题。据推测,使用解决方案文件夹名称而不是磁盘名称也可以。 (2认同)