我有一个解决方案文件(我的解决方案.sln)其中有一个项目(我的项目.vcxproj)。我想执行一个自定义目标(我的自定义目标)通过解决方案在我的项目上。它看起来像这样:
msbuild MySolution.sln /t:MyCustomTarget
当我执行命令时,我会收到一条错误消息:
MySolution.sln.metaproj:错误 MSB4057:项目中不存在目标“MyCustomTarget”。 [我的解决方案.sln]
您可以更换我的自定义目标与 Microsoft.Cpp.Win32.targets 中的任何标准目标(例如:ClCompile、Link)或您选择的任何其他目标(从 MyProject.vcxproj 中的 .targets 文件包含)一起使用。它们都不起作用。
当环境变量msbuildemitsolution设置为 1,我可以检查生成的MySolution.sln.metaproj文件。底部指定了 4 个目标:构建、重建、清理和发布。使用这些目标而不是我的自定义目标,项目构建正常。另外,如果我指定项目文件而不是解决方案文件,它也会构建:
msbuild MyProject.vcxproj /t:MyCustomTarget
但使用这种格式,我会失去OutDir属性,必须手动设置配置 and Platform,所以我失去了拥有解决方案文件的好处。
有什么方法可以将我的自定义目标与我最初想要的解决方案文件一起使用吗?
据我了解,问题是 msbuild 生成这个中间项目文件(mysolution.sln.metproj)但这将赢得来自的进口我的项目.vcxproj,包括 .targets 文件。难怪我的自定义目标不被识别。
我当前的解决方法是将项目文件与 msbuild 一起使用,并尽量不要错过解决方案文件中的任何内容:
msbuild MyProject.vcxproj /t:MyCustomTarget /p:Configuration=MyConfig;Platform=MyPlatform;OutDir=MySolution\Platform_MyConfig\
但这不是一个正确的解决方案,不灵活,容易出错,并且不会自动适应解决方案文件中的更改。