如何使用msbuild首先构建依赖项目
本文关键字:构建 依赖 项目 何使用 msbuild | 更新日期: 2023-09-27 18:27:53
我刚刚开始研究msbuild,因为我想制作自己的构建脚本。目前,我可以创建只编译一个项目的构建脚本,但我如何处理依赖关系?
例如,如果我有两个项目使用这两个msbuild脚本进行构建,该怎么办?
- projectA.xml
- projectB.xml
当我执行projectB.xml时,如何告诉msbuild它应该首先执行projectA.xml?
我在谷歌上搜索了很多,但似乎没有得到像我这样的首发球员所理解的东西。如果有一篇描述这一点的文章的链接,或者只是一个小的代码示例,我会非常高兴。
我之所以想要这个控件,是因为我正在建造一个图书馆。图书馆由几个项目组成。开发人员应该能够提取库的源代码,只构建他想要的库。
事实上,我希望能够从不同的项目中构建.net模块。这就是为什么我希望能够运行自定义的msbuild脚本。
如果您用这两个项目创建一个解决方案,您可以用msbuild将.sln
文件作为目标,而不是直接构建项目,它应该注意项目依赖性:)
但如果您使用的是标准.csproj项目。。。
好吧,我看了一下我正在做的一个项目,它是这样的:
<ItemGroup>
<ProjectReference Include="..'SomeFolder'SomeProject.csproj">
<Project>{1A94B405-2D01-4A09-90D5-A5B31180A03B}</Project>
<Name>SomeProjectNamespace</Name>
</ProjectReference>
</ItemGroup>
这是一个关于参考文献的MSDN页面。向下滚动,直到找到ProjectReference。。。
我设置了构建脚本,这样我就有了一些不做任何事情的通用目标,但使用DependsOnTargets来设置项目依赖项并运行构建。
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- ************************************************************************************************ -->
<!-- Targets that run the builds -->
<!-- ************************************************************************************************ -->
<Target Name="AutoBuild" DependsOnTargets="BuildProject1;BuildProject2;BuildInstallers">
<OnError ExecuteTargets="NotifyFailure" />
</Target>
<Target Name="FullCompile" DependsOnTargets="BuildProject1;BuildProject2">
<OnError ExecuteTargets="NotifyFailure" />
</Target>
<!-- Build Project 1 -->
<Target Name="BuildProject1">
<!-- Use MSBuild task and point it to build project1.csproj, project1.sln or whatever your projects is -->
</Target>
<!-- Build Project 2 -->
<Target Name="BuildProject2">
<!-- Use MSBuild task and point it to build project2.csproj, project2.sln or whatever your projects is -->
</Target>
<Target Name="BuildInstallers">
<!-- Whatever logic you have for building installers -->
</Target>
</Project>
在MSBuild问题#2887中讨论了类似的情况。该线程还显示了到官方ProjectReference
协议的链接。
您不需要使用sln进行构建。如果在csproj中使用项目引用,则依赖顺序由MSBuild负责。试试看。庄严地。您不需要在msbuild脚本中对依赖项顺序进行排序。