/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
次の 1 つまたは複数のスイッチをコンマで区切って指定します。One or more of the following switches, comma-separated.

  • nonenone

    オプションを指定しない場合、 /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. 純粋 MSIL にする必要があるコードは、C# に移植することをお勧めします。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. 安全 MSIL にする必要があるコードは、C# に移植することをお勧めします。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. 現在は、 /LD を指定すると /LDが暗黙的に指定されるようになっています。/LD is now implied when you specify /clr:noAssembly.

  • initialAppDomaininitialAppDomain

    Visual C++ アプリケーションを CLR の Version 1 で実行できるようにします。Enables a Visual C++ application to run on version 1 of the CLR. CLR の Version 1 では ASP.NET をサポートしていないため、 initialAppDomain を使用してコンパイルされたアプリケーションは、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 PlatformsFor 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 プラグマを使用します。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を暗黙的に指定するため、 /clr では他の /EHオプションを指定できません。/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 または /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