ResourceManager ResourceManager ResourceManager ResourceManager Class

정의

런타임에 문화권별 리소스에 편리한 액세스를 제공하는 리소스 관리자를 나타냅니다.Represents a resource manager that provides convenient access to culture-specific resources at run time.

public ref class ResourceManager
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class ResourceManager
type ResourceManager = class
Public Class ResourceManager
상속
ResourceManagerResourceManagerResourceManagerResourceManager
파생
특성

예제

다음 예제에서는 주 어셈블리와 위성 어셈블리에서 문자열 리소스를 가져오는 명시적 culture 및 암시적 현재 UI 문화권을 사용 하는 방법에 설명 합니다.The following example demonstrates how to use an explicit culture and the implicit current UI culture to obtain string resources from a main assembly and a satellite assembly. 자세한 내용은 "디렉터리 위치에 대 한 위성 어셈블리 하지 설치에서 전역 어셈블리 캐시" 섹션을 참조 합니다 위성 어셈블리 만들기 항목입니다.For more information, see the "Directory Locations for Satellite Assemblies Not Installed in the Global Assembly Cache" section of the Creating Satellite Assemblies topic.

이 예제를 실행 합니다.To run this example:

  1. 앱 디렉터리에서 다음 리소스 문자열이 포함 된 rmc.txt 라는 파일을 만듭니다.In the app directory, create a file named rmc.txt that contains the following resource strings:

    
    day=Friday  
    year=2006  
    holiday="Cinco de Mayo"  
    
  2. 사용 된 리소스 파일 생성기 rmc.txt 입력된 파일에서 다음과 같이 rmc.resources 리소스 파일을 생성 하려면:Use the Resource File Generator to generate the rmc.resources resource file from the rmc.txt input file as follows:

    resgen rmc.txt  
    
  3. 앱 디렉터리의 하위 디렉터리를 만들고 "ES-MX" 이름을 합니다.Create a subdirectory of the app directory and name it "es-MX". 다음 세 단계에서 만든 위성 어셈블리의 문화권 이름입니다.This is the culture name of the satellite assembly that you will create in the next three steps.

  4. 다음 리소스 문자열을 포함 하는 ES-MX 디렉터리에서 rmc.es MX.txt 라는 파일을 만듭니다.Create a file named rmc.es-MX.txt in the es-MX directory that contains the following resource strings:

    
    day=Viernes  
    year=2006  
    holiday="Cinco de Mayo"  
    
  5. 사용 된 리소스 파일 생성기 rmc.es MX.txt 입력된 파일에서 다음과 같이 rmc.es MX.resources 리소스 파일을 생성 하려면:Use the Resource File Generator to generate the rmc.es-MX.resources resource file from the rmc.es-MX.txt input file as follows:

    resgen rmc.es-MX.txt  
    
  6. 이 예제에 대 한 filename rmc.vb 또는 rmc.cs 있다고 가정 합니다.Assume that the filename for this example is rmc.vb or rmc.cs. 다음 소스 코드 파일을 복사 합니다.Copy the following source code into a file. 그런 다음 컴파일하고 rmc.resources, 주 어셈블리 리소스 파일을 실행 가능한 어셈블리에 포함 합니다.Then compile it and embed the main assembly resource file, rmc.resources, in the executable assembly. Visual Basic 컴파일러를 사용 하는 경우 구문은 다음과 같습니다.If you are using the Visual Basic compiler, the syntax is:

    vbc rmc.vb /resource:rmc.resources  
    

    C# 컴파일러에 대 한 해당 구문은 다음과 같습니다.The corresponding syntax for the C# compiler is:

    csc /resource:rmc.resources rmc.cs  
    
  7. 사용 합니다 어셈블리 링커 위성 어셈블리를 만들 수 있습니다.Use the Assembly Linker to create a satellite assembly. 앱의 기본 이름 rmc 경우 위성 어셈블리 이름이 rmc.resources.dll 이어야 합니다.If the base name of the app is rmc, the satellite assembly name must be rmc.resources.dll. 위성 어셈블리에서 ES-MX 디렉터리에 만들어야 합니다.The satellite assembly should be created in the es-MX directory. 현재 디렉터리에서 ES-MX을 사용 하는 경우이 명령을 사용 합니다.If es-MX is the current directory, use this command:

    al /embed:rmc.es-MX.resources /c:es-MX /out:rmc.resources.dll   
    
  8. Rmc.exe를 가져오고 표시할 포함 된 리소스 문자열을 실행 합니다.Run rmc.exe to obtain and display the embedded resource strings.

using System;
using System.Resources;
using System.Reflection;
using System.Threading;
using System.Globalization;

class Example 
{
    public static void Main() 
    {
    string day;
    string year;
    string holiday;
    string celebrate = "{0} will occur on {1} in {2}.\n";

    // Create a resource manager. 
    ResourceManager rm = new ResourceManager("rmc", 
                             typeof(Example).Assembly);

    Console.WriteLine("Obtain resources using the current UI culture.");

    // Get the resource strings for the day, year, and holiday 
    // using the current UI culture. 
    day  = rm.GetString("day");
    year = rm.GetString("year");
    holiday = rm.GetString("holiday");
    Console.WriteLine(celebrate, holiday, day, year);

    // Obtain the es-MX culture.
    CultureInfo ci = new CultureInfo("es-MX");

    Console.WriteLine("Obtain resources using the es-MX culture.");

   // Get the resource strings for the day, year, and holiday 
   // using the specified culture. 
    day  = rm.GetString("day", ci);
    year = rm.GetString("year", ci);
    holiday = rm.GetString("holiday", ci);
// ---------------------------------------------------------------
// Alternatively, comment the preceding 3 code statements and 
// uncomment the following 4 code statements:
// ----------------------------------------------------------------
// Set the current UI culture to "es-MX" (Spanish-Mexico).
//    Thread.CurrentThread.CurrentUICulture = ci;

// Get the resource strings for the day, year, and holiday 
// using the current UI culture. Use those strings to 
// display a message. 
//    day  = rm.GetString("day");
//    year = rm.GetString("year");
//    holiday = rm.GetString("holiday");
// ---------------------------------------------------------------

// Regardless of the alternative that you choose, display a message 
// using the retrieved resource strings.
    Console.WriteLine(celebrate, holiday, day, year);
    }
}
/*
This example displays the following output:

   Obtain resources using the current UI culture.
   "5th of May" will occur on Friday in 2006.
   
   Obtain resources using the es-MX culture.
   "Cinco de Mayo" will occur on Viernes in 2006.
*/
Imports System.Resources
Imports System.Reflection
Imports System.Threading
Imports System.Globalization

Class Example
    Public Shared Sub Main() 
        Dim day As String
        Dim year As String
        Dim holiday As String
        Dim celebrate As String = "{0} will occur on {1} in {2}." & vbCrLf

        ' Create a resource manager. 
        Dim rm As New ResourceManager("rmc", GetType(Example).Assembly)

        Console.WriteLine("Obtain resources using the current UI culture.")

        ' Get the resource strings for the day, year, and holiday 
        ' using the current UI culture. 
        day = rm.GetString("day")
        year = rm.GetString("year")
        holiday = rm.GetString("holiday")
        Console.WriteLine(celebrate, holiday, day, year)

        ' Obtain the es-MX culture.
        Dim ci As New CultureInfo("es-MX")

        Console.WriteLine("Obtain resources using the es-MX culture.")

        ' Get the resource strings for the day, year, and holiday 
        ' using the es-MX culture.  
        day = rm.GetString("day", ci)
        year = rm.GetString("year", ci)
        holiday = rm.GetString("holiday", ci)

        ' ---------------------------------------------------------------
        ' Alternatively, comment the preceding 3 code statements and 
        ' uncomment the following 4 code statements:
        ' ----------------------------------------------------------------
        ' Set the current UI culture to "es-MX" (Spanish-Mexico).
        '    Thread.CurrentThread.CurrentUICulture = ci
        ' Get the resource strings for the day, year, and holiday 
        ' using the current UI culture. 
        '    day  = rm.GetString("day")
        '    year = rm.GetString("year")
        '    holiday = rm.GetString("holiday")
        ' ---------------------------------------------------------------

        ' Regardless of the alternative that you choose, display a message 
        ' using the retrieved resource strings.
        Console.WriteLine(celebrate, holiday, day, year)
    End Sub 
End Class
' This example displays the following output:
'Obtain resources using the current UI culture.
'"5th of May" will occur on Friday in 2006.
'
'Obtain resources using the es-MX culture.
'"Cinco de Mayo" will occur on Viernes in 2006.

설명

중요

신뢰할 수 없는 데이터로 이 클래스에서 메서드를 호출하는 것은 보안상 위험합니다.Calling methods from this class with untrusted data is a security risk. 신뢰할 수 있는 데이터로만 이 클래스에서 메서드를 호출하세요.Call the methods from this class only with trusted data. 자세한 내용은 데이터 유효성을 참조하세요.For more information, see Data Validation.

ResourceManager 클래스는 어셈블리에 포함 된 이진.resources 파일에서 또는 독립 실행형.resources 파일에서 리소스를 검색 합니다.The ResourceManager class retrieves resources from a binary .resources file that is embedded in an assembly or from a standalone .resources file. 앱 지역화 되었는지 및 지역화 된 리소스에 배포 된 경우 위성 어셈블리, 문화권 관련 리소스를 조회, 지역화 된 리소스 존재 하지 않는 리소스를 지 원하는 경우 리소스 대체를 제공 합니다. 직렬화입니다.If an app has been localized and localized resources have been deployed in satellite assemblies, it looks up culture-specific resources, provides resource fallback when a localized resource does not exist, and supports resource serialization.

만들기 및 데스크톱 앱의 리소스를 관리 하는 방법에 대 한 자세한 내용은 및 Windows 8.x 스토어Windows 8.x Store 앱, 다음 섹션을 참조 하세요.For more information about creating and managing resources in desktop apps and Windows 8.x 스토어Windows 8.x Store apps, see the following sections:

데스크톱 앱Desktop Apps

데스크톱 앱의 경우는 ResourceManager 이진 리소스 (.resources) 파일에서 리소스를 검색 하는 클래스입니다.For desktop apps, the ResourceManager class retrieves resources from binary resource (.resources) files. 일반적으로 언어 컴파일러 또는 어셈블리 링커 (AL.exe) 어셈블리에 이러한 리소스 파일을 포함 합니다.Typically, a language compiler or the Assembly Linker (AL.exe) embeds these resource files in an assembly. 사용할 수도 있습니다는 ResourceManager 를 호출 하 여 어셈블리에서 포함 되지 않은.resources 파일에서 직접 리소스를 검색 하는 개체는 CreateFileBasedResourceManager 메서드.You can also use a ResourceManager object to retrieve resources directly from a .resources file that is not embedded in an assembly, by calling the CreateFileBasedResourceManager method.

주의

ASP.NET 앱에서 독립 실행형.resources 파일을 사용 하는 XCOPY 배포가 중단 하 여 명시적으로 릴리스될 때까지 리소스가 잠겨 있기 때문에 ReleaseAllResources 메서드.Using standalone .resources files in an ASP.NET app will break XCOPY deployment, because the resources remain locked until they are explicitly released by the ReleaseAllResources method. ASP.NET 응용 프로그램을 사용 하 여 리소스를 배포 하려는 경우 위성 어셈블리에.resources 파일 컴파일해야 합니다.If you want to deploy resources with your ASP.NET apps, you should compile your .resources files into satellite assemblies.

리소스 기반 앱을 하나.resources 파일 없음 문화권별 리소스를 찾을 수 있습니다 하는 경우 해당 리소스가 사용 됩니다 기본 문화권의 리소스를 포함 합니다.In a resource-based app, one .resources file contains the resources of the default culture whose resources are used if no culture-specific resources can be found. 예를 들어 영어 (en) 앱의 기본 문화권을 사용 하는 경우에 영어 (미국) (영문) 또는 프랑스어 (프랑스) (FR) 등의 특정 문화권의 지역화 된 리소스를 찾을 수 없는 때마다 영어 언어 리소스가 사용 됩니다.For example, if an app's default culture is English (en), the English language resources are used whenever localized resources cannot be found for a specific culture, such as English (United States) (en-US) or French (France) (fr-FR). 일반적으로 기본 문화권의 리소스에 주 앱 어셈블리에 포함 되 고 다른 지역화 된 문화권에 대 한 리소스 위성 어셈블리에 포함 됩니다.Typically, the resources for the default culture are embedded in the main app assembly, and resources for other localized cultures are embedded in satellite assemblies. 위성 어셈블리는 리소스만 포함 됩니다.Satellite assemblies contain only resources. 확장의 주 어셈블리와 동일한 루트 파일 이름을 갖습니다. resources.dll 합니다.They have the same root file name as the main assembly and an extension of .resources.dll. 해당 어셈블리를 전역 어셈블리 캐시에 등록 되지 않은 앱에 대 한 위성 어셈블리는 이름이 어셈블리의 culture에 해당 하는 앱 하위 디렉터리에 저장 됩니다.For apps whose assemblies are not registered in the global assembly cache, satellite assemblies are stored in an app subdirectory whose name corresponds to the assembly's culture.

리소스 만들기Creating Resources

리소스 기반 앱을 개발할 때에 텍스트 파일 (.txt 또는.restext 확장명을 가진 파일) 또는 XML 파일 (.resx 확장명을 가진 파일)에서 리소스 정보를 저장 합니다.When you develop a resource-based app, you store resource information in text files (files that have a .txt or .restext extension) or XML files (files that have a .resx extension). 다음 텍스트 또는 XML 파일을 컴파일하는 리소스 파일 생성기 (Resgen.exe) 이진.resources 파일을 만듭니다.You then compile the text or XML files with the Resource File Generator (Resgen.exe) to create a binary .resources file. 그런 다음 결과.resources 파일 실행 파일 또는 라이브러리와 같은 컴파일러 옵션을 사용 하 여 포함할 수 있습니다 /resources 하거나 C# 및 Visual Basic 컴파일러에에서 포함할 수 위성 어셈블리를 사용 하 여에 대 한 합니다.You can then embed the resulting .resources file in an executable or library by using a compiler option such as /resources for the C# and Visual Basic compilers, or you can embed it in a satellite assembly by using the . Visual Studio 프로젝트에.resx 파일을 포함 하는 경우 Visual Studio 컴파일과 기본 포함을 처리 하 고 빌드 프로세스의 일부로 자동으로 지역화 된 리소스.If you include a .resx file in your Visual Studio project, Visual Studio handles the compilation and embedding of default and localized resources automatically as part of the build process.

이상적으로 앱을 만들 모든 언어에 대 한 리소스를 지 원하는 또는 최소한 각 언어의 의미 있는 하위 집합입니다.Ideally, you should create resources for every language your app supports, or at least for a meaningful subset of each language. 이진.resources 파일 이름은 명명 규칙을 따릅니다 basename. cultureName.resources, 여기서 basename 은 앱의 이름 또는 원하는 세부 수준에 따라 클래스의 이름입니다.The binary .resources file names follow the naming convention basename.cultureName.resources, where basename is the name of the app or the name of a class, depending on the level of detail you want. CultureInfo.Name 속성은 확인 데 cultureName합니다.The CultureInfo.Name property is used to determine cultureName. 앱의 기본 문화권에 대 한 리소스를 명명할 basename.resources입니다.A resource for the app's default culture should be named basename.resources.

예를 들어, 어셈블리에 기본 이름이 MyResources 리소스 파일에 여러 개의 리소스가 있습니다.For example, suppose that an assembly has several resources in a resource file that has the base name MyResources. 이러한 리소스 파일에는 일본 (일본어) 문화권의 경우 독일 문화권의 간단한 중국어 문화권에 대 한 MyResources.zh CHS.resources MyResources.de.resources MyResources.ja JP.resources 같은 이름을 사용 해야 합니다. 및 프랑스어 (벨기에) 문화권에 대 한 MyResources.fr BE.resources 합니다.These resource files should have names such as MyResources.ja-JP.resources for the Japan (Japanese) culture, MyResources.de.resources for the German culture, MyResources.zh-CHS.resources for the simplified Chinese culture, and MyResources.fr-BE.resources for the French (Belgium) culture. 기본 리소스 파일 MyResources.resources 이름을 지정 해야 합니다.The default resource file should be named MyResources.resources. 문화권 관련 리소스 파일은 일반적으로 각 문화권에 대 한 위성 어셈블리에 패키지 됩니다.The culture-specific resource files are commonly packaged in satellite assemblies for each culture. 기본 리소스 파일은 앱의 주 어셈블리에 포함 해야 합니다.The default resource file should be embedded in the app's main assembly.

어셈블리 링커 는 리소스를 전용으로 표시할 수 있지만 다른 어셈블리에서 액세스할 수 있도록 항상 public으로 표시 해야 합니다.Note that Assembly Linker allows resources to be marked as private, but you should always mark them as public so they can be accessed by other assemblies. (하므로 위성 어셈블리 코드가 없는 개인용으로 표시 되는 리소스 않습니다 임의 메커니즘을 통해 앱에 사용할 수 있습니다.)(Because a satellite assembly contains no code, resources that are marked as private are unavailable to your app through any mechanism.)

패키징 및 배포 리소스, 참조 문서를 만드는 방법에 대 한 자세한 내용은 리소스 파일 만들기하십시오 위성 어셈블리 만들기, 및 패키징 및 배포 리소스합니다.For more information about creating, packaging, and deploying resources, see the articles Creating Resource Files, Creating Satellite Assemblies, and Packaging and Deploying Resources.

ResourceManager 개체 인스턴스화Instantiating a ResourceManager Object

인스턴스화하는 ResourceManager 클래스 생성자 오버 로드 중 하나를 호출 하 여 포함 된.resources 파일에서 리소스를 검색 하는 개체입니다.You instantiate a ResourceManager object that retrieves resources from an embedded .resources file by calling one of its class constructor overloads. 이 밀접 하 게 결합 된 ResourceManager 특정.resources 파일 및 모든 관련 개체를 위성 어셈블리에에서.resources 파일을 지역화 합니다.This tightly couples a ResourceManager object with a particular .resources file and with any associated localized .resources files in satellite assemblies.

두 명의 가장 일반적으로 호출된 된 생성자는 다음과 같습니다.The two most commonly called constructors are:

  • ResourceManager(String, Assembly) 두 가지 제공 하는 정보에 따라 리소스 조회:.resources 파일 및 기본.resources 파일 상주 하는 어셈블리의 기본 이름입니다.ResourceManager(String, Assembly) looks up resources based on two pieces of information that you supply: the base name of the .resources file, and the assembly in which the default .resources file resides. 기본 이름을 해당 문화권 또는 확장 없이.resources 파일의 루트 이름과 네임 스페이스를 포함합니다.The base name includes the namespace and root name of the .resources file, without its culture or extension. 참고 일반적으로 명령줄에서 컴파일되는.resources 파일 Visual Studio 환경에서 작성 되는.resources 파일에서 수행 하는 반면 네임 스페이스 이름을 포함 하지 않습니다.Note that .resources files that are compiled from the command line typically do not include a namespace name, whereas .resources files that are created in the Visual Studio environment do. 예를 들어 MyCompany.StringResources.resources 라는 리소스 파일 및 ResourceManager 라는 정적 메서드를 생성자가 호출 Example.Main, 다음 코드를 인스턴스화하는 ResourceManager 에서 리소스를 검색할 수 있는 개체는. 리소스 파일:For example, if a resource file is named MyCompany.StringResources.resources and the ResourceManager constructor is called from a static method named Example.Main, the following code instantiates a ResourceManager object that can retrieve resources from the .resources file:

    ResourceManager rm = new ResourceManager("MyCompany.StringResources", 
                                             typeof(Example).Assembly);
    
    Dim rm As New ResourceManager("MyCompany.StringResources",
                                  GetType(Example).Assembly)
    
  • ResourceManager(Type) 형식 개체에서 정보를 기반으로 하는 위성 어셈블리에서 리소스를 조회 합니다.ResourceManager(Type) looks up resources in satellite assemblies based on information from a type object. 형식의 정규화 된 이름을 파일 이름 확장명 없이.resources 파일의 기본 이름에 해당합니다.The type's fully qualified name corresponds to the base name of the .resources file without its file name extension. Visual Studio 리소스 디자이너를 사용 하 여 만든 데스크톱 앱의 경우 Visual Studio는.resources 파일의 루트 이름과 같은 정규화 된 이름이 래퍼 클래스를 만듭니다.In desktop apps that are created by using the Visual Studio Resource Designer, Visual Studio creates a wrapper class whose fully qualified name is the same as the root name of the .resources file. 예를 들어 리소스 파일 MyCompany.StringResources.resources 라는 이며 라는 래퍼 클래스 MyCompany.StringResources, 다음 코드를 인스턴스화하는 ResourceManager .resources 파일에서 리소스를 검색할 수 있는 개체:For example, if a resource file is named MyCompany.StringResources.resources and there is a wrapper class named MyCompany.StringResources, the following code instantiates a ResourceManager object that can retrieve resources from the .resources file:

    ResourceManager rm = new ResourceManager(typeof(MyCompany.StringResources));
    
    Dim rm As New ResourceManager(GetType(MyCompany.StringResources))
    

생성자 호출을 만들고 올바른 적절 한 리소스를 찾을 수 없는 경우 ResourceManager 개체입니다.If the appropriate resources cannot be found, the constructor call creates a valid ResourceManager object. 그러나 리소스를 검색 하려고 throw를 MissingManifestResourceException 예외입니다.However, the attempt to retrieve a resource throws a MissingManifestResourceException exception. 예외 처리에 대 한 내용은 참조는 처리 MissingManifestResourceException 및 MissingSatelliteAssembly 예외 이 문서의 뒷부분에 나오는 섹션.For information about dealing with the exception, see the Handling MissingManifestResourceException and MissingSatelliteAssembly Exceptions section later in this article.

다음 예제에서는 인스턴스화하는 방법을 보여 줍니다는 ResourceManager 개체입니다.The following example shows how to instantiate a ResourceManager object. ShowTime.exe 라는 실행 파일에 대 한 소스 코드를 포함 합니다.It contains the source code for an executable named ShowTime.exe. 또한 단일 문자열 리소스를 포함 하는 Strings.txt 라는 텍스트 파일 TimeHeader:It also includes the following text file named Strings.txt that contains a single string resource, TimeHeader:

TimeHeader=The current time is  

리소스 파일을 생성 하 고 실행 파일에 포함 하는 배치 파일을 사용할 수 있습니다.You can use a batch file to generate the resource file and embed it into the executable. 다음은 C# 컴파일러를 사용 하 여 실행 파일을 생성 하도록 배치 파일이입니다.Here's the batch file to generate an executable by using the C# compiler:


resgen strings.txt  
csc ShowTime.cs /resource:strings.resources  

Visual Basic 컴파일러의 경우 다음 배치 파일을 사용할 수 있습니다.For the Visual Basic compiler, you can use the following batch file:


resgen strings.txt  
vbc ShowTime.vb /resource:strings.resources  
using System;
using System.Resources;

public class Example
{
   public static void Main()
   {
      ResourceManager rm = new ResourceManager("Strings", 
                               typeof(Example).Assembly);
      string timeString = rm.GetString("TimeHeader");
      Console.WriteLine("{0} {1:T}", timeString, DateTime.Now);   
   }
}
// The example displays output like the following:
//        The current time is 2:03:14 PM
Imports System.Resources

Module Example
   Public Sub Main()
      Dim rm As New ResourceManager("Strings", GetType(Example).Assembly)
      Dim timeString As String = rm.GetString("TimeHeader")
      Console.WriteLine("{0} {1:T}", timeString, Date.Now)   
   End Sub
End Module
' The example displays output similar to the following:
'       The current time is 2:03:14 PM

ResourceManager 및 문화권 관련 리소스ResourceManager and Culture-Specific Resources

문서에 설명 된 대로 현지화 된 앱을 배포 해야 하는 리소스를 필요로 리소스 패키징 및 배포합니다.A localized app requires resources to be deployed, as discussed in the article Packaging and Deploying Resources. 어셈블리를 제대로 구성 되어, 현재 스레드의 기준으로 검색할 리소스를 리소스 관리자 결정 Thread.CurrentUICulture 속성입니다.If the assemblies are properly configured, the resource manager determines which resources to retrieve based on the current thread's Thread.CurrentUICulture property. (속성 또한 반환 현재 스레드의 UI 문화권입니다.) 예를 들어, 앱을 사용 하 여 컴파일된 경우 영어 언어 리소스가 주 어셈블리에 두 위성 어셈블리의 프랑스어 및 러시아어 언어 리소스를 사용 하 여 기본 및 Thread.CurrentUICulture 속성이-FR로 설정 되어에서 프랑스어를 검색 하는 리소스 관리자 리소스입니다.(That property also returns the current thread's UI culture.) For example, if an app is compiled with default English language resources in the main assembly and with French and Russian language resources in two satellite assemblies, and the Thread.CurrentUICulture property is set to fr-FR, the resource manager retrieves the French resources.

설정할 수 있습니다는 CurrentUICulture 속성 명시적 또는 암시적으로 합니다.You can set the CurrentUICulture property explicitly or implicitly. 설정 방법을 결정 하는 방법을 ResourceManager 개체가 문화권을 기준으로 리소스를 검색 합니다.The way you set it determines how the ResourceManager object retrieves resources based on culture:

  • 명시적으로 설정 하는 경우는 Thread.CurrentUICulture 속성을 특정 문화권에 리소스 관리자는 항상 사용자의 브라우저 또는 운영 체제 언어에 관계 없이 해당 문화권에 대 한 리소스를 검색 합니다.If you explicitly set the Thread.CurrentUICulture property to a specific culture, the resource manager always retrieves the resources for that culture, regardless of the user's browser or operating system language. 기본 영어 리소스를 사용 하 여 컴파일되는 앱 및 영어 (미국), 프랑스어 (프랑스) 및 러시아어 (러시아)에 대 한 리소스를 포함 하는 위성 어셈블리를 세는 것이 좋습니다.Consider an app that is compiled with default English language resources and three satellite assemblies that contain resources for English (United States), French (France), and Russian (Russia). 경우는 CurrentUICulture FR-FR 속성는 ResourceManager 개체는 항상 프랑스어 (프랑스) 리소스를 검색, 시스템 언어가 프랑스어가 아닌 사용자의 운영 하는 경우에 합니다.If the CurrentUICulture property is set to fr-FR, the ResourceManager object always retrieves the French (France) resources, even if the user's operating system language is not French. 이것이 원하는 동작을 명시적으로 속성을 설정 하기 전에 있는지 확인 합니다.Make sure that this is the desired behavior before you set the property explicitly.

    ASP.NET 앱에서 설정 해야 합니다 Thread.CurrentUICulture 속성 명시적으로 가능성이 서버의 설정을 들어오는 클라이언트 요청 일치 하지 않기 때문입니다.In ASP.NET apps, you must set the Thread.CurrentUICulture property explicitly, because it is unlikely that the setting on the server will match incoming client requests. ASP.NET 앱을 설정할 수는 Thread.CurrentUICulture 속성 사용자의 브라우저를 명시적으로 허용 하는 언어로 합니다.An ASP.NET app can set the Thread.CurrentUICulture property explicitly to the user's browser accept language.

    명시적으로 설정 된 Thread.CurrentUICulture 속성은 해당 스레드에 대 한 현재 UI 문화권을 정의 합니다.Explicitly setting the Thread.CurrentUICulture property defines the current UI culture for that thread. 앱에서 스레드의 현재 UI 문화권에는 영향을 주지 않습니다.It does not affect the current UI culture of any other threads in an app.

  • 할당 하 여 응용 프로그램 도메인에서 모든 스레드의 UI 문화권을 설정할 수 있습니다는 CultureInfo 개체를 고정 문화권을 나타내는 CultureInfo.DefaultThreadCurrentUICulture 속성입니다.You can set the UI culture of all threads in an app domain by assigning a CultureInfo object that represents that culture to the static CultureInfo.DefaultThreadCurrentUICulture property.

  • 현재 UI 문화권을 명시적으로 설정 하지 않으면 및 현재 앱 도메인에 대 한 기본 문화권을 정의 하지 않으면 경우는 CultureInfo.CurrentUICulture 속성이 암시적으로 Windows GetUserDefaultUILanguage 함수입니다.If you do not explicitly set the current UI culture and you do not define a default culture for the current app domain, the CultureInfo.CurrentUICulture property is set implicitly by the Windows GetUserDefaultUILanguage function. 이 함수는 여는 인터페이스 MUI (다국어 사용자), 기본 언어를 설정 하려면 사용자 제공 됩니다.This function is provided by the Multilingual User Interface (MUI), which enables the user to set the default language. UI 언어 사용자가 설정 되어 있지 않으면, 운영 체제 리소스의 언어 시스템 설치 언어를 기본값으로 합니다.If the UI language is not set by the user, it defaults to the system-installed language, which is the language of operating system resources.

다음 간단한 "Hello world" 예제는 현재 UI 문화권을 명시적으로 설정합니다.The following simple "Hello world" example sets the current UI culture explicitly. 다음 세 가지 문화권의 리소스를 포함 합니다. 영어 (미국) 또는 en-us, 프랑스어 (프랑스) 또는 fr-fr, 러시아어 (러시아) 또는 기타 기능It contains resources for three cultures: English (United States) or en-US, French (France) or fr-FR, and Russian (Russia) or ru-RU. EN-US 리소스 Greetings.txt 라는 텍스트 파일에 포함 됩니다.The en-US resources are contained in a text file named Greetings.txt:

HelloString=Hello world!  

Greetings.fr 라는 텍스트 파일에 포함 된 FR-FR 리소스-FR.txt:The fr-FR resources are contained in a text file named Greetings.fr-FR.txt:

HelloString=Salut tout le monde!  

Greetings.ru 라는 텍스트 파일에 포함 된 RU-RU 리소스-RU.txt:The ru-RU resources are contained in a text file named Greetings.ru-RU.txt:

HelloString=Всем привет!  

예를 들어 (Visual Basic 버전 example.vb 라고 가정) 하거나 Example.cs C# 버전에 대 한 소스 코드는 다음과 같습니다.Here's the source code for the example (Example.vb for the Visual Basic version or Example.cs for the C# version):

using System;
using System.Globalization;
using System.Resources;
using System.Threading;

public class Example
{
   public static void Main()
   {
      // Create array of supported cultures
      string[] cultures = {"en-CA", "en-US", "fr-FR", "ru-RU" };
      Random rnd = new Random();
      int cultureNdx = rnd.Next(0, cultures.Length);
      CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture;
      ResourceManager rm = new ResourceManager("Greetings", typeof(Example).Assembly);
      try {
         CultureInfo newCulture = new CultureInfo(cultures[cultureNdx]);
         Thread.CurrentThread.CurrentCulture = newCulture;
         Thread.CurrentThread.CurrentUICulture = newCulture;
         string greeting = String.Format("The current culture is {0}.\n{1}",
                                         Thread.CurrentThread.CurrentUICulture.Name,
                                         rm.GetString("HelloString"));
         Console.WriteLine(greeting);
      }
      catch (CultureNotFoundException e) {
         Console.WriteLine("Unable to instantiate culture {0}", e.InvalidCultureName);
      }
      finally {
         Thread.CurrentThread.CurrentCulture = originalCulture;
         Thread.CurrentThread.CurrentUICulture = originalCulture;
      }
   }
}
// The example displays output like the following:
//       The current culture is ru-RU.
//       Всем привет!
Imports System.Globalization
Imports System.Resources
Imports System.Threading

Module Example
   Sub Main()
      ' Create array of supported cultures
      Dim cultures() As String = {"en-CA", "en-US", "fr-FR", "ru-RU" }
      Dim rnd As New Random()
      Dim cultureNdx As Integer = rnd.Next(0, cultures.Length)
      Dim originalCulture As CultureInfo = Thread.CurrentThread.CurrentCulture
      Dim rm As New ResourceManager("Greetings", GetType(Example).Assembly)
      Try
         Dim newCulture As New CultureInfo(cultures(cultureNdx))
         Thread.CurrentThread.CurrentCulture = newCulture
         Thread.CurrentThread.CurrentUICulture = newCulture
         Dim greeting As String = String.Format("The current culture is {0}.{1}{2}",
                                                Thread.CurrentThread.CurrentUICulture.Name,
                                                vbCrLf, rm.GetString("HelloString"))

         Console.WriteLine(greeting)
      Catch e As CultureNotFoundException
         Console.WriteLine("Unable to instantiate culture {0}", e.InvalidCultureName)
      Finally
         Thread.CurrentThread.CurrentCulture = originalCulture
         Thread.CurrentThread.CurrentUICulture = originalCulture
      End Try
   End Sub
End Module
' The example displays output like the following:
'       The current culture is ru-RU.
'       Всем привет!

이 예제를 컴파일하려면 다음 명령을 포함 하 고 명령 프롬프트에서 실행 하는 배치 (.bat) 파일을 만듭니다.To compile this example, create a batch (.bat) file that contains the following commands and run it from the command prompt. C#을 사용 하는 경우 지정 csc of vbc 하 고 Example.cs 대신 Example.vb합니다.If you're using C#, specify csc instead of vbc and Example.cs instead of Example.vb.

resgen Greetings.txt   
vbc Example.vb /resource:Greetings.resources  

resgen Greetings.fr-FR.txt  
Md fr-FR  
al /embed:Greetings.fr-FR.resources /culture:fr-FR /out:fr-FR\Example.resources.dll  

resgen Greetings.ru-RU.txt  
Md ru-RU  
al /embed:Greetings.ru-RU.resources /culture:ru-RU /out:ru-RU\Example.resources.dll  

리소스 검색Retrieving Resources

호출 된 GetObject(String)GetString(String) 특정 리소스에 액세스 하는 방법입니다.You call the GetObject(String) and GetString(String) methods to access a specific resource. 호출할 수도 있습니다는 GetStream(String) 바이트 배열 형식의 문자열이 아닌 리소스를 검색 하는 방법입니다.You can also call the GetStream(String) method to retrieve non-string resources as a byte array. 기본적으로 이러한 메서드 반환는 리소스를 번역 하는 앱에서 리소스를 호출 하는 스레드의 현재 UI 문화권에 의해 결정 된 문화권에 대 한 합니다.By default, in an app that has localized resources, these methods return the resource for the culture determined by the current UI culture of the thread that made the call. 이전 섹션을 참조 하세요 ResourceManager 및 문화권별 리소스, 스레드의 현재 UI 문화권을 정의 하는 방법에 대 한 자세한 내용은 합니다.See the previous section, ResourceManager and Culture-Specific Resources, for more information about how the current UI culture of a thread is defined. 리소스 관리자는 현재 스레드의 UI 문화권에 대 한 리소스를 찾을 수 없습니다, 하는 경우 지정된 된 리소스를 검색할 대체 (fallback) 프로세스를 사용 합니다.If the resource manager cannot find the resource for the current thread's UI culture, it uses a fallback process to retrieve the specified resource. 리소스 관리자에서 모든 지역화 된 리소스를 찾을 수 없으면 기본 문화권의 리소스를 사용 합니다.If the resource manager cannot find any localized resources, it uses the resources of the default culture. 리소스 대체 규칙에 대 한 자세한 내용은 문서의 "리소스 대체 프로세스" 섹션을 참조 하세요 리소스 패키징 및 배포합니다.For more information about resource fallback rules, see the "Resource Fallback Process" section of the article Packaging and Deploying Resources.

참고

.Resources 파일에 지정 된 경우는 ResourceManager 클래스 생성자를 찾을 수 없습니다, 리소스를 검색 하려는 시도가 발생 한 MissingManifestResourceException 또는 MissingSatelliteAssemblyException 예외입니다.If the .resources file specified in the ResourceManager class constructor cannot be found, the attempt to retrieve a resource throws a MissingManifestResourceException or MissingSatelliteAssemblyException exception. 예외 처리에 대 한 내용은 참조는 처리 MissingManifestResourceException 및 MissingSatelliteAssemblyException 예외 이 항목의 뒷부분에 나오는 섹션.For information about dealing with the exception, see the Handling MissingManifestResourceException and MissingSatelliteAssemblyException Exceptions section later in this topic.

다음 예제에서는 GetString 문화권별 리소스를 검색 하는 방법입니다.The following example uses the GetString method to retrieve culture-specific resources. 영어 (en), 프랑스어 (프랑스) (FR-FR) 및 러시아어 (러시아) (RU-RU).txt 파일에서 컴파일된 리소스 이루어져 문화권입니다.It consists of resources compiled from .txt files for the English (en), French (France) (fr-FR), and Russian (Russia) (ru-RU) cultures. 이 예제에서는 영어 (미국), 프랑스어 (프랑스), 러시아어 (러시아) 및 스웨덴어 (스웨덴)를 현재 문화권 및 현재 UI 문화권을 변경합니다.The example changes the current culture and current UI culture to English (United States), French (France), Russian (Russia), and Swedish (Sweden). 그런 다음 호출 하 여 GetString 현재 일 및 월을 함께 표시 하는 지역화 된 문자열을 검색 하는 방법.It then calls the GetString method to retrieve the localized string, which it displays along with the current day and month. 현재 UI 문화권 경우 스웨덴어 (스웨덴) 제외 하 고 적절 한 지역화 된 문자열 출력에 표시 되는지 확인 합니다.Notice that the output displays the appropriate localized string except when the current UI culture is Swedish (Sweden). 스웨덴어 언어 리소스를 사용할 수 없으므로 앱 영어는 기본 문화권의 리소스를 대신 사용 합니다.Because Swedish language resources are unavailable, the app instead uses the resources of the default culture, which is English.

예제에는 다음 표에 나열 된 텍스트 기반 리소스 파일이 필요 합니다.The example requires the text-based resource files listed in following table. 이라는 단일 문자열 리소스를 각각 DateStart합니다.Each has a single string resource named DateStart.

cultureCulture 파일 이름File name 리소스 이름Resource name 리소스 값Resource value
en-USen-US DateStrings.txtDateStrings.txt DateStart 오늘이Today is
fr-FRfr-FR DateStrings.fr-FR.txtDateStrings.fr-FR.txt DateStart Aujourd'hui, c'est leAujourd'hui, c'est le
ru-RUru-RU DateStrings.ru-RU.txtDateStrings.ru-RU.txt DateStart СЕГОДНЯСегодня

예를 들어 (Visual Basic 버전에 대 한 ShowDate.vb) 하거나 ShowDate.cs C# 버전의 코드에 대 한 소스 코드는 다음과 같습니다.Here's the source code for the example (ShowDate.vb for the Visual Basic version or ShowDate.cs for the C# version of the code).

using System;
using System.Globalization;
using System.Resources;
using System.Threading;

[assembly:NeutralResourcesLanguage("en")]

public class Example
{
   public static void Main()
   {
      string[] cultureNames = { "en-US", "fr-FR", "ru-RU", "sv-SE" };
      ResourceManager rm = new ResourceManager("DateStrings",
                                               typeof(Example).Assembly);
      
      foreach (var cultureName in cultureNames) {
         CultureInfo culture = CultureInfo.CreateSpecificCulture(cultureName);
         Thread.CurrentThread.CurrentCulture = culture; 
         Thread.CurrentThread.CurrentUICulture = culture;

         Console.WriteLine("Current UI Culture: {0}", 
                           CultureInfo.CurrentUICulture.Name);
         string dateString = rm.GetString("DateStart");
         Console.WriteLine("{0} {1:M}.\n", dateString, DateTime.Now);                           
      }                                           
   }
}
// The example displays output similar to the following:
//       Current UI Culture: en-US
//       Today is February 03.
//       
//       Current UI Culture: fr-FR
//       Aujourd'hui, c'est le 3 février
//       
//       Current UI Culture: ru-RU
//       Сегодня февраля 03.
//       
//       Current UI Culture: sv-SE
//       Today is den 3 februari.
Imports System.Globalization
Imports System.Resources
Imports System.Threading

<Assembly:NeutralResourcesLanguage("en")>

Module Example
   Public Sub Main()
      Dim cultureNames() As String = { "en-US", "fr-FR", "ru-RU", "sv-SE" }
      Dim rm As New ResourceManager("DateStrings",
                                    GetType(Example).Assembly)
      
      For Each cultureName In cultureNames
         Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture(cultureName)
         Thread.CurrentThread.CurrentCulture = culture 
         Thread.CurrentThread.CurrentUICulture = culture

         Console.WriteLine("Current UI Culture: {0}", 
                           CultureInfo.CurrentUICulture.Name)
         Dim dateString As String = rm.GetString("DateStart")
         Console.WriteLine("{0} {1:M}.", dateString, Date.Now)                           
         Console.WriteLine()
      Next                                           
   End Sub
End Module
' The example displays output similar to the following:
'       Current UI Culture: en-US
'       Today is February 03.
'       
'       Current UI Culture: fr-FR
'       Aujourd'hui, c'est le 3 février
'       
'       Current UI Culture: ru-RU
'       Сегодня февраля 03.
'       
'       Current UI Culture: sv-SE
'       Today is den 3 februari.

이 예제를 컴파일하려면 다음 명령을 포함 하 고 명령 프롬프트에서 실행 하는 배치 파일을 만듭니다.To compile this example, create a batch file that contains the following commands and run it from the command prompt. C#을 사용 하는 경우 지정 csc of vbc 하 고 showdate.cs 대신 showdate.vb합니다.If you're using C#, specify csc instead of vbc and showdate.cs instead of showdate.vb.


resgen DateStrings.txt  
vbc showdate.vb /resource:DateStrings.resources  

md fr-FR  
resgen DateStrings.fr-FR.txt  
al /out:fr-FR\Showdate.resources.dll /culture:fr-FR /embed:DateStrings.fr-FR.resources   

md ru-RU  
resgen DateStrings.ru-RU.txt  
al /out:ru-RU\Showdate.resources.dll /culture:ru-RU /embed:DateStrings.ru-RU.resources  

현재 UI 문화권이 아닌 특정 문화권의 리소스를 검색 하려면 두 가지가 있습니다.There are two ways to retrieve the resources of a specific culture other than the current UI culture:

  • 호출할 수 있습니다 합니다 GetString(String, CultureInfo), GetObject(String, CultureInfo), 또는 GetStream(String, CultureInfo) 특정 문화권의 리소스를 검색 하는 방법입니다.You can call the GetString(String, CultureInfo), GetObject(String, CultureInfo), or GetStream(String, CultureInfo) method to retrieve a resource for a specific culture. 지역화 된 리소스를 찾을 수 없는 경우 리소스 관리자 리소스 대체 프로세스를 사용 하 여 적절 한 리소스를 찾기.If a localized resource cannot be found, the resource manager uses the resource fallback process to locate an appropriate resource.

  • 호출할 수 있습니다 합니다 GetResourceSet 메서드는 ResourceSet 특정 문화권에 대 한 리소스를 나타내는 개체입니다.You can call the GetResourceSet method to obtain a ResourceSet object that represents the resources for a particular culture. 메서드 호출에서 지역화 된 리소스를 찾을 수 없는 경우 리소스 관리자 부모 문화권에 대 한 프로브 인지 또는 인지 간단히로 되돌아가기 기본 문화권의 리소스를 확인할 수 있습니다.In the method call, you can determine whether the resource manager probes for parent cultures if it is unable to find localized resources, or whether it simply falls back to the resources of the default culture. 사용할 수 있습니다는 ResourceSet 메서드 (해당 문화권에 대 한 지역화 된) 리소스 이름별로 액세스 또는 열거 집합의 리소스입니다.You can then use the ResourceSet methods to access the resources (localized for that culture) by name, or to enumerate the resources in the set.

MissingManifestResourceException 및 MissingSatelliteAssemblyException 예외 처리Handling MissingManifestResourceException and MissingSatelliteAssemblyException Exceptions

특정 리소스를 검색 하려는 경우 resource manager에 정의 된 리소스 및 없는 기본 문화권 중 하나 또는 기본 문화권의 리소스를 찾을 수 없습니다를 throw 하는 리소스 관리자를 찾을 수 없습니다는 MissingManifestResourceException 예외 경우 해당 주 어셈블리에 리소스를 찾으려고 시도 또는 MissingSatelliteAssemblyException 위성 어셈블리에서 리소스를 찾을 수 있다고 예상 하는 경우.If you try to retrieve a specific resource, but the resource manager cannot find that resource and either no default culture has been defined or the resources of the default culture cannot be located, the resource manager throws a MissingManifestResourceException exception if it expects to find the resources in the main assembly or a MissingSatelliteAssemblyException if it expects to find the resources in a satellite assembly. 와 같은 리소스 검색 메서드에 호출 하면 예외가 throw 되는 참고 GetString 또는 GetObject, 하지 인스턴스화하는 경우 및을 ResourceManager 개체입니다.Note that the exception is thrown when you call a resource retrieval method such as GetString or GetObject, and not when you instantiate a ResourceManager object.

예외는 일반적으로 다음과 같은 경우 throw 됩니다.The exception is typically thrown under the following conditions:

  • 적절 한 리소스 파일 또는 위성 어셈블리는 존재 하지 않습니다.The appropriate resource file or satellite assembly does not exist. 리소스 관리자를 주 앱 어셈블리에 포함할 응용 프로그램의 기본 리소스에 필요한 경우 나타나지 않습니다.If the resource manager expects the app's default resources to be embedded in the main app assembly, they are absent. 경우는 NeutralResourcesLanguageAttribute 앱의 기본 리소스 위성 어셈블리에 있는, 어셈블리를 찾을 수 없는 특성을 나타냅니다.If the NeutralResourcesLanguageAttribute attribute indicates that the app's default resources reside in a satellite assembly, that assembly cannot be found. 앱을 컴파일할 때에 리소스는 주 어셈블리에 포함 됩니다는 또는 필요한 위성 어셈블리를 생성 하 고 적절 하 게 이름이 있는지 확인 합니다.When you compile your app, make sure that resources are embedded in the main assembly or that the necessary satellite assembly is generated and is named appropriately. 이름 형식 이어야 합니다. appName. resources.dll을 하며 리소스가 포함 된 문화권의 이름을 딴 디렉터리에 배치 해야 합니다.Its name should take the form appName.resources.dll, and it should be located in a directory named after the culture whose resources it contains.

  • 앱은 기본 또는 중립 문화권 정의 없습니다.Your app doesn't have a default or neutral culture defined. 추가 된 NeutralResourcesLanguageAttribute 특성을 소스 코드 파일 또는 프로젝트 정보 파일 (Visual Basic 앱의 AssemblyInfo.vb) 또는 C# 앱에 대 한 AssemblyInfo.cs 파일에 있습니다.Add the NeutralResourcesLanguageAttribute attribute to a source code file or to the project information file (AssemblyInfo.vb for a Visual Basic app or AssemblyInfo.cs for a C# app) file.

  • 합니다 baseName 의 매개 변수는 ResourceManager(String, Assembly) 생성자.resources 파일의 이름을 지정 하지 않습니다.The baseName parameter in the ResourceManager(String, Assembly) constructor does not specify the name of a .resources file. 리소스 파일의 정규화 된 네임 스페이스만 해당 파일 이름 확장명이 아닌 이름이 포함 해야 합니다.The name should include the resource file's fully qualified namespace but not its file name extension. 일반적으로 Visual Studio에서 만든 리소스 파일 네임 스페이스 이름을 포함 하지만 생성 되 고 명령 프롬프트에서 컴파일된 리소스 파일에는 않습니다.Typically, resource files that are created in Visual Studio include namespace names, but resource files that are created and compiled at the command prompt do not. 컴파일하고 다음 유틸리티를 실행 하 여 포함 된.resources 파일의 이름을 확인할 수 있습니다.You can determine the names of embedded .resources files by compiling and running the following utility. 주 어셈블리 또는 위성 어셈블리는 명령줄 매개 변수로 이름을 허용 하는 콘솔 앱입니다.This is a console app that accepts the name of a main assembly or satellite assembly as a command-line parameter. 로 제공 해야 하는 문자열을 표시 합니다 baseName 매개 변수 리소스 관리자 리소스를 올바르게 식별할 수 있도록 합니다.It displays the strings that should be provided as the baseName parameter so that the resource manager can correctly identify the resource.

    using System;
    using System.IO;
    using System.Reflection;
    using System.Resources;
    
    public class Example
    {
       public static void Main()
       {
          if (Environment.GetCommandLineArgs().Length == 1) { 
             Console.WriteLine("No filename.");
             return;
          }
          
          string filename = Environment.GetCommandLineArgs()[1].Trim();
          // Check whether the file exists.
          if (! File.Exists(filename)) {
             Console.WriteLine("{0} does not exist.", filename);
             return;
          }   
          
          // Try to load the assembly.
          Assembly assem = Assembly.LoadFrom(filename);
          Console.WriteLine("File: {0}", filename);
             
          // Enumerate the resource files.
          string[] resNames = assem.GetManifestResourceNames();
          if (resNames.Length == 0)
             Console.WriteLine("   No resources found.");
    
          foreach (var resName in resNames)
             Console.WriteLine("   Resource: {0}", resName.Replace(".resources", ""));
    
          Console.WriteLine();
       }
    }
    
    Imports System.IO
    Imports System.Reflection
    Imports System.Resources
    
    Module Example
       Public Sub Main()
          If Environment.GetCommandLineArgs.Length = 1 Then 
             Console.WriteLine("No filename.")
             Exit Sub
          End If
          Dim filename As String = Environment.GetCommandLineArgs(1).Trim()
          ' Check whether the file exists.
          If Not File.Exists(filename) Then
             Console.WriteLine("{0} does not exist.", filename)
             Exit Sub
          End If   
          
          ' Try to load the assembly.
          Dim assem As Assembly = Assembly.LoadFrom(filename)
          Console.WriteLine("File: {0}", filename)
             
          ' Enumerate the resource files.
          Dim resNames() As String = assem.GetManifestResourceNames()
          If resNames.Length = 0 Then
             Console.WriteLine("   No resources found.")
          End If
          For Each resName In resNames
             Console.WriteLine("   Resource: {0}", resName.Replace(".resources", ""))
          Next
          Console.WriteLine()
       End Sub
    End Module
    

응용 프로그램의 현재 문화권을 명시적으로 변경 하는 경우 기억해 야 리소스 관리자의 값을 기반으로 리소스 집합을 검색 하는 CultureInfo.CurrentUICulture 속성인 아니라는 CultureInfo.CurrentCulture 속성입니다.If you are changing the current culture of your application explicitly, you should also remember that the resource manager retrieves a resource set based on the value of the CultureInfo.CurrentUICulture property, and not the CultureInfo.CurrentCulture property. 일반적으로 하나의 값을 변경한 경우 변경 해야 다른 합니다.Typically, if you change one value, you should also change the other.

리소스 버전 관리Resource Versioning

앱의 기본 리소스를 포함 하는 주 어셈블리를 응용 프로그램의 위성 어셈블리에서 별도 이므로 위성 어셈블리를 다시 배포할 필요 없이 주 어셈블리의 새 버전을 릴리스할 수 있습니다.Because the main assembly that contains an app's default resources is separate from the app's satellite assemblies, you can release a new version of your main assembly without redeploying the satellite assemblies. 사용 된 SatelliteContractVersionAttribute 기존 위성 어셈블리를 사용 하지 배포 하는 것에 주 어셈블리의 새 버전을 사용 하 여 리소스 관리자에 지시 하는 특성You use the SatelliteContractVersionAttribute attribute to use existing satellite assemblies and instruct the resource manager not to redeploy them with a new version of your main assembly,

위성 어셈블리의 버전 관리 지원에 대 한 자세한 내용은 문서를 참조 하세요 리소스 검색합니다.For more information about versioning support for satellite assemblies, see the article Retrieving Resources.

<satelliteassemblies > 구성 파일 노드<satelliteassemblies> Configuration File Node

배포 되 고 웹 사이트 (HREF.exe 파일)에서 실행 되는 실행 파일에 대 한는 ResourceManager 개체는 위성 어셈블리에 대 한 앱의 성능이 저하 될 수 있는 웹을 통해 프로브 수 있습니다.For executables that are deployed and run from a website (HREF .exe files), the ResourceManager object may probe for satellite assemblies over the web, which can hurt your app's performance. 성능 문제를 제거 하려면 앱을 배포한 경우 위성 어셈블리에이 검색을 제한할 수 있습니다.To eliminate the performance problem, you can limit this probing to the satellite assemblies that you have deployed with your app. 만든이 위해을 <satelliteassemblies> 지정 하 고 앱에 대 한 문화권의 특정 집합을 배포 하려면 앱의 구성 파일에서 노드를 ResourceManager 개체 노드에 있는 나열 되지 않은 모든 문화권에 대 한 프로브 하지 않아야 합니다.To do this, you create a <satelliteassemblies> node in your app's configuration file to specify that you have deployed a specific set of cultures for your app, and that the ResourceManager object should not try to probe for any culture that is not listed in that node.

참고

만드는 기본 대안을 <satelliteassemblies> 노드를 사용 하는 ClickOnce 배포 매니페스트 기능.The preferred alternative to creating a <satelliteassemblies> node is to use the ClickOnce Deployment Manifest feature.

앱의 구성 파일에서 섹션을 다음과 비슷하게 만듭니다.In your app's configuration file, create a section similar to the following:

<?xml version ="1.0"?>  
<configuration>  
    <satelliteassemblies>  
        <assembly name="MainAssemblyName, Version=versionNumber, Culture=neutral, PublicKeyToken=null|yourPublicKeyToken">  
            <culture>cultureName1</culture>  
            <culture>cultureName2</culture>  
            <culture>cultureName3</culture>  
        </assembly>  
    </satelliteassemblies>  
</configuration>  

이 구성 정보를 다음과 같이 편집 합니다.Edit this configuration information as follows:

  • 하나 이상을 지정 <assembly> 노드를 배포 하는 각 주 어셈블리에 대 한 각 노드의 정규화 된 어셈블리 이름을 지정 하는 위치입니다.Specify one or more <assembly> nodes for each main assembly that you deploy, where each node specifies a fully qualified assembly name. 대신 주 어셈블리의 이름을 지정 MainAssemblyName를 지정 합니다 Version, PublicKeyToken, 및 Culture 주 어셈블리에 해당 하는 값을 특성입니다.Specify the name of your main assembly in place of MainAssemblyName, and specify the Version, PublicKeyToken, and Culture attribute values that correspond to your main assembly.

    에 대 한는 Version 특성을 어셈블리의 버전 번호를 지정 합니다.For the Version attribute, specify the version number of your assembly. 예를 들어, 첫 번째 릴리스에서 어셈블리의 1.0.0.0 버전 번호를 수 있습니다.For example, the first release of your assembly might be version number 1.0.0.0.

    에 대 한 합니다 PublicKeyToken 특성에 키워드를 지정 null 강력한 이름의 어셈블리를 서명 되지 않은 또는 어셈블리에 서명한 경우 공개 키 토큰을 지정 하는 경우.For the PublicKeyToken attribute, specify the keyword null if you have not signed your assembly with a strong name, or specify your public key token if you have signed your assembly.

    에 대 한 합니다 Culture 특성에 키워드를 지정 합니다 neutral 주 어셈블리를 지정 하 고 발생 하는 ResourceManager 에 나열 된 문화권에 대해서만 검색 하는 클래스는 <culture> 노드.For the Culture attribute, specify the keyword neutral to designate the main assembly and cause the ResourceManager class to probe only for the cultures listed in the <culture> nodes.

    정규화 된 어셈블리 이름에 대 한 자세한 내용은 문서 참조 어셈블리 이름합니다.For more information about fully qualified assembly names, see the article Assembly Names. 강력한 이름의 어셈블리에 대 한 자세한 내용은 문서를 참조 하세요 강력한 어셈블리 만들기 및 사용합니다.For more information about strong-named assemblies, see the article Creating and Using Strong-Named Assemblies.

  • 하나 이상을 지정 <culture> "FR-FR"와 같은 특정 문화권 이름, 또는 중립 문화권 이름을 "fr" 등을 사용 하 여 노드.Specify one or more <culture> nodes with a specific culture name, such as "fr-FR", or a neutral culture name, such as "fr".

아래 나열 되지 않은 어셈블리에 대 한 리소스가 필요한 경우는 <satelliteassemblies> 노드를 ResourceManager 표준 검색 규칙을 사용 하 여 문화권에 대 한 프로브 클래스.If resources are needed for any assembly not listed under the <satelliteassemblies> node, the ResourceManager class probes for cultures using standard probing rules.

Windows 8.x 스토어Windows 8.x Store 응용 프로그램Apps

중요

하지만 합니다 ResourceManager 클래스에서 지원 됩니다 Windows 8.x 스토어Windows 8.x Store 앱 권장 하지는 않습니다 사용 합니다.Although the ResourceManager class is supported in Windows 8.x 스토어Windows 8.x Store apps, we do not recommend its use. 이 클래스를 사용 하 여 개발 하는 경우에 이식 가능한 클래스 라이브러리Portable Class Library 사용 하 여 사용할 수 있는 프로젝트 Windows 8.x 스토어Windows 8.x Store 앱.Use this class only when you develop 이식 가능한 클래스 라이브러리Portable Class Library projects that can be used with Windows 8.x 스토어Windows 8.x Store apps. 리소스를 검색할 Windows 8.x 스토어Windows 8.x Store 앱을 사용 합니다 Windows.ApplicationModel.Resources.ResourceLoader 클래스를 대신 합니다.To retrieve resources from Windows 8.x 스토어Windows 8.x Store apps, use the Windows.ApplicationModel.Resources.ResourceLoader class instead.

에 대 한 Windows 8.x 스토어Windows 8.x Store 앱을 ResourceManager 클래스 패키지 리소스 인덱스 (PRI) 파일에서 리소스를 검색 합니다.For Windows 8.x 스토어Windows 8.x Store apps, the ResourceManager class retrieves resources from package resource index (PRI) files. 모두 기본 문화권 및 리소스를 포함 하는 단일 PRI 파일 (응용 프로그램 패키지 PRI 파일) 문화권을 지역화 합니다.A single PRI file (the application package PRI file) contains the resources for both the default culture and any localized cultures. MakePRI 유틸리티를 사용 하 여 XML 리소스 (.resw) 형식으로 된 하나 이상의 리소스 파일에서 PRI 파일을 만듭니다.You use the MakePRI utility to create a PRI file from one or more resource files that are in XML resource (.resw) format. Visual Studio 프로젝트에 포함 된 리소스에 대 한 Visual Studio 만들고 PRI 파일을 자동으로 패키징하는 과정을 처리 합니다.For resources that are included in a Visual Studio project, Visual Studio handles the process of creating and packaging the PRI file automatically. 그런 다음.NET Framework를 사용 하 여 ResourceManager 앱 또는 라이브러리의 리소스에 액세스 하는 클래스입니다.You can then use the .NET Framework ResourceManager class to access the app's or library's resources.

인스턴스화할 수 있습니다는 ResourceManager 개체는 Windows 8.x 스토어Windows 8.x Store 데스크톱 앱에 대해 수행 하는 동일한 방식에서으로 앱.You can instantiate a ResourceManager object for a Windows 8.x 스토어Windows 8.x Store app in the same way that you do for a desktop app.

특정 문화권에 대 한 리소스를 검색할 리소스의 이름을 전달 하 여 액세스할 수 있습니다는 GetString(String) 메서드.You can then access the resources for a particular culture by passing the name of the resource to be retrieved to the GetString(String) method. 기본적으로이 메서드를 호출 하는 스레드의 현재 UI 문화권에 의해 결정 된 문화권에 대 한 리소스를 반환 합니다.By default, this method returns the resource for the culture determined by the current UI culture of the thread that made the call. 리소스의 이름을 전달 하 여 특정 문화권의 리소스를 검색할 수도 있습니다와 CultureInfo 인 리소스를 검색할 문화권을 나타내는 개체를 GetString(String, CultureInfo) 메서드.You can also retrieve the resources for a specific culture by passing the name of the resource and a CultureInfo object that represents the culture whose resource is to be retrieved to the GetString(String, CultureInfo) method. 현재 UI 문화권 또는 지정된 된 문화권에 대 한 리소스를 찾을 수 없는 경우 리소스 관리자 UI 언어 대체 (fallback) 목록 적합 한 리소스를 찾는 데 사용 합니다.If the resource for the current UI culture or the specified culture cannot be found, the resource manager uses a UI language fallback list to locate a suitable resource.

생성자

ResourceManager() ResourceManager() ResourceManager() ResourceManager()

기본값을 사용하여 ResourceManager 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the ResourceManager class with default values.

ResourceManager(String, Assembly) ResourceManager(String, Assembly) ResourceManager(String, Assembly) ResourceManager(String, Assembly)

지정된 어셈블리에서 지정된 루트 이름에서 파생된 파일에 포함된 리소스를 찾는 ResourceManager 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the ResourceManager class that looks up resources contained in files with the specified root name in the given assembly.

ResourceManager(String, Assembly, Type) ResourceManager(String, Assembly, Type) ResourceManager(String, Assembly, Type) ResourceManager(String, Assembly, Type)

지정된 어셈블리에서 지정된 루트 이름의 파일에 포함된 리소스를 찾는 데 지정된 ResourceManager 클래스를 사용하는 ResourceSet 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the ResourceManager class that uses a specified ResourceSet class to look up resources contained in files with the specified root name in the given assembly.

ResourceManager(Type) ResourceManager(Type) ResourceManager(Type) ResourceManager(Type)

지정된 형색 개체의 정보를 기초로 위성 어셈블리에서 리소스를 찾는 ResourceManager 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the ResourceManager class that looks up resources in satellite assemblies based on information from the specified type object.

필드

BaseNameField BaseNameField BaseNameField BaseNameField

ResourceManager에서 리소스를 검색하는 리소스 파일의 루트 이름을 지정합니다.Specifies the root name of the resource files that the ResourceManager searches for resources.

HeaderVersionNumber HeaderVersionNumber HeaderVersionNumber HeaderVersionNumber

ResourceManager의 현재 구현에서 해석하고 생성할 수 있는 리소스 파일 헤더의 버전을 지정합니다.Specifies the version of resource file headers that the current implementation of ResourceManager can interpret and produce.

MagicNumber MagicNumber MagicNumber MagicNumber

리소스 파일을 식별하는 데 사용되는 숫자를 유지합니다.Holds the number used to identify resource files.

MainAssembly MainAssembly MainAssembly MainAssembly

리소스를 포함한 주 어셈블리를 지정합니다.Specifies the main assembly that contains the resources.

ResourceSets ResourceSets ResourceSets ResourceSets

문화권에서 Hashtable 개체로의 매핑을 반환하는 ResourceSet이 들어 있습니다.Contains a Hashtable that returns a mapping from cultures to ResourceSet objects.

속성

BaseName BaseName BaseName BaseName

ResourceManager에서 리소스를 검색하는 리소스 파일의 루트 이름을 가져옵니다.Gets the root name of the resource files that the ResourceManager searches for resources.

FallbackLocation FallbackLocation FallbackLocation FallbackLocation

기본 대체(fallback) 리소스를 검색할 위치를 가져오거나 설정합니다.Gets or sets the location from which to retrieve default fallback resources.

IgnoreCase IgnoreCase IgnoreCase IgnoreCase

리소스 관리자가 GetString(String)GetObject(String) 메서드에서 대/소문자를 구분하지 않고 리소스를 조회할 수 있는지 여부를 나타내는 값을 가져오거나 설정합니다.Gets or sets a value that indicates whether the resource manager allows case-insensitive resource lookups in the GetString(String) and GetObject(String) methods.

ResourceSetType ResourceSetType ResourceSetType ResourceSetType

리소스 관리자가 ResourceSet 개체를 생성하는 데 사용하는 리소스 집합 개체의 형식을 가져옵니다.Gets the type of the resource set object that the resource manager uses to construct a ResourceSet object.

메서드

CreateFileBasedResourceManager(String, String, Type) CreateFileBasedResourceManager(String, String, Type) CreateFileBasedResourceManager(String, String, Type) CreateFileBasedResourceManager(String, String, Type)

리소스에 대한 어셈블리 매니페스트 대신 특정 디렉터리를 검색하는 ResourceManager 개체를 반환합니다.Returns a ResourceManager object that searches a specific directory instead of an assembly manifest for resources.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(Inherited from Object)
GetNeutralResourcesLanguage(Assembly) GetNeutralResourcesLanguage(Assembly) GetNeutralResourcesLanguage(Assembly) GetNeutralResourcesLanguage(Assembly)

지정된 어셈블리에서 NeutralResourcesLanguageAttribute 특성의 값을 검색하여 주 어셈블리의 기본 리소스에 대한 문화권별 정보를 반환합니다.Returns culture-specific information for the main assembly's default resources by retrieving the value of the NeutralResourcesLanguageAttribute attribute on a specified assembly.

GetObject(String) GetObject(String) GetObject(String) GetObject(String)

지정된 문자열이 아닌 리소스의 값을 반환합니다.Returns the value of the specified non-string resource.

GetObject(String, CultureInfo) GetObject(String, CultureInfo) GetObject(String, CultureInfo) GetObject(String, CultureInfo)

지정된 문화권에 대해 지역화된 비문자열 리소스의 값을 가져옵니다.Gets the value of the specified non-string resource localized for the specified culture.

GetResourceFileName(CultureInfo) GetResourceFileName(CultureInfo) GetResourceFileName(CultureInfo) GetResourceFileName(CultureInfo)

지정된 CultureInfo 개체에 대한 리소스 파일 이름을 생성합니다.Generates the name of the resource file for the given CultureInfo object.

GetResourceSet(CultureInfo, Boolean, Boolean) GetResourceSet(CultureInfo, Boolean, Boolean) GetResourceSet(CultureInfo, Boolean, Boolean) GetResourceSet(CultureInfo, Boolean, Boolean)

특정 문화에 대해 설정된 리소스를 검색합니다.Retrieves the resource set for a particular culture.

GetSatelliteContractVersion(Assembly) GetSatelliteContractVersion(Assembly) GetSatelliteContractVersion(Assembly) GetSatelliteContractVersion(Assembly)

지정된 어셈블리의 SatelliteContractVersionAttribute 특성으로 지정된 버전을 반환합니다.Returns the version specified by the SatelliteContractVersionAttribute attribute in the given assembly.

GetStream(String) GetStream(String) GetStream(String) GetStream(String)

관리되지 않는 메모리 스트림 개체에서 지정된 리소스를 반환합니다.Returns an unmanaged memory stream object from the specified resource.

GetStream(String, CultureInfo) GetStream(String, CultureInfo) GetStream(String, CultureInfo) GetStream(String, CultureInfo)

지정된 문화권을 사용하여 지정된 리소스에서 관리되지 않은 메모리 스트림 개체를 반환합니다.Returns an unmanaged memory stream object from the specified resource, using the specified culture.

GetString(String) GetString(String) GetString(String) GetString(String)

지정된 문자열 리소스의 값을 반환합니다.Returns the value of the specified string resource.

GetString(String, CultureInfo) GetString(String, CultureInfo) GetString(String, CultureInfo) GetString(String, CultureInfo)

지정된 문화권에 대해 지역화된 문자열 리소스의 값을 반환합니다.Returns the value of the string resource localized for the specified culture.

GetType() GetType() GetType() GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(Inherited from Object)
InternalGetResourceSet(CultureInfo, Boolean, Boolean) InternalGetResourceSet(CultureInfo, Boolean, Boolean) InternalGetResourceSet(CultureInfo, Boolean, Boolean) InternalGetResourceSet(CultureInfo, Boolean, Boolean)

리소스 집합을 찾는 구현을 제공합니다.Provides the implementation for finding a resource set.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(Inherited from Object)
ReleaseAllResources() ReleaseAllResources() ReleaseAllResources() ReleaseAllResources()

리소스 담당자에게 모든 Close() 개체에 있는 ResourceSet 메서드를 호출하고 모든 리소스를 해제하도록 알립니다.Tells the resource manager to call the Close() method on all ResourceSet objects and release all resources.

ToString() ToString() ToString() ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(Inherited from Object)

적용 대상

스레드 보안

이 형식은 스레드로부터 안전합니다.This type is thread safe.

추가 정보