MSBuild가 .NET Core 프로젝트를 컴파일하면 .resx 파일 확장명이 있는 XML 리소스 파일이 이진 .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.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
값과 파일 확장자 .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[. Culture].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입니다.[ Culture.]리소스. 3.0 이전의 .NET Core 버전에서 매니페스트 이름을 생성하는 데 사용되는 논리이기도 합니다.
비고
- 정의되지 않은 경우
RootNamespace
기본값은 프로젝트 이름으로 설정됩니다. - 프로젝트 파일의 항목에 대해
LogicalName
,ManifestResourceName
, 또는DependentUpon
메타데이터가 지정된 경우, 이 명명 규칙은 해당 리소스 파일에 적용되지 않습니다.
참고하십시오
.NET