2010-03-16 53 views
7

我需要一组需要针对整个解决方案只执行一次的任务。这将运行将修改每个项目的任务,以便为每个项目运行一组单独的任务。之前我们已经使用一个单独的项目完成了解决方案的解决方案级任务,但我们希望从中解脱出来。有没有人做过这个或没有人有任何建议如何实现这个?在MSBuild的解决方案级别运行一次目标运行一次

回答

6

由于解决方案文件不是MSBuild格式,因此不易扩展或自定义。如果您想要更多地控制构建过程,您必须创建一个“驱动程序”msbuild文件来替换您的解决方案文件。在这个驱动程序文件中,您将构建所需的所有项目并执行一些其他任务。你可以使用MSBuild task来做到这一点。这里是一个示例,展示如何构建多个项目。

<Project ...> 
    <ItemGroup> 
     <Projects Include="proj01.csproj"/> 
     <Projects Include="proj02.csproj"/> 
     <Projects Include="proj03.csproj"/> 
    </ItemGroup> 

    <Target Name="BuildAll"> 
     <MSBuild Projects="@(Projects)" BuildInParallel="true" /> 
    </Target> 

</Project> 

所以在你的情况下,你只需要在构建项目之前执行任务。另请注意,我为BuildInParallel指定了值true,表示MSBuild可以尝试一次构建多个项目。

+0

这是一个有趣的想法。如果我想在构建项目之前执行一些额外的任务,我相信这也会起作用。 (这些额外的任务将自行修改项目。) – Chandam 2010-03-18 13:03:53

+0

创建这些构建文件是一种非常常见的情况。很多人更喜欢使用生成构建的解决方案来编写这些类型的构建文件。在我的情况下,我只使用Visual Studio的解决方案文件,而不是实际的版本。 – 2010-03-18 13:39:47

+0

用这种方法说,如果我的项目1取决于项目2,那么msbuild不会构建我的项目2两次,从而延迟构建过程? – Nikhil 2013-08-01 12:22:41