如何使用msbuild首先构建依赖项目

本文关键字:构建 依赖 项目 何使用 msbuild | 更新日期: 2023-09-27 18:27:53

我刚刚开始研究msbuild,因为我想制作自己的构建脚本。目前,我可以创建只编译一个项目的构建脚本,但我如何处理依赖关系?

例如,如果我有两个项目使用这两个msbuild脚本进行构建,该怎么办?

  1. projectA.xml
  2. projectB.xml

当我执行projectB.xml时,如何告诉msbuild它应该首先执行projectA.xml?

我在谷歌上搜索了很多,但似乎没有得到像我这样的首发球员所理解的东西。如果有一篇描述这一点的文章的链接,或者只是一个小的代码示例,我会非常高兴。

我之所以想要这个控件,是因为我正在建造一个图书馆。图书馆由几个项目组成。开发人员应该能够提取库的源代码,只构建他想要的库。

事实上,我希望能够从不同的项目中构建.net模块。这就是为什么我希望能够运行自定义的msbuild脚本。

如何使用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脚本中对依赖项顺序进行排序。