我有一个解决方案文件(MySolution.sln),其中只有一个项目(MyProject.vcxproj)。我想通过解决方案在我的项目上执行自定义目标(MyCustomTarget)。它应该类似于这样:
msbuild MySolution.sln /t:MyCustomTarget
当我执行命令时,会得到一个错误信息:
MySolution.sln.metaproj : error 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
吗?将你的目标文件作为解决方案的一部分导入。https://dev59.com/YGMm5IYBdhLWcg3wT9qU#17712386 - jessehouwing