我目前正在努力完成一项看似非常基本的任务,即向csproj文件添加一个新的自定义目标,并使用msbuild从命令行运行它。
我在网上做了广泛的研究,但我没有发现真正有效的解决方案。
假设我将以下目标添加到我的csproj文件中:
<Target Name="TeamCity">
<Message Text="I am Running!"/>
</Target>
甚至是依赖于构建的东西:
<Target Name="TeamCity" DependsOnTargets="Build">
<Message Text="I am Running!"/>
</Target>
这就是msbuild文档所建议的。
但是,瞄准目标似乎是一项不可能完成的任务。当我能够在csproj:上运行预定义的目标时
msbuild MySolution.sln /t:MyProject:Rebuild /p:Configuration="Release" /p:Platform="Any CPU"
我无法运行我刚刚添加的目标-即TeamCity目标:
msbuild MySolution.sln /t:MyProject:TeamCity /p:Configuration="Release" /p:Platform="Any CPU"
我总是收到错误MSB4057:项目中不存在目标"TeamCity"。
这次跑步的秘密是什么?
PS。请注意,我需要的任务是在项目级别上工作,而不是在解决方案上。我需要运行msbuild MySolution.sln…不要有那么多人错误地建议msbuild MyProject.csproj…
秘诀很简单——你无法运行它。
因为,msbuild生成中间项目文件(YourSolution.sln.metproj),但不会从YourProject.csproj导入,包括.targets文件。这就是YourCustomTarget未被识别的原因。
您可以尝试使用Before/After Targets
将目标注入预定义的构建流中。
希望它能有所帮助。