Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Gdy program MSBuild kompiluje projekt .NET Core, pliki zasobów XML, które mają rozszerzenie pliku resx , są konwertowane na pliki binarne .resources . Pliki binarne są osadzone w danych wyjściowych kompilatora i mogą być odczytywane przez element ResourceManager. W tym artykule opisano, jak program MSBuild wybiera nazwę dla każdego pliku resources .
Wskazówka
Jeśli jawnie dodasz element zasobu do pliku projektu i jest on również dołączony za pomocą domyślnych wzorców include dla .NET Core, pojawi się błąd kompilacji. Aby ręcznie dodać pliki zasobów jako EmbeddedResource
elementy, ustaw właściwość EnableDefaultEmbeddedResourceItems
na false.
Nazwa domyślna
W programie .NET Core 3.0 lub nowszym jest używana domyślna nazwa manifestu zasobu, gdy zostaną spełnione oba następujące warunki:
- Plik zasobu nie jest jawnie dołączany do pliku projektu jako element
EmbeddedResource
z metadanymiLogicalName
,ManifestResourceName
lubDependentUpon
. - Właściwość
EmbeddedResourceUseDependentUponConvention
nie jest ustawiona nafalse
w pliku projektu. Domyślnie wartość tej właściwości totrue
. Aby uzyskać więcej informacji, zobacz EmbeddedResourceUseDependentUponConvention.
Jeśli plik zasobu jest kolokowany z plikiem źródłowym (.cs lub .vb) tej samej nazwy pliku głównego, pełna nazwa pierwszego typu zdefiniowanego w pliku źródłowym jest używana dla nazwy pliku manifestu. Jeśli na przykład MyNamespace.Form1
jest pierwszym typem zdefiniowanym w Form1.cs, a Form1.cs znajduje się w tym samym miejscu co Form1.resx, nazwa manifestu wygenerowana dla tego pliku zasobów to MyNamespace.Form1.resources.
Metadane nazwy logicznej
Jeśli plik zasobu jest jawnie uwzględniony w pliku projektu jako elementem EmbeddedResource
z metadanymi LogicalName
, wartość LogicalName
jest używana jako nazwa manifestu.
LogicalName
ma pierwszeństwo przed innymi metadanymi lub ustawieniem.
Na przykład nazwa manifestu pliku zasobu zdefiniowanego w poniższym fragmencie pliku projektu to SomeName.resources.
<EmbeddedResource Include="X.resx" LogicalName="SomeName.resources" />
— lub —
<EmbeddedResource Include="X.fr-FR.resx" LogicalName="SomeName.resources" />
Uwaga / Notatka
Jeśli
LogicalName
nie zostanie określony, elementEmbeddedResource
z dwoma kropkami (.
) w nazwie pliku nie działa poprawnie, co oznacza, żeGetManifestResourceNames
nie zwróci tego pliku.Poniższy przykład działa poprawnie:
<EmbeddedResource Include="X.resx" />
Poniższy przykład nie działa:
<EmbeddedResource Include="X.fr-FR.resx" />
Metadane ManifestResourceName
Jeśli plik zasobu jest jawnie dołączany do pliku projektu jako EmbeddedResource
element z ManifestResourceName
metadanymi (i LogicalName
jest nieobecny), ManifestResourceName
wartość w połączeniu z rozszerzeniem pliku resources jest używana jako nazwa pliku manifestu.
Na przykład nazwa manifestu pliku zasobu zdefiniowanego w poniższym fragmencie pliku projektu to SomeName.resources.
<EmbeddedResource Include="X.resx" ManifestResourceName="SomeName" />
Nazwa manifestu pliku zasobu zdefiniowanego w poniższym fragmencie pliku projektu to SomeName.fr-FR.resources.
<EmbeddedResource Include="X.fr-FR.resx" ManifestResourceName="SomeName.fr-FR" />
Metadane zależne od
Jeśli plik zasobów jest jawnie dołączony do pliku projektu jako element typu EmbeddedResource
z metadanymi DependentUpon
(i jeśli LogicalName
i ManifestResourceName
są nieobecne), nazwa pliku manifestu zasobów jest tworzona w oparciu o informacje z pliku źródłowego zdefiniowanego przez DependentUpon
. W szczególności nazwa pierwszego typu zdefiniowanego w pliku źródłowym jest używana w nazwie manifestu w następujący sposób: Namespace.Classname[. Culture].resources.
Na przykład nazwa manifestu pliku zasobu zdefiniowanego w poniższym fragmencie pliku projektu to Namespace.Classname.resources (gdzie Namespace.Classname
jest pierwszą klasą zdefiniowaną w MyTypes.cs).
<EmbeddedResource Include="X.resx" DependentUpon="MyTypes.cs">
Nazwa manifestu pliku zasobu zdefiniowanego w poniższym fragmencie pliku projektu to Namespace.Classname.fr-FR.resources (gdzie Namespace.Classname
jest pierwszą klasą zdefiniowaną w MyTypes.cs).
<EmbeddedResource Include="X.fr-FR.resx" DependentUpon="MyTypes.cs">
Właściwość EmbeddedResourceUseDependentUponConvention
Jeśli EmbeddedResourceUseDependentUponConvention
jest ustawiony na false
w pliku projektu, każda nazwa pliku manifestu zasobów jest oparta na głównej przestrzeni nazw projektu oraz na względnej ścieżce od katalogu głównego projektu do pliku .resx. Dokładniej mówiąc, wygenerowany plik manifestu zasobu to RootNamespace.RelativePathWithDotsForSlashes.[ Kultura.]zasoby. Jest to również logika używana do generowania nazw manifestów w wersjach platformy .NET Core wcześniejszych niż 3.0.
Uwaga / Notatka
- Jeśli
RootNamespace
nie jest zdefiniowana, wartość domyślna to nazwa projektu. - Jeśli
LogicalName
metadane,ManifestResourceName
lubDependentUpon
metadane zostaną określone dlaEmbeddedResource
elementu w pliku projektu, ta reguła nazewnictwa nie obowiązuje dla tego konkretnego pliku zasobów.