私はMSBuildを初めて使用しますが、次の簡単なスクリプトを設定することができました。
<Project ToolsVersion="3.5" DefaultTargets="Compile" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
</PropertyGroup>
<ItemGroup>
<SolutionRoot Include=".." />
<BuildArtifacts Include=".\Artifacts\" />
<SolutionFile Include="..\SolutionName.sln" />
</ItemGroup>
<Target Name="Clean">
<RemoveDir Directories="@(BuildArtifacts)" />
</Target>
<Target Name="Init" DependsOnTargets="Clean">
<MakeDir Directories="@(BuildArtifacts)" />
</Target>
<Target Name="Compile" DependsOnTargets="Init">
<MSBuild Projects="@(SolutionFile)" Properties="OutDir=%(BuildArtifacts.FullPath);Configuration=$(Configuration)" />
<MakeDir Directories="%(BuildArtifacts.FullPath)\_PublishedWebsites\RDE.XAP.UnifiedGui.Web\Temp" />
</Target>
</Project>
このソリューションには23のプロジェクトがあり、そのうち4つはWebAppです。これで、スクリプトは正常に機能し、出力が正しく生成されます。私が対抗する唯一の問題は、AJAXControlToolkitを使用するソリューション内の2つのWebAppプロジェクトにあります。ツールキットには、ローカライズされたリソースを含む一連のフォルダー(ar、it、es、frなど)があります。これらのフォルダーは、ソリューションがMSBuildでビルドされるときに、WebAppsのbinディレクトリにコピーされませんが、VisualStudioでビルドされるときにコピーされます。
どうすればこれをきれいに解決できますか?コンパイル後にディレクトリをコピーする(かなり複雑な)タスクを作成できることは知っていますが、それは私にとって正しい解決策ではないようです。また、Google、SO、MSDNのいずれも、この種の問題に関する詳細を提供できませんでした。