GenerateResource タスク
.txt
および .resx
(XML ベースのリソース形式) ファイルと共通言語ランタイムの .resources
バイナリ ファイルとの間の変換を行います。これは、ランタイム バイナリ実行可能ファイルに埋め込んだり、サテライト アセンブリにコンパイルしたりできます。 このタスクは通常、.txt
または .resx
ファイルを .resources
ファイルに変換するために使用します。 GenerateResource
タスクの機能は resgen.exe の機能に似ています。
パラメーター
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) ファイルを評価するために新しい AppDomain を作成する (true) か、リソース ファイルがユーザーのアセンブリを参照する場合にのみ新しい AppDomain を作成する (false) かを指定するブール値を取得または設定します。 |
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 で使用されている言語のいずれかに完全に一致する必要があります。 たとえば、 VB や C# などです。このパラメーターに値を渡すことにより、タスクでは厳密な型のリソースが作成されます。 |
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
ファイル内のリンクをたどり、リンク先のファイルのタイムスタンプも確認できます。 したがって、GenerateResource
タスクを持つターゲットについては、Inputs
属性と Outputs
属性の使用は基本的に避けてください。実行する必要のあるターゲットがスキップされてしまう可能性があります。
上記のパラメーター以外に、このタスクは 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
タスクを使用して、Resx
項目コレクションで指定されたファイルから .resources
ファイルを作成します。
<GenerateResource
Sources="@(Resx)"
OutputResources="@(Resx->'$(IntermediateOutputPath)%(Identity).resources')">
<Output
TaskParameter="OutputResources"
ItemName="Resources"/>
</GenerateResource>
GenerateResource
タスクは、<EmbeddedResource>
アイテムの <LogicalName>
メタデータを使用して、アセンブリに埋め込まれるリソースに名前を付けます。
アセンブリの名前が myAssembly である場合、次のコードでは someQualifier.someResource.resources
という名前の埋め込みリソースが生成されます。
<ItemGroup>
<EmbeddedResource Include="myResource.resx">
<LogicalName>someQualifier.someResource.resources</LogicalName>
</EmbeddedResource>
</ItemGroup>
<LogicalName>
メタデータがない場合、リソースは myAssembly.myResource.resources
という名前になります。 この例は、Visual Basic と Visual C# のビルド処理にのみ適用されます。