2012-03-15 23 views
3

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

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

  1. projectA.xml
  2. projectB.xml

我怎么告诉的MSBuild,当我执行projectB.xml,它应该首先执行projectA.xml?

我已经在这里搜索了很多,但它似乎没有得到像我这样的起动器理解的任何东西。我会很高兴看到一篇描述这篇文章的链接,或者只是一个小代码示例。

我想要这种控制的原因是因为我正在建造一个图书馆。该图书馆由几个项目组成。开发人员应该能够拉下库的源代码,并只建立他想要的库。

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

回答

1

我设置了我的构建脚本,以便我有几个不会做任何事的共同目标,但使用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> 
+0

由于MSBuild任务提示,我接受了这个。这正是我想要使用的。在这个任务中,我可以参考另一个项目来构建。感谢那。 – mslot 2012-03-16 12:06:42

+0

我想要构建项目而不必将其包含在我的解决方案中,这可能吗? – 2017-03-07 17:50:22

5

如果您创建了这两个项目的解决方案可以针对使用的MSBuild .sln文件,而不是直接建设项目,它应该如果你使用采取项目依赖:)

照顾但这标准的.csproj项目...

好,我看了一个项目,我的工作,而且是这样的:

<ItemGroup> 
    <ProjectReference Include="..\SomeFolder\SomeProject.csproj"> 
     <Project>{1A94B405-2D01-4A09-90D5-A5B31180A03B}</Project> 
     <Name>SomeProjectNamespace</Name> 
    </ProjectReference> 
</ItemGroup> 

这里是一个MSDN page有关引用。向下滚动,直到找到ProjectReference ...

+0

继我的答案,也许你可以创建两个项目,一个依赖于其他,看到了什么的.sln和.csproj的文件是什么样子,也许这会告诉你怎么做的依赖在你自己自定义脚本。 – joshuahealy 2012-03-15 22:16:28

+0

除了我最后的评论,我为你做了这个,并编辑了我的答案,详细信息:) – joshuahealy 2012-03-15 22:23:57

+1

+1用于提示.sln文件。如果没有理由不希望VisualStudio管理您的构建顺序,则不要重新发明轮子。 – Bronumski 2012-03-15 22:39:54

0

您不需要使用sln构建。如果您在csproj中使用项目引用,则依赖性顺序由MSBuild负责。 试试吧。 Automajically。 您不需要在msbuild脚本中对依赖性顺序进行排序。

+0

这并不总是奏效。当我将一个解决方案从VS 2010转换到VS 2012时,该依赖项目永远不会在MSBuild.exe中生成(但它在VS 2012中)。但是,按照“appclay”所述添加项目提示,它现在可以工作。 – 2014-06-27 20:59:59

相关问题