/clr
(공용 언어 런타임 컴파일)
애플리케이션 및 구성 요소가 CLR(공용 언어 런타임)의 기능을 사용할 수 있도록 하고 C++/CLI 컴파일을 사용하도록 설정합니다.
Syntax
/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
컴파일하는 경우 링커 단계에서 옵션을 지정/NOASSEMBLY
하여 모듈을 만듭니/clr: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를 사용합니다. 자세한 내용은 , 를 unmanaged
참조하세요managed
.
기본적으로 는 /clr
적용되지 않습니다. /clr
가 적용되면 도 /MD
적용됩니다. 자세한 내용은 , , /MT
/LD
(Run-Time 라이브러리 사용)을 참조/MD
하세요. /MD
는 동적으로 연결된 다중 스레드 버전의 런타임 루틴이 표준 헤더 파일에서 선택되도록 합니다. CLR 가비지 수집기는 보조 스레드에서 종료자를 실행하므로 관리되는 프로그래밍에 다중 스레딩이 필요합니다.
를 사용하여 /c
컴파일하는 경우 링커 옵션을 사용하여 결과 출력 파일의 CLR 형식을 /CLRIMAGETYPE
지정할 수 있습니다.
/clr
은 을 /EHa
의미하며 에 대해 /clr
지원되는 다른 /EH
옵션은 없습니다. 자세한 내용은 (예외 처리 모델)을 참조/EH
하세요.
파일의 CLR 이미지 형식을 확인하는 방법에 대한 자세한 내용은 을 참조하세요 /CLRHEADER
.
링커의 지정된 호출에 전달된 모든 모듈은 동일한 런타임 라이브러리 컴파일러 옵션(/MD
또는 /LD
)을 사용하여 컴파일해야 합니다.
/ASSEMBLYRESOURCE
링커 옵션을 사용하여 어셈블리에 리소스를 포함할 수 있습니다. /DELAYSIGN
, /KEYCONTAINER
및 /KEYFILE
링커 옵션을 사용하면 어셈블리를 만드는 방법을 사용자 지정할 수도 있습니다.
가 사용되는 _MANAGED
경우 /clr
기호는 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 개발 환경에서 이 컴파일러 옵션을 설정하려면
프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual Studio에서 C++ 컴파일러 및 빌드 속성 설정을 참조합니다.
구성 드롭다운을 모든 구성으로 설정하고 플랫폼 드롭다운을 모든 플랫폼으로 설정합니다.
구성 속성>C/C++>일반 페이지를 선택합니다.
공용 언어 런타임 지원 속성을 수정합니다. 확인을 선택하여 변경 내용을 저장합니다.
참고
Visual Studio IDE /clr
에서 컴파일러 옵션은 속성 페이지 대화 상자의 구성 속성>C/C++>일반 페이지에서 개별적으로 설정할 수 있습니다. 그러나 CLR 템플릿을 사용하여 프로젝트를 만드는 것이 좋습니다. CLR 구성 요소를 성공적으로 만드는 데 필요한 모든 속성을 설정합니다. 이러한 속성을 설정하는 또 다른 방법은 속성 페이지 대화 상자의 구성 속성고급 페이지에서 공용 언어 런타임 지원 속성을 > 사용하는 것입니다. 이 속성은 다른 모든 CLR 관련 도구 옵션을 한 번에 설정합니다.
프로그래밍 방식으로 이 컴파일러 옵션을 설정하려면
- CompileAsManaged을 참조하세요.