共用方式為


資源指令清單檔案的命名方式

當 MSBuild 編譯 .NET Core 專案時,擴展名為 .resx 的 XML 資源文件會轉換成二進位 .resources 檔案。 二進位檔會內嵌到編譯器的輸出中,並可由ResourceManager讀取。 本文說明 MSBuild 如何為每個 .resources 檔案選擇名稱。

小提示

如果您明確將資源項目新增至專案檔案,而且它也包含在 .NET Core 的預設包含模式中,您會收到建置錯誤。 若要手動將資源檔當作EmbeddedResource項目包含,請將EnableDefaultEmbeddedResourceItems屬性設為 false。

默認名稱

在 .NET Core 3.0 和更新版本中,符合下列兩個條件時,會使用資源指令清單的默認名稱:

  • 資源檔未明確包含在專案檔中,作為 EmbeddedResource 項目檔案具有 LogicalNameManifestResourceNameDependentUpon 中任一原數據。
  • 屬性 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,其中包含兩個點(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。fr-FR.resources

<EmbeddedResource Include="X.fr-FR.resx" ManifestResourceName="SomeName.fr-FR" />

DependentUpon 元資料

如果專案檔中明確將資源檔作為帶有 EmbeddedResource 元數據的 DependentUpon 專案項目(且 LogicalNameManifestResourceName 均不存在),則使用 DependentUpon 所定義的來源檔案的資訊來命名資源清單檔案。 具體來說,原始程式檔中定義之第一個類型的名稱會用於指令清單名稱中,如下所示: Namespace.Classname[。Culture].resources

例如,下列項目檔代碼段中所定義之資源檔的指令清單名稱是 Namespace.Classname.resources (其中 Namespace.ClassnameMyTypes.cs中定義的第一個類別)。

<EmbeddedResource Include="X.resx" DependentUpon="MyTypes.cs">

下列項目檔代碼段中定義之資源檔的指令清單名稱是 Namespace.Classname。fr-FR.resources (其中 Namespace.ClassnameMyTypes.cs 中定義的第一個類別)。

<EmbeddedResource Include="X.fr-FR.resx" DependentUpon="MyTypes.cs">

EmbeddedResourceUseDependentUponConvention 屬性

如果在專案檔中將 EmbeddedResourceUseDependentUponConvention 設定為 false,那麼每個資源清單檔的名稱會根據專案的根命名空間,以及從專案根目錄到 .resx 檔案的相對路徑來命名。 更具體來說,生成的資源清單檔名為 RootNamespace.RelativePathWithDotsForSlashes。[Culture.]resources。 這也是在 3.0 之前的 .NET Core 版本中產生指令清單名稱的邏輯。

備註

  • 如果未 RootNamespace 定義,則會預設為項目名稱。
  • 如果在項目檔中的 LogicalName 項目指定了 ManifestResourceNameDependentUponEmbeddedResource 元數據,則此命名規則不會套用至該資源檔。

另請參閱