【发布时间】:2014-05-28 11:27:31
【问题描述】:
我有一个解决方案文件 (MySolution.sln),其中包含一个项目 (MyProject.vcxproj)。我想通过解决方案在我的项目上执行自定义目标 (MyCustomTarget)。它看起来像这样:
msbuild MySolution.sln /t:MyCustomTarget
当我执行命令时,我会收到一条错误消息:
MySolution.sln.metaproj:错误 MSB4057:项目中不存在目标“MyCustomTarget”。 [MySolution.sln]
您可以将 MyCustomTarget 替换为 Microsoft.Cpp.Win32.targets 中的任何标准目标(例如:ClCompile、Link)或您从 MyProject.vcxproj 中的 .targets 文件中选择的任何其他目标.它们都不行。
当环境变量 msbuildemitsolution 设置为 1 时,我可以检查生成的 MySolution.sln.metaproj 文件。在底部指定了 4 个目标:Build、Rebuild、Clean 和 Publish。使用这些目标而不是 MyCustomTarget,项目构建正常。另外,如果我指定项目文件而不是解决方案文件,它也会构建:
msbuild MyProject.vcxproj /t:MyCustomTarget
但是使用这种格式,我会失去 OutDir 属性,必须手动设置 Configuration 和 Platform,所以我只是失去了拥有解决方案文件的好处。
有什么方法可以将我的自定义目标与我最初想要的解决方案文件一起使用?
据我了解,问题在于 msbuild 生成了这个中间项目文件 (mysolution.sln.metproj),但这将获得来自 MyProject.vcxproj 的导入,包括 .targets 文件。难怪 MyCustomTarget 无法识别。
我目前的解决方法是使用带有 msbuild 的项目文件,并尽量不要错过解决方案文件中的任何内容:
msbuild MyProject.vcxproj /t:MyCustomTarget /p:Configuration=MyConfig;Platform=MyPlatform;OutDir=MySolution\Platform_MyConfig\
但这不是一个合适的解决方案,不灵活,容易出错并且不会自动适应解决方案文件中的更改。
【问题讨论】:
-
你试过
before.{solutionname}.sln.targets吗?将您的目标文件作为解决方案的一部分导入? stackoverflow.com/a/17712386/736079
标签: msbuild project target solution