次の方法で共有


GenerateResource タスク

.txt および .resx (XML ベースのリソース形式) ファイルと共通言語ランタイムの .resources バイナリ ファイルとの間の変換を行います。これは、ランタイム バイナリ実行可能ファイルに埋め込んだり、サテライト アセンブリにコンパイルしたりできます。 このタスクは通常、.txt または .resx ファイルを .resources ファイルに変換するために使用します。 GenerateResource タスクの機能は resgen.exe の機能に似ています。

注意事項

.resx BinaryFormatter を使用して ファイル内のリソースがシリアル化される場合があります。 信頼できる .resx ファイルのみをビルド プロセスに含めてください。

パラメーター

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

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

このタスクが実行する依存関係のチェックで使用される追加入力が格納されます。 たとえば、通常、プロジェクト ファイルとターゲット ファイルは入力になります。結果、それらのファイルが更新された場合は、すべてのリソースが再生成されます。
EnvironmentVariables 省略可能な String[] 型のパラメーターです。

標準の環境ブロックに追加して (または標準の環境ブロックの一部をオーバーライドする形で)、生成された resgen.exe に渡される、環境変数の名前と値のペアの配列を指定します。
ExcludedInputPaths 省略可能な ITaskItem[] 型のパラメーターです。

最新かどうかをチェックするときに無視する追跡対象の入力のパスを指定する項目の配列を指定します。
ExecuteAsTool 省略可能な Boolean 型のパラメーターです。

true の場合、アウトプロセスで適切なターゲット フレームワークの tlbimp.exe および aximp.exe が実行されて、必要なラッパー アセンブリが生成されます。 このパラメーターにより、ResolveComReferences のマルチ ターゲットが可能になります。
FilesWritten 省略可能な ITaskItem[] 型の出力パラメーターです。

キャッシュ ファイルがある場合は、ディスクに書き込まれるすべてのファイルの名前が含まれます。 このパラメーターは、クリーン処理を行う場合に便利です。
MinimalRebuildFromTracking 省略可能な Boolean 型のパラメーターです。

追跡対象のインクリメンタル ビルドを使用するかどうかを指定するスイッチを取得または設定します。 true の場合は、インクリメンタル ビルドが有効になっています。それ以外の場合は、リビルドが強制されます。
NeverLockTypeAssemblies 省略可能な Boolean 型のパラメーターです。

リソース (.resx) ファイル (true) を評価する新しい AppDomain を作成するか、リソース ファイルがユーザーのアセンブリ (false) を参照する場合にのみ新しい AppDomain を作成するかを指定するブール値を取得または設定します。
OutputResources 省略可能な ITaskItem[] 型の出力パラメーターです。

.resources ファイルなど、作成されるファイルの名前を指定します。 名前を指定しなかった場合には、対応する入力ファイルの名前が使用され、作成された .resources ファイルは、入力ファイルが格納されたディレクトリに配置されます。
PublicClass 省略可能な Boolean 型のパラメーターです。

true に設定すると、厳密に型指定されたリソース クラスをパブリック クラスとして作成します。
References 省略可能な String[] 型のパラメーターです。

.resx ファイル内にある型を読み込むための参照です。 .resx ファイルのデータ要素は、.NET 型の場合があります。 この型は、.resx ファイルを読み取るときに、解決される必要があります。 通常は、標準の型の読み込み規則を使用して正常に解決します。 アセンブリを References に指定した場合には、そのアセンブリが優先されます。

このパラメーターは、厳密に型指定されたリソースには必要ありません。
SdkToolsPath 省略可能な String 型のパラメーターです。

resgen.exe などの SDK ツールのパスを指定します。
Sources 必須の ITaskItem[] 型のパラメーターです。

変換するアイテムを指定します。 このパラメーターに渡すアイテムの拡張子は、以下のいずれかである必要があります。

- .txt: 変換するテキスト ファイルの拡張子を指定します。 テキスト ファイルには、文字列リソースだけを含めることができます。
- .resx: 変換する XML ベースのリソース ファイルの拡張子を指定します。
- .restext: .txtと同じ形式を指定します。 この拡張子は、ビルド プロセスで使用するソース ファイルのうち、どのソース ファイルにリソースが含まれているのかを明示する場合に便利です。
- .resources: 変換するリソース ファイルの拡張子を指定します。
StateFile 省略可能な ITaskItem 型のパラメーターです。

入力ファイル内のリンクの依存関係チェックを高速化するために使用する、オプションのキャッシュ ファイルへのパス .resx 指定します。
StronglyTypedClassName 省略可能な String 型のパラメーターです。

厳密に型指定されたリソース クラスのクラス名を指定します。 このパラメーターが指定されていない場合は、リソース ファイルのベース名が使用されます。
StronglyTypedFilename 省略可能な ITaskItem 型のパラメーターです。

ソース ファイルの名前を指定します。 このパラメーターを指定しない場合、クラスの名前は基本ファイル名として使用され、拡張子は言語に依存します。 例: MyClass.cs
StronglyTypedLanguage 省略可能な String 型のパラメーターです。

厳密な型のリソースのクラス ソースの生成に使用する言語を指定します。 このパラメーターは、CodeDomProvider で使用されている言語のいずれかに完全に一致する必要があります。 たとえば、VBC# などです。

このパラメーターに値を渡すことにより、タスクでは厳密な型のリソースが作成されます。
StronglyTypedManifestPrefix 省略可能な String 型のパラメーターです。

生成される厳密な型のリソースのクラス ソースで使用するリソース名前空間プレフィックスまたはマニフェスト プレフィックスを指定します。
StronglyTypedNamespace 省略可能な String 型のパラメーターです。

生成される厳密な型のリソースのクラス ソースで使用する名前空間を指定します。 このパラメーターが指定されていない場合、厳密に型指定されたリソースはグローバル名前空間にあります。
TLogReadFiles 省略可能な ITaskItem[] 型の読み取り専用パラメーターです。

読み取り追跡ログを表す項目の配列を取得します。
TLogWriteFiles 省略可能な ITaskItem[] 型の読み取り専用パラメーターです。

書き込み追跡ログを表す項目の配列を取得します。
ToolArchitecture 省略可能な System.String 型のパラメーターです。

Tracker.exe を使用して ResGen.exe を実行する必要があるかどうかを判断するために使用されます。

ExecutableType 列挙体のメンバーが解析できる必要があります。 String.Empty の場合は、ヒューリスティックを使用して既定のアーキテクチャを判断します。 Microsoft.Build.Utilities.ExecutableType 列挙体のメンバーが解析できる必要があります。
TrackerFrameworkPath 省略可能な String 型のパラメーターです。

FileTracker.dll が含まれる適切な .NET Framework の場所のパスを指定します。

設定した場合は、渡される FileTracker.dll のビットが、使用される ResGen.exe のビットと一致していることをユーザーが確認する必要があります。 設定しない場合は、タスクによって現在の .NET Framework のバージョンに基づいて適切な場所が判断されます。
TrackerLogDirectory 省略可能な String 型のパラメーターです。

このタスクの実行による追跡ログが配置される中間ディレクトリを指定します。
TrackerSdkPath 省略可能な String 型のパラメーターです。

Tracker.exe が含まれる適切な Windows SDK の場所のパスを指定します。

設定した場合は、渡される Tracker.exe のビットが、使用される ResGen.exe のビットと一致していることをユーザーが確認する必要があります。 設定しない場合は、タスクによって現在の Windows SDK に基づいて適切な場所が判断されます。
TrackFileAccess 省略可能な Boolean 型のパラメーターです。

true の場合、入力ファイルのディレクトリを使用して相対ファイル パスが解決されます。
UsePreserializedResources 省略可能な Boolean 型のパラメーターです。

true場合は、.NET Core または .NET 5 以降ではサポートされていない ResourceWriterではなく、PreserializedResourceWriter を使用して文字列以外のリソースをシリアル化することを指定します。
UseSourcePath 省略可能な Boolean 型のパラメーターです。

true の場合は、入力ファイルのディレクトリを使用して相対ファイル パスを解決することを指定します。

解説

.resx ファイルには他のリソース ファイルへのリンクが含まれている可能性があるため、.resx.resources ファイルのタイムスタンプを比較するだけでは、出力が最新であるかどうかを確認するだけでは不十分です。 GenerateResource タスクでは、.resx ファイル内のリンクをたどり、リンク先のファイルのタイムスタンプも確認できます。 したがって、Inputs タスクを持つターゲットについては、Outputs 属性と GenerateResource 属性の使用は基本的に避けてください。実行する必要のあるターゲットがスキップされてしまう可能性があります。

上記のパラメーター以外に、このタスクは TaskExtension クラスからパラメーターを継承します。このクラス自体は、Task クラスから継承されます。 これらの追加のパラメーターの一覧とその説明については、「TaskExtension Base Class」を参照してください。

MSBuild 4.0 を使用して .NET 3.5 プロジェクトをターゲットにしている場合、x86 リソースでビルドが失敗することがあります。 この問題を回避するために、ターゲットを AnyCPU アセンブリとしてビルドできます。

パラメーター UsePreserializedResources では、通常の .NET ビルド プロセスの $(GenerateResourceUsePreserializedResources) プロパティからその値を取得します。 .NET 5 以降を使用する .NET Core プロジェクトおよびプロジェクトでは、このプロパティは既定で true に設定されます。 $(GenerateResourceUsePreserializedResources)true に設定すると、文字列以外のリソースを使用する .NET Framework 4.6.1 以降を対象とするプロジェクトを .NET SDK でビルドできます。 アセンブリ System.Resources.Extensions は実行時に使用できる必要があります。 これは、.NET Core 3.0 以降および .NET 5 以降で使用できます。また、PackageReference を介して .NET Framework 4.6.1 以降で使用できます。

次の例では、GenerateResource タスクを使用して、.resources 項目コレクションで指定されたファイルから Resx ファイルを作成します。

<GenerateResource
    Sources="@(Resx)"
    OutputResources="@(Resx->'$(IntermediateOutputPath)%(Identity).resources')">
    <Output
        TaskParameter="OutputResources"
        ItemName="Resources"/>
</GenerateResource>

GenerateResource タスクは、<LogicalName> アイテムの <EmbeddedResource> メタデータを使用して、アセンブリに埋め込まれるリソースに名前を付けます。

アセンブリの名前が myAssembly である場合、次のコードでは someQualifier.someResource.resources という名前の埋め込みリソースが生成されます。

<ItemGroup>
    <EmbeddedResource Include="myResource.resx">
        <LogicalName>someQualifier.someResource.resources</LogicalName>
        <WithCulture>false</WithCulture>
    </EmbeddedResource>
</ItemGroup>

<LogicalName> メタデータがない場合、リソースは myAssembly.myResource.resources という名前になります。 この例は、Visual Basic と Visual C# のビルド処理にのみ適用されます。

関連項目