/clr (공용 언어 런타임 컴파일)

애플리케이션 및 구성 요소가 CLR(공용 언어 런타임)의 기능을 사용할 수 있도록 하고 C++/CLI 컴파일을 사용하도록 설정합니다.

구문

/clr[:옵션]

인수

options
다음 쉼표로 구분된 인수 중 하나 이상입니다.

  • 없음

    옵션 /clr 없이 구성 요소에 대한 메타데이터를 만듭니다. 메타데이터는 다른 CLR 애플리케이션에서 사용할 수 있으며 구성 요소가 다른 CLR 구성 요소의 메타데이터에서 형식 및 데이터를 사용할 수 있도록 합니다. 자세한 정보는 혼합형(네이티브 및 관리) 어셈블리를 참조하세요.

  • netcore

    Visual Studio 2019 버전 16.4부터 사용할 수 있으며, /clr:netcore 최신 플랫폼 간 .NET Framework(.NET Core라고도 함)를 사용하여 구성 요소에 대한 메타데이터 및 코드를 만듭니다. 메타데이터는 다른 .NET Core 애플리케이션에서 사용할 수 있습니다. 또한 이 옵션을 사용하면 구성 요소가 다른 .NET Core 구성 요소의 메타데이터에서 형식 및 데이터를 사용할 수 있습니다.

  • nostdlib

    컴파일러에 기본 \clr 디렉터리를 무시하도록 지시합니다. 컴파일러는 System.dll 같은 여러 버전의 DLL을 포함하는 경우 오류를 생성합니다. 이 옵션을 사용하면 컴파일 중에 사용할 특정 프레임워크를 지정할 수 있습니다.

  • pure

    /clr:pure 는 더 이상 사용되지 않습니다. 이 옵션은 Visual Studio 2017 이상에서 제거되었습니다. C#에 대한 순수형 MSIL이어야 하는 코드를 포팅하는 것이 좋습니다.

  • safe

    /clr:safe 는 더 이상 사용되지 않습니다. 이 옵션은 Visual Studio 2017 이상에서 제거되었습니다. C#에 대한 안전 MSIL이어야 하는 코드를 포팅하는 것이 좋습니다.

  • noAssembly

    /clr:noAssembly 는 더 이상 사용되지 않습니다. 대신 (MSIL 모듈 만들기)를 사용합니다/LN.

    출력 파일에 어셈블리 매니페스트를 삽입하지 않도록 컴파일러에 지시합니다. 기본적으로 이 noAssembly 옵션은 적용되지 않습니다.

    매니페스트에 어셈블리 메타데이터가 없는 관리되는 프로그램을 모듈이라고 합니다. 이 noAssembly 옵션은 모듈을 생성하는 데만 사용할 수 있습니다. 사용하여 /c/clr:noAssembly컴파일하는 경우 링커 단계에서 모듈을 만드는 옵션을 지정 /NOASSEMBLY 합니다.

    2005 /clr:noAssembly 년 Visual Studio 전에 필요합니다/LD. /LD 은 이제 지정 /clr:noAssembly하는 경우 암시됩니다.

  • initialAppDomain

    initialAppDomain 는 사용되지 않습니다. C++/CLI 애플리케이션이 CLR 버전 1에서 실행되도록 설정합니다. 사용하여 initialAppDomain 컴파일된 애플리케이션은 CLR 버전 1에서 지원되지 않으므로 ASP.NET 사용하는 애플리케이션에서 사용하면 안 됩니다.

설명

관리 코드 는 CLR에서 검사하고 관리할 수 있는 코드입니다. 관리 코드는 관리되는 개체에 액세스할 수 있습니다. 자세한 내용은 제한을 참조 /clr 하세요.

C++에서 관리되는 형식을 정의하고 사용하는 애플리케이션을 개발하는 방법에 대한 자세한 내용은 런타임 플랫폼용 구성 요소 확장을 참조하세요.

사용하여 /clr 컴파일된 애플리케이션은 관리되는 데이터를 포함하거나 포함하지 않을 수 있습니다.

관리되는 애플리케이션에서 디버깅을 사용하도록 설정하려면 (DebuggableAttribute 추가)를 참조/ASSEMBLYDEBUG하세요.

CLR 형식만 가비지 수집된 힙에서 인스턴스화됩니다. 자세한 내용은 클래스 및 구조체를 참조하세요. 함수를 네이티브 코드로 컴파일하려면 unmanaged pragma를 사용합니다. 자세한 내용은 다음을 참조하세요managed. unmanaged

기본적으로 /clr 적용되지 않습니다. /clr 적용 시에도 /MD 적용됩니다. 자세한 내용은 , /MT/LD (Run-Time 라이브러리 사용)을 참조/MD하세요. /MD 는 동적으로 연결된 다중 스레드 버전의 런타임 루틴이 표준 헤더 파일에서 선택되도록 합니다. CLR 가비지 수집기는 보조 스레드에서 종료자를 실행하므로 관리되는 프로그래밍에 다중 스레딩이 필요합니다.

사용하여 /c컴파일하는 경우 링커 옵션을 사용하여 결과 출력 파일의 CLR 형식을 /CLRIMAGETYPE 지정할 수 있습니다.

/clr/EHa를 의미하며 다른 /EH 옵션은 지원 /clr되지 않습니다. 자세한 내용은 (예외 처리 모델)을 참조/EH하세요.

파일의 CLR 이미지 형식을 확인하는 방법에 대한 자세한 내용은 다음을 참조하세요 /CLRHEADER.

링커의 지정된 호출에 전달된 모든 모듈은 동일한 런타임 라이브러리 컴파일러 옵션(/MD 또는 /LD)을 사용하여 컴파일되어야 합니다.

/ASSEMBLYRESOURCE 링커 옵션을 사용하여 어셈블리에 리소스를 포함할 수 있습니다. /DELAYSIGN, /KEYCONTAINER/KEYFILE 링커 옵션을 사용하면 어셈블리를 만드는 방법을 사용자 지정할 수도 있습니다.

사용되는 경우 /clr 기호는 _MANAGED 1로 정의됩니다. 자세한 내용은 미리 정의된 매크로를 참조하세요.

네이티브 개체 파일의 전역 변수는 먼저 초기화되고(실행 파일이 DLL인 경우) DllMain 관리되는 섹션의 전역 변수가 초기화됩니다(관리 코드가 실행되기 전에). #pragma init_seg 은 관리되는 범주와 관리되지 않는 범주의 초기화 순서에만 영향을 줍니다.

메타데이터 및 명명되지 않은 클래스

명명되지 않은 클래스는 컴파일에서 명명되지 않은 클래스의 순차적 개수인 이름 $UnnamedClass$<crc-of-current-file-name>$<index>$<index> 아래에 메타데이터에 표시됩니다. 예를 들어 다음 코드 샘플은 메타데이터에 명명되지 않은 클래스를 생성합니다.

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

메타데이터를 보려면 Ildasm.exe를 사용합니다.

Visual Studio 개발 환경에서 이 컴파일러 옵션을 설정하려면

  1. 프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual Studio에서 C++ 컴파일러 및 빌드 속성 설정을 참조합니다.

  2. 구성 드롭다운을 모든 구성으로 설정하고 플랫폼 드롭다운을 모든 플랫폼으로 설정합니다.

  3. 구성 속성>C/C++>일반 페이지를 선택합니다.

  4. 공용 언어 런타임 지원 속성을 수정합니다. 확인을 선택하여 변경 내용을 저장합니다.

참고

Visual Studio IDE /clr 에서 컴파일러 옵션은 속성 페이지 대화 상자의 구성 PropertiesC>/C++>일반 페이지에서 개별적으로 설정할 수 있습니다. 그러나 CLR 템플릿을 사용하여 프로젝트를 만드는 것이 좋습니다. CLR 구성 요소를 성공적으로 만드는 데 필요한 모든 속성을 설정합니다. 이러한 속성을 설정하는 또 다른 방법은 속성 페이지 대화 상자의 Configuration PropertiesAdvanced 페이지에서 공용 언어 런타임 지원속성을> 사용하는 것입니다. 이 속성은 다른 모든 CLR 관련 도구 옵션을 한 번에 설정합니다.

프로그래밍 방식으로 이 컴파일러 옵션을 설정하려면

참고 항목

MSVC 컴파일러 옵션
MSVC 컴파일러 명령줄 구문