MSBuild が .NET Core プロジェクトをコンパイルすると、 .resx ファイル拡張子を持つ XML リソース ファイルがバイナリ .resources ファイルに変換されます。 バイナリ ファイルはコンパイラの出力に埋め込まれており、 ResourceManagerで読み取ることができます。 この記事では、MSBuild で各 .resources ファイルの名前を選択する方法について説明します。
ヒント
プロジェクト ファイルにリソース項目を明示的に追加し、. NET Core の既定のインクルード glob にも含まれている場合は、ビルド エラーが発生します。 リソース ファイルを EmbeddedResource
項目として手動で含めるには、 EnableDefaultEmbeddedResourceItems
プロパティを false に設定します。
既定の名前
.NET Core 3.0 以降では、次の両方の条件が満たされている場合、リソース マニフェストの既定の名前が使用されます。
- リソース ファイルは、
EmbeddedResource
、LogicalName
、またはManifestResourceName
メタデータを含むDependentUpon
項目としてプロジェクト ファイルに明示的に含まれません。 -
EmbeddedResourceUseDependentUponConvention
プロパティは、プロジェクト ファイルでfalse
に設定されていません。 既定では、このプロパティはtrue
に設定されています。 詳細については、EmbeddedResourceUseDependentUponConventionを参照してください。
リソース ファイルが同じルート ファイル名のソース ファイル (.cs または .vb) と併置されている場合、ソース ファイルで定義されている最初の種類の完全な名前がマニフェスト ファイル名に使用されます。 たとえば、 MyNamespace.Form1
が Form1.csで定義された最初の型であり、 Form1.cs が Form1.resx と併置されている場合、そのリソース ファイルに対して生成されるマニフェスト名は MyNamespace.Form1.resources になります。
LogicalName メタデータ
リソース ファイルが、EmbeddedResource
メタデータを持つLogicalName
項目としてプロジェクト ファイルに明示的に含まれている場合、LogicalName
値がマニフェスト名として使用されます。
LogicalName
は、他のメタデータまたは設定よりも優先されます。
たとえば、次のプロジェクト ファイル スニペットで定義されているリソース ファイルのマニフェスト名は SomeName.resources です。
<EmbeddedResource Include="X.resx" LogicalName="SomeName.resources" />
-又は-
<EmbeddedResource Include="X.fr-FR.resx" LogicalName="SomeName.resources" />
注
LogicalName
が指定されていない場合、ファイル名に 2 つのドット (EmbeddedResource
) を持つ.
は機能しません。つまり、GetManifestResourceNames
はそのファイルを返しません。次の例は正しく動作します。
<EmbeddedResource Include="X.resx" />
次の例は機能しません。
<EmbeddedResource Include="X.fr-FR.resx" />
ManifestResourceName メタデータ
リソース ファイルがEmbeddedResource
メタデータを持つManifestResourceName
項目としてプロジェクト ファイルに明示的に含まれている場合 (およびLogicalName
が存在しない場合)、ファイル拡張子 ManifestResourceName
と組み合わせた値がマニフェスト ファイル名として使用されます。
たとえば、次のプロジェクト ファイル スニペットで定義されているリソース ファイルのマニフェスト名は SomeName.resources です。
<EmbeddedResource Include="X.resx" ManifestResourceName="SomeName" />
次のプロジェクト ファイル スニペットで定義されているリソース ファイルのマニフェスト名は SomeName です。.resourcesfr-FR。
<EmbeddedResource Include="X.fr-FR.resx" ManifestResourceName="SomeName.fr-FR" />
DependentUpon メタデータ
リソース ファイルがEmbeddedResource
メタデータを持つDependentUpon
項目としてプロジェクト ファイルに明示的に含まれている場合 (また、LogicalName
とManifestResourceName
が存在しない場合)、リソース マニフェスト ファイル名には、DependentUpon
によって定義されたソース ファイルの情報が使用されます。 具体的には、ソース ファイルで定義されている最初の型の名前は、次のようにマニフェスト名で使用されます: Namespace.Classname[。Culture].resources。
たとえば、次のプロジェクト ファイル スニペットで定義されているリソース ファイルのマニフェスト名は Namespace.Classname.resources です ( Namespace.Classname
は 、MyTypes.csで定義されている最初のクラスです)。
<EmbeddedResource Include="X.resx" DependentUpon="MyTypes.cs">
次のプロジェクト ファイル スニペットで定義されているリソース ファイルのマニフェスト名は Namespace.Classname です。.resourcesfr-FR ( Namespace.Classname
は 、MyTypes.csで定義されている最初のクラスです)。
<EmbeddedResource Include="X.fr-FR.resx" DependentUpon="MyTypes.cs">
EmbeddedResourceUseDependentUponConvention プロパティ
EmbeddedResourceUseDependentUponConvention
がプロジェクト ファイルでfalse
に設定されている場合、各リソース マニフェスト ファイル名は、プロジェクトのルート名前空間と、プロジェクト ルートから .resx ファイルへの相対パスに基づきます。 具体的には、生成されるリソース マニフェスト ファイル名は RootNamespace.RelativePathWithDotsForSlashes です。[Culture.]リソース。 これは、3.0 より前のバージョンの .NET Core でマニフェスト名を生成するために使用されるロジックでもあります。
注
-
RootNamespace
が定義されていない場合、既定値はプロジェクト名になります。 - プロジェクト ファイル内の
LogicalName
項目にManifestResourceName
、DependentUpon
、またはEmbeddedResource
メタデータが指定されている場合、この名前付け規則はそのリソース ファイルには適用されません。
こちらも参照ください
.NET