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 ) ファイル (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 で使用されている言語のいずれかに完全に一致する必要があります。 たとえば、 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
ファイル内のリンクをたどり、リンク先のファイルのタイムスタンプも確認できます。 したがって、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# のビルド処理にのみ適用されます。