为具有许多C#项目的解决方案编写MSBuild

时间:2011-08-17 16:59:14

标签: msbuild

我是MSBuild的新手。我正在尝试两种不同的解决方案。测试给了我错误,编译正在运行,但我甚至不确定它是否有任何作用。

<?xml version="1.0" encoding="utf-8"?>

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<PropertyGroup>
<Configuration>Debug</Configuration>
<AssemblyName>MSBuildSample</AssemblyName>
<OutputPath>Output\</OutputPath>
</PropertyGroup>

<ItemGroup>
<Compile Include="**\*.cs" />
<Reference Include="**\*.dll"/>
</ItemGroup>

<ItemGroup>
 <ProjectsToBuild Include="**\*proj" Exclude="$(MSBuildProjectFile)"/>
</ItemGroup>

<Target Name="Test">
<MakeDir Directories="$(OutputPath)"      Condition="!Exists('$(OutputPath)')" />
<Csc Sources="@(Compile)"  References="@(Reference)" OutputAssembly="$(OutputPath)$(AssemblyName).exe" />
<Message Text="The output file is done"/>
</Target>

<Target Name="Clean">
<MSBuild Projects="@(ProjectsToBuild)" ContinueOnError="false" Targets="Clean"
        Properties="Configuration= $(Configuration)" />
</Target>

<Target Name="Compile" DependsOnTargets="Clean">
<MSBuild Projects="@(ProjectsToBuild)" ContinueOnError="false" Properties="Configuration=$(Configuration)">
  <Output ItemName="BuildOutput" TaskParameter="TargetOutputs"/>
</MSBuild>
</Target>

</Project>

我是否正朝着正确的道路前进?

1 个答案:

答案 0 :(得分:4)

您只需将解决方案文件作为项目传递给MSBuild任务:

<MSBuild Projects="MySolution.sln"  />

OR

<MSBuild Projects="$(PathToSolutionFile)"  />

如果您不是这样,请告诉我

编辑:回复评论

来自MSDN,MSBuild Task

  

此任务不仅可以处理项目文件,还可以处理解决方案文件。

MSBuild不会创建解决方案文件。考虑到你有一个解决方案文件,其中包括你提到的两个项目 - 你可以指定单个解决方案文件和MSBuild拾取所有包含的项目。

也许你需要这个: How to: Create Solutions and Projects