我有一个构建任务,我想将其包含到我的msbuild 脚本中。我希望 CI 在尝试使用它们之前首先编译构建任务,以便添加的任何新构建任务都可用,并且不必编译实际程序集并将其提交给 CI 机器。我尝试过类似的事情。
<Target Name="SetupEnv">
<MSBuild Targets="Build" Projects="FooBuildTasks\BuildTasks.sln" />
<UsingTask TaskName="Foo.BarTask" AssemblyFile="$(MSBuildProjectDirectory)\BuildTasks\FooBuildTasks\bin\Release\FooBuildTasks.dll"/>
<BarTask Variable="Test" Value="I'm Alive" />
</Target>
这会构建任务组装文件,但似乎UsingTask任务无法在目标中运行。
error MSB4036: The "UsingTask" task was not found. Check the following: 1.) The name of the task in the project file is the sa...
有什么好的解决办法吗?如果我在 Project 下运行 UsingTask,如果我事先预编译了任务程序集,它就可以正常工作。
使用的msbuild平台是3.5
最佳答案
您需要两步构建或使用内联任务。两步构建涉及将构建分为预构建构建任务的“Configure”目标和执行构建的“CoreBuild”目标。
使用下面的任一技术,您需要确保您的“Configure”目标不需要由它构建的任何自定义任务。
1) 使用“构建”目标来驱动两步构建:
<Target Name="Configure">
<MSBuild Projects="PathTo/CustomBuidTasks.csproj" Target="Build" />
</Target>
<Target Name="CoreBuild">
<MSBuild Projects="@(ItemsToBuild)" Target="Build" />
</Target>
<Target Name="Build">
<MSBuild Projects="$(MSBuildThisFile)" Target="Configure" />
<MSBuild Projects="$(MSBuildThisFile)" Target="CoreBuild" />
</Target>
2) 设置 CI 系统来为您执行两步构建,本质上是使用 CI 工作流程复制上述内容,首先使用“配置”目标执行 MSBuild,然后单独执行更传统的“构建”目标。
3) 另一种方法是在 MSBuild 中使用内联任务。通过将任务代码放入 MSBuild 文件中,引擎会在任务首次执行时为您编译它。
摘自MSBuild Trickery技巧 #6 和 #32
关于msbuild - msbuild可以编译构建任务然后使用它们吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9413852/