次の方法で共有


リソース マニフェスト ファイルの名前付け方法

MSBuild が .NET Core プロジェクトをコンパイルすると、 .resx ファイル拡張子を持つ XML リソース ファイルがバイナリ .resources ファイルに変換されます。 バイナリ ファイルはコンパイラの出力に埋め込まれており、 ResourceManagerで読み取ることができます。 この記事では、MSBuild で各 .resources ファイルの名前を選択する方法について説明します。

ヒント

プロジェクト ファイルにリソース項目を明示的に追加し、. NET Core の既定のインクルード glob にも含まれている場合は、ビルド エラーが発生します。 リソース ファイルを EmbeddedResource 項目として手動で含めるには、 EnableDefaultEmbeddedResourceItems プロパティを false に設定します。

既定の名前

.NET Core 3.0 以降では、次の両方の条件が満たされている場合、リソース マニフェストの既定の名前が使用されます。

  • リソース ファイルは、EmbeddedResourceLogicalName、またはManifestResourceNameメタデータを含むDependentUpon項目としてプロジェクト ファイルに明示的に含まれません。
  • EmbeddedResourceUseDependentUponConvention プロパティは、プロジェクト ファイルでfalseに設定されていません。 既定では、このプロパティは trueに設定されています。 詳細については、EmbeddedResourceUseDependentUponConventionを参照してください。

リソース ファイルが同じルート ファイル名のソース ファイル (.cs または .vb) と併置されている場合、ソース ファイルで定義されている最初の種類の完全な名前がマニフェスト ファイル名に使用されます。 たとえば、 MyNamespace.Form1Form1.csで定義された最初の型であり、 Form1.csForm1.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項目としてプロジェクト ファイルに明示的に含まれている場合 (また、LogicalNameManifestResourceNameが存在しない場合)、リソース マニフェスト ファイル名には、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項目にManifestResourceNameDependentUpon、またはEmbeddedResourceメタデータが指定されている場合、この名前付け規則はそのリソース ファイルには適用されません。

こちらも参照ください