/CLRUNMANAGEDCODECHECK (SuppressUnmanagedCodeSecurityAttribute の削除)
/CLRUNMANAGEDCODECHECK では、マネージド コードからネイティブ DLL への、リンカーによって生成された PInvoke 呼び出しに対して、リンカーで SuppressUnmanagedCodeSecurityAttribute を適用しないことを指定します。
構文
/CLRUNMANAGEDCODECHECK [:NO]
解説
既定では、リンカーによって生成された PInvoke 呼び出しに対して、リンカーで SuppressUnmanagedCodeSecurityAttribute が適用されます。 /CLRUNMANAGEDCODECHECK が有効である場合、SuppressUnmanagedCodeSecurityAttribute は削除されます。 リンカーによって生成された PInvoke 呼び出しに対して SuppressUnmanagedCodeSecurityAttribute を明示的に適用するには、/CLRUNMANAGEDCODECHECK:NO を使用します。
この属性は、リンカーにより、/clr または /clr:pure を使用してコンパイルされたオブジェクトに対してのみ追加されます。 ただし、/clr:pure コンパイラ オプションは Visual Studio 2015 では非推奨とされており、Visual Studio 2017 以降ではサポートされていません。
リンカーで、マネージド呼び出し元からの参照を満たすマネージド シンボルを見つけることができないが、その参照を満たすネイティブ シンボルを見つけることができる場合、リンカーによって PInvoke 呼び出しが生成されます。 PInvoke の詳細については、「マネージド コードからのネイティブ関数の呼び出し」を参照してください。
コードで AllowPartiallyTrustedCallersAttribute を使用する場合は、SuppressUnmanagedCodeSecurity を削除するよう /CLRUNMANAGEDCODECHECK 属性を明示的に設定する必要があります。 イメージに SuppressUnmanagedCodeSecurity 属性と AllowPartiallyTrustedCallers 属性の両方が含まれている場合は、潜在的なセキュリティの脆弱性となります。
SuppressUnmanagedCodeSecurityAttribute の使用による影響の詳細については、「アンマネージド コードの安全なコーディングのガイドライン」を参照してください。
Visual Studio 開発環境でこのリンカー オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関するページを参照してください。
[構成プロパティ]>[リンカー]>[詳細] プロパティ ページを選択します。
[CLR アンマネージド コード チェック] プロパティを変更します。
このリンカーをコードから設定するには
- 以下を参照してください。CLRUnmanagedCodeCheck