Windows 2008 x64 で MSBuild (フレームワーク バージョン v4.0.30319 - 32 ビット 1) を使用しています。MSBuild がインライン タスクを管理する方法を理解したい。タスクへの呼び出しごとに 1 回コンパイルされますか? または、一度コンパイルして、タスクへの呼び出しごとに再利用しますか?
"/m" 引数を指定して MSBuild を実行し、C# コードに意図的なエラーを導入しようとしました。そして、MSBuild は 1 つのテキスト ファイル (プロファイル フォルダーのどこかにある一時フォルダーの下) を示しました。他のテキスト ファイルは生成されませんでした。ただし、エラーがなければこれを把握する方法がわかりませんでした。
これを理解しようとする背後にある私の意図:これが(インラインタスクの代わりに)コンパイルされたdllを使用するのと同じ順序で効率的かどうかを知ること。コンパイルが 1 回だけ行われる場合、インライン タスク コードのコンパイルのわずかなオーバーヘッドは許容されます (コードとバイナリの SCM の側面を節約できるため)。
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="default" ToolsVersion="4.0">
<Target Name="default">
<ItemGroup>
<A Include="1;2;3;4;5;6;7;8;9;10"/>
</ItemGroup>
<MSBuild Projects="$(MSBuildProjectFullPath)"
BuildInParallel="true"
Targets="Echoer"
ToolsVersion="4.0"
StopOnFirstFailure="true"
Properties="Prop=%(A.Identity)"/>
</Target>
<Target Name="Echoer">
<MyTask WhatToEcho="$(Prop)"/>
</Target>
<UsingTask TaskName="MyTask" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<WhatToEcho ParameterType="System.String" Required="True"/>
</ParameterGroup>
<Task>
<Code Language="cs" Type="Fragment">
<![CDATA[
Log.LogMessage("Property received: "+WhatToEcho);
]]>
</Code>
</Task>
</UsingTask>
</Project>