/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 합니다.

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

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

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

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

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

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

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

네이티브 개체 파일의 전역 변수는 먼저 초기화되고( DllMain 실행 파일이 DLL인 경우) 관리되는 섹션의 전역 변수가 초기화됩니다(관리 코드가 실행되기 전에). #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 에서 컴파일러 옵션은 속성 페이지 대화 상자의 구성 속성>C/C++>일반 페이지에서 개별적으로 설정할 수 있습니다. 그러나 CLR 템플릿을 사용하여 프로젝트를 만드는 것이 좋습니다. CLR 구성 요소를 성공적으로 만드는 데 필요한 모든 속성을 설정합니다. 이러한 속성을 설정하는 또 다른 방법은 속성 페이지 대화 상자의 구성 속성 고급 페이지에서 공용 언어 런타임 지원 속성을> 사용하는 것입니다. 이 속성은 다른 모든 CLR 관련 도구 옵션을 한 번에 설정합니다.

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

참고 항목

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