次の方法で共有


WriteCodeFragment タスク

指定された生成済みのコード片から一時コード ファイルを生成します。 ファイルは削除されません。

パラメーター

WriteCodeFragment タスクのパラメーターの説明を次の表に示します。

パラメーター 説明
AssemblyAttributes 省略可能な ITaskItem[] 型のパラメーターです。

書き込む属性の説明です。 項目 Include 値は、属性の種類の完全名になります。たとえば、System.AssemblyVersionAttribute

各メタデータはパラメーターの名前/値の組みになります。 MSBuild 17.6 以前ではパラメーターは型 String であると見なされますが、MSBuild 17.7 以降では、mscorlib の一部である String 以外の型を使用することもできます。 たとえば、truefalse ブール値、整数、列挙型、浮動小数点型を使用できます。 型は構文から自動的に推論されます。 mscorlib にない型の場合は、{parameter}_TypeName 形式でメタデータ値を指定して、パラメーターの型を指定します。

一部の属性では、位置指定コンストラクター引数のみ許可されます。 ただし、このような引数はあらゆる属性で使用できます。 位置指定コンストラクター引数を設定するには、_Parameter1_Parameter2 のようなメタデータ名を使用します。 パラメーターのインデックスをスキップすることはできません。

MSBuild 17.7 以降では、フォーム {parameter}_IsLiteral のメタデータを指定して、パラメーター値テキストを引用符で囲まずにそのまま解釈するようにタスクに指示することもできます (文字列値の既定の場合と同様)。
Language 必須の String 型のパラメーターです。

生成するコードの言語を指定します。

Language には、CodeDom プロバイダーが使用できる任意の言語 ("C#" や "VisualBasic" など) を指定できます。出力されるファイルには、その言語の既定のファイル名拡張子が付けられます。
OutputDirectory 省略可能な ITaskItem 型のパラメーターです。

生成されたコードの出力先フォルダーを指定します。一般的には、中間フォルダーにします。
OutputFile 省略可能な ITaskItem 型の出力パラメーターです。

生成されたファイルのパスを指定します。 ファイル名を使用してこのパラメーターを設定する場合、出力先フォルダーがファイル名の前に付加されます。 ルートを使用して設定される場合、出力先フォルダーは無視されます。

このパラメーターが設定されない場合、出力ファイル名が出力先フォルダー、任意のファイル名、指定言語の既定のファイル名拡張子になります。

解説

表に示されているパラメーターを使用できるだけでなく、このタスクは TaskExtension クラスからパラメーターを継承します。このクラス自体は Task クラスから継承されます。 これらの追加のパラメーターの一覧とその説明については、「TaskExtension Base Class」を参照してください。

通常、このタスクはユーザー コードで直接使用されません。

アセンブリ レベルの属性を生成する

MSBuild 17.7 以降では、アセンブリ レベルの属性に対してさまざまなパラメーター型をサポートするように、このタスクが更新されました。 MSBuild 17.6 以前は、アセンブリ レベルの属性のパラメーター型として String のみがサポートされていました。 MSBuild 17.7 以降では、以前のバージョンの MSBuild のように、パラメーターが文字列型である属性だけでなく、任意の .NET アセンブリ属性を構築できます。

たとえば、ブール値パラメーターを使用するアセンブリ レベルの属性 CLSCompliant(true) を定義するには、次の構文を使用できます:

<ItemGroup>
    <AssemblyAttribute Include="System.CLSCompliantAttribute">
        <_Parameter1>true</_Parameter1>
    </AssemblyAttribute>
</ItemGroup>

生成されるコードは、ターゲット言語によって異なります。 C# の場合、次のようになります:

[assembly: System.CLSCompliantAttribute(true)]

mscorlib で定義された型は、前の例のブール値など、自動的に推論されます。 フォーム {parameter}_TypeName のメタデータを定義して、推論できない型を指定できます。

<ItemGroup>
    <AssemblyAttribute Include="Microsoft.Owin.OwinStartup">
        <_Parameter1>Microsoft.Examples.Startup</_Parameter1>
        <_Parameter1_TypeName>System.Type</_Parameter1_TypeName>
    </AssemblyAttribute>
</ItemGroup>

C# で生成されるコードは次のとおりです:

[assembly: Microsoft.Owin.OwinStartup(typeof(Microsoft.Examples.Startup))]

より複雑なパラメーター値の場合は、{parameter}_IsLiteral を使用できます。

<ItemGroup>
    <AssemblyAttribute Include="NUnit.Framework.Parallelizable">
        <_Parameter1>NUnit.Framework.ParallelScope.Fixtures</_Parameter1>
        <_Parameter1_IsLiteral>true</_Parameter1_IsLiteral>
    </AssemblyAttribute>
</ItemGroup>

前の例では、C# で次のアセンブリ属性が生成されます:

[assembly: NUnit.Framework.Parallelizable(NUnit.Framework.ParallelScope.Fixtures)]

通常、プロジェクトの言語で属性宣言で許可される任意の構文を使用できます。 配列パラメーターの場合は、次のようなコードを使用できます:

<ItemGroup>
  <AssemblyAttribute Include="TestAttribute">
    <_Parameter1>new int[] { 1, 3, 5 } /* odd numbers */</_Parameter1>
    <_Parameter1_IsLiteral>true</_Parameter1_IsLiteral>
  </AssemblyAttribute>
</ItemGroup>

IsLiteral を使用すると、構文は適切なコンパイラによって解釈されるため、言語固有です。 複数の言語が同じ MSBuild インポート ファイルやプロジェクト ファイルを共有している場合は、条件付き構文を使用して、コードが関連するプロジェクト固有の言語でコンパイルされるようにする必要があります。

Note

このセクションで説明する構文 (_TypeName および _IsLiteral サフィックス) は、F# ではサポートされていません。

タスクの WriteCodeFragment 一般的なユース ケースは、アセンブリ レベルの属性を定義し、ビルドに追加するファイルを生成するターゲットにあります。 定義すると AssemblyAttribute 、次のコードのようにタスクを WriteCodeFragment 呼び出すことができます。

<Target Name="AddAssemblyVersion" BeforeTargets="Build">
  <ItemGroup>
     <AssemblyAttribute Include="AssemblyVersion">
       <_Parameter1>1.2.3.4</_Parameter1>
     </AssemblyAttribute>
  </ItemGroup>
  <WriteCodeFragment AssemblyAttributes="@(AssemblyAttribute)"
                     Language="C#"
                     OutputDirectory="$(IntermediateOutputPath)"
                     OutputFile="AssemblyVersion.cs">
    <Output TaskParameter="OutputFile" ItemName="Compile" />
    <Output TaskParameter="OutputFile" ItemName="FileWrites" />
  </WriteCodeFragment>
</Target>

指定 OutputFile されていない場合は、ファイル名がランダムに生成されます。 また、生成されたファイルをビルドに追加するために、 Compile 項目リストが出力として提供されます。 ファイルも項目リストに FileWrites 追加されるため、ターゲットの実行時に Clean 削除されます。

関連項目