Имена файлов манифестов ресурсов
Когда MSBuild компилирует проект .NET Core, файлы ресурсов XML, имеющие расширение файла RESX, преобразуются в двоичные файлы RESOURCES. Двоичные файлы внедряются в выходные данные компилятора и могут быть считаны ResourceManager. В этой статье описывается, как MSBuild выбирает имя для каждого файла RESOURCES.
Совет
Если в файл проекта явно добавлен элемент ресурса, который также включен в глобальные элементы по умолчанию для .NET Core, возникнет ошибка сборки. Чтобы вручную включить файлы ресурсов в качестве элементов 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
не указан, тоEmbeddedResource
с двумя точками (.
) в имени файла не работает, а это означает, чтоGetManifestResourceNames
не возвращает этот файл.Следующий пример работает правильно:
<EmbeddedResource Include="X.resx" />
Следующий пример не работает:
<EmbeddedResource Include="X.fr-FR.resx" />
Метаданные ManifestResourceName
Если файл ресурсов явно включен в файл проекта как элемент EmbeddedResource
с метаданными ManifestResourceName
(и LogicalName
отсутствует), в качестве имени файла манифеста используется значение ManifestResourceName
в сочетании с расширением файла RESOURCES.
Например, имя манифеста для файла ресурсов, определенного в следующем фрагменте файла проекта, — 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
(а LogicalName
и ManifestResourceName
отсутствуют), то сведения из исходного файла, определенного DependentUpon
, используются для имени файла манифеста ресурса. В частности, имя первого типа, определенного в исходном файле, используется в имени манифеста следующим образом: Namespace.Classname[. Язык и региональные параметры].resources.
Например, имя манифеста для файла ресурсов, определенного в следующем фрагменте файла проекта, — Namespace.Classname.resources (где Namespace.Classname
является первым классом, который определен в MyTypes.cs).
<EmbeddedResource Include="X.resx" DependentUpon="MyTypes.cs">
Имя манифеста для файла ресурсов, определенного в следующем фрагменте файла проекта, — Namespace.Classname.fr-FR.resources (где Namespace.Classname
является первым классом, который определен в MyTypes.cs).
<EmbeddedResource Include="X.fr-FR.resx" DependentUpon="MyTypes.cs">
Свойство EmbeddedResourceUseDependentUponConvention
Если в файле проекта EmbeddedResourceUseDependentUponConvention
имеет значение false
, каждое имя файла манифеста ресурса будет основано на имени корневого пространства имен проекта и относительном пути к файлу RESX из корневого каталога проекта. В частности, имя файла манифеста созданного ресурса — RootNamespace.RelativePathWithDotsForSlashes.[ Культура.] ресурсы. Такая же логика применяется при генерировании имен манифестов в версиях .NET Core, предшествующих версии 3.0.
Примечание.
- Если параметр
RootNamespace
не определен, по умолчанию используется имя проекта. - Если для элемента
EmbeddedResource
в файле проекта заданы метаданныеLogicalName
,ManifestResourceName
илиDependentUpon
, это правило именования не применяется к этому файлу ресурсов.