/clr(공용 언어 런타임 컴파일)/clr (Common Language Runtime Compilation)

애플리케이션 및 구성 요소가 CLR(공용 언어 런타임)의 기능을 사용할 수 있게 합니다.Enables applications and components to use features from the common language runtime (CLR).

구문Syntax

/clr[ : options]/clr[:options]

인수Arguments

optionsoptions
다음 스위치가 하나 이상 쉼표로 구분되어 있습니다.One or more of the following switches, comma-separated.

  • 없음none

    옵션이 없으면 /clr은 애플리케이션에 대한 메타데이터를 만듭니다.With no options, /clr creates metadata for the application. 메타데이터는 다른 CLR 애플리케이션에서 사용될 수 있으며 애플리케이션이 다른 CLR 구성 요소의 메타데이터에 있는 형식과 데이터를 사용할 수 있게 합니다.The metadata can be consumed by other CLR applications, and enables the application to consume types and data in the metadata of other CLR components. 자세한 정보는 혼합형(네이티브 및 관리) 어셈블리를 참조하세요.For more information, see Mixed (Native and Managed) Assemblies.

  • purepure

    /clr:pure는 사용되지 않습니다./clr:pure is deprecated. 이 옵션은 Visual Studio 2017 이상에서 제거되었습니다.The option is removed in Visual Studio 2017 and later. C#에 대한 순수형 MSIL이어야 하는 코드를 포팅하는 것이 좋습니다.We recommend that you port code that must be pure MSIL to C#.

  • safesafe

    /clr:safe는 사용되지 않습니다./clr:safe is deprecated. 이 옵션은 Visual Studio 2017 이상에서 제거되었습니다.The option is removed in Visual Studio 2017 and later. C#에 대한 안전 MSIL이어야 하는 코드를 포팅하는 것이 좋습니다.We recommend that you port code that must be safe MSIL to C#.

  • noAssemblynoAssembly

    /clr:noAssembly는 사용되지 않습니다./clr:noAssembly is deprecated. 대신 /LN (Create MSIL Module) 를 사용하세요.Use /LN (Create MSIL Module) instead.

    어셈블리 매니페스트를 출력 파일에 삽입하지 않도록 지정합니다.Specifies that an assembly manifest should not be inserted into the output file. 기본적으로 noAssembly 옵션은 적용되지 않습니다.By default, the noAssembly option is not in effect.

    매니페스트에 어셈블리 메타데이터가 없는 관리되는 프로그램을 모듈이라고 합니다.A managed program that does not have assembly metadata in the manifest is known as a module. noAssembly 옵션은 모듈을 생성하는 데만 사용할 수 있습니다.The noAssembly option can be used only to produce a module. /c/clr:noAssembly를 사용하여 컴파일하는 경우 링커 단계에서 /NOASSEMBLY 옵션을 지정하여 모듈을 만듭니다.If you compile by using /c and /clr:noAssembly, then specify the /NOASSEMBLY option in the linker phase to create a module.

    Visual Studio 2005 이전은 /clr:noAssembly/LD가 필요합니다.Before Visual Studio 2005, /clr:noAssembly required /LD. /clr:noAssembly 를 지정할 때 /LD가 암시됩니다./LD is now implied when you specify /clr:noAssembly.

  • initialAppDomaininitialAppDomain

    CLR 버전 1에서 Visual C++ 애플리케이션을 실행할 수 있게 합니다.Enables a Visual C++ application to run on version 1 of the CLR. initialAppDomain 을 사용하여 컴파일된 애플리케이션은 CLR 버전 1에서 지원되지 않으므로 ASP.NET을 사용하는 애플리케이션에서 사용하면 안됩니다.An application that is compiled by using initialAppDomain should not be used by an application that uses ASP.NET because it is not supported in version 1 of the CLR.

  • nostdlibnostdlib

    기본 \clr 디렉터리를 무시하도록 컴파일러에 지시합니다.Instructs the compiler to ignore the default \clr directory. System.dll과 같은 DLL의 여러 버전을 포함하는 경우 컴파일러에서 오류가 발생합니다.The compiler produces errors if you are including multiple versions of a DLL such as System.dll. 이 옵션을 사용하면 컴파일하는 동안 사용할 특정 프레임워크를 지정할 수 있습니다.Using this option lets you specify the specific framework to use during compilation.

주의Remarks

관리 코드는 CLR에서 검사 및 관리할 수 있는 코드입니다.Managed code is code that can be inspected and managed by the CLR. 관리 코드는 관리되는 개체에 액세스할 수 있습니다.Managed code can access managed objects. 자세한 내용은 /clr Restrictions을 참조하십시오.For more information, see /clr Restrictions.

관리되는 형식을 정의 및 사용하는 애플리케이션을 개발하는 방법에 대한 자세한 내용은 Component Extensions for Runtime Platforms.For information about how to develop applications that define and consume managed types, see Component Extensions for Runtime Platforms.

/clr 을 사용하여 컴파일된 애플리케이션은 관리되는 데이터를 포함할 수도 있고, 포함하지 않을 수도 있습니다.An application compiled by using /clr may or may not contain managed data.

관리되는 애플리케이션에서 디버깅을 사용하도록 설정하려면 /ASSEMBLYDEBUG(DebuggableAttribute 추가)를 참조하세요.To enable debugging on a managed application, see /ASSEMBLYDEBUG (Add DebuggableAttribute).

CLR 형식만 가비지 수집 힙에 인스턴스화됩니다.Only CLR types will be instantiated on the garbage-collected heap. 자세한 내용은 클래스 및 구조체를 참조하세요.For more information, see Classes and Structs. 함수를 네이티브 코드로 컴파일하려면 unmanaged pragma를 사용합니다.To compile a function to native code, use the unmanaged pragma. 자세한 내용은 관리, 비관리를 참조하세요.For more information, see managed, unmanaged.

기본적으로 /clr 은 적용되지 않습니다.By default, /clr is not in effect. /clr 이 적용되는 경우 /MD 도 적용됩니다.When /clr is in effect, /MD is also in effect. 자세한 내용은 /MD, /MT, /LD(런타임 라이브러리 사용)를 참조하세요.For more information, see /MD, /MT, /LD (Use Run-Time Library). /MD 는 표준 헤더(.h) 파일에서 동적으로 연결된 다중 스레드 버전의 런타임 루틴이 선택되도록 합니다./MD ensures that the dynamically linked, multithreaded versions of the runtime routines are selected from the standard header (.h) files. CLR 가비지 수집기는 보조 스레드에서 종료자를 실행하므로 관리되는 프로그래밍에 다중 스레딩이 필요합니다.Multithreading is required for managed programming because the CLR garbage collector runs finalizers in an auxiliary thread.

/c를 사용하여 컴파일하는 경우 /CLRIMAGETYPE을 사용하여 결과 출력 파일의 CLR 형식을 지정할 수 있습니다.If you compile by using /c, you can specify the CLR type of the resulting output file with /CLRIMAGETYPE.

/clr/EHa를 암시하며, 다른 /EH 옵션은 /clr에 대해 지원되지 않습니다./clr implies /EHa, and no other /EH options are supported for /clr. 자세한 내용은 /EH(예외 처리 모델)를 참조하세요.For more information, see /EH (Exception Handling Model).

파일의 CLR 이미지 형식을 결정하는 방법에 대한 자세한 내용은 /CLRHEADER를 참조하세요.For information about how to determine the CLR image type of a file, see /CLRHEADER.

링커의 지정된 호출에 전달되는 모든 모듈은 동일한 런타임 라이브러리 컴파일러 옵션( /MD or /LD)을 사용하여 컴파일해야 합니다.All modules passed to a given invocation of the linker must be compiled by using the same run-time library compiler option (/MD or /LD).

어셈블리에 리소스를 포함하려면 /ASSEMBLYRESOURCE 링커 옵션을 사용합니다.Use the /ASSEMBLYRESOURCE linker option to embed a resource in an assembly. /DELAYSIGN, /KEYCONTAINER/KEYFILE 링커 옵션을 사용하여 어셈블리를 만드는 방법을 사용자 지정할 수도 있습니다./DELAYSIGN, /KEYCONTAINER, and /KEYFILE linker options also let you customize how an assembly is created.

/clr 을 사용하는 경우 _MANAGED 기호가 1로 정의됩니다.When /clr is used, the _MANAGED symbol is defined to be 1. 자세한 내용은 Predefined Macros을 참조하십시오.For more information, see Predefined Macros.

네이티브 개체 파일의 전역 변수가 먼저 초기화된 다음(실행 파일이 DLL인 경우 DllMain 중에) 관리되는 섹션의 전역 변수가 초기화됩니다(관리 코드가 실행되기 전에).The global variables in a native object file are initialized first (during DllMain if the executable is a DLL), and then the global variables in the managed section are initialized (before any managed code is run). #pragma init_seg는 관리되는 범주와 관리되지 않는 범주의 초기화 순서에만 영향을 줍니다.#pragma init_seg only affects the order of initialization in the managed and unmanaged categories.

메타데이터 및 명명되지 않은 클래스Metadata and Unnamed Classes

명명되지 않은 클래스는 $UnnamedClass$crc-of-current-file-name$index$와 같이 이름이 지정된 메타데이터에 나타납니다. 여기서 index 는 컴파일할 때 이름이 지정되지 않은 클래스의 순차적 개수입니다.Unnamed classes will appear in metadata named as follows: $UnnamedClass$crc-of-current-file-name$index$, where index is a sequential count of the unnamed classes in the compilation. 예를 들어 다음 코드 샘플은 메타데이터에 명명되지 않은 클래스를 생성합니다.For example, the following code sample generates an unnamed class in metadata.

// clr_unnamed_class.cpp
// compile by using: /clr /LD
class {} x;

메타데이터를 보려면 Ildasm.exe를 사용합니다.Use ildasm.exe to view metadata.

참고 항목See also

MSVC 컴파일러 옵션MSVC Compiler Options
MSVC 컴파일러 명령줄 구문MSVC Compiler Command-Line Syntax