繁体   English   中英

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

[英]How to build dependent project first with msbuild

我刚开始研究msbuild,因为我想制作自己的构建脚本。 现在我能够创建只编译一个项目的构建脚本,但是如何处理依赖项呢?

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

  1. projectA.xml
  2. projectB.xml

我怎么告诉msbuild我在执行projectB.xml时应该首先执行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处理。 试试吧。 Automajically。 您不需要在msbuild脚本中对依赖顺序进行排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM