次の方法で共有


ICorProfilerCallback6::GetAssemblyReferences メソッド

[.NET Framework 4.5.2 以降のバージョンでのみでサポート]

共通言語ランタイムがアセンブリ参照クロージャのウォークを実行するときに、アセンブリがごく初期のローディング状態であることをプロファイラーに通知します。

構文

HRESULT GetAssemblyReferences(        [in, string] const WCHAR* wszAssemblyPath,  
        [in] ICorProfilerAssemblyReferenceProvider* pAsmRefProvider  
);  

パラメーター

wszAssemblyPath
[in] メタデータが変更されるアセンブリのパスおよび名前。

pAsmRefProvider
[in] アセンブリ参照を追加するように指定する ICorProfilerAssemblyReferenceProvider インターフェイスのアドレスへのポインター。

戻り値

このコールバックからの戻り値は無視されます。

解説

このコールバックは、ICorProfilerCallback5::SetEventMask2 メソッドを呼び出すときに COR_PRF_HIGH_ADD_ASSEMBLY_REFERENCES イベント マスク フラグを設定することによって制御されます。 プロファイラーが ICorProfilerCallback6::GetAssemblyReferences コールバック メソッドを登録すると、ランタイムはロードされるアセンブリのパスと名前、および ICorProfilerAssemblyReferenceProvider インターフェイス オブジェクトへのポインターを、そのメソッドに渡します。 次にプロファイラーは、GetAssemblyReferences コールバックで指定されたアセンブリから参照される各ターゲット アセンブリの COR_PRF_ASSEMBLY_REFERENCE_INFO オブジェクトで、ICorProfilerAssemblyReferenceProvider::AddAssemblyReference メソッドを呼び出すことができます。

GetAssemblyReferences コールバックを使用するのは、プロファイラーがアセンブリのメタデータを変更してアセンブリ参照を追加する必要がある場合のみです (ただし実際のアセンブリ メタデータの変更は、ICorProfilerCallback::ModuleLoadFinished コールバック メソッドで行われます)。プロファイラーは GetAssemblyReferences コールバック メソッドを実装して、モジュールがロードされたときにアセンブリ参照が追加されることを共通言語ランタイム (CLR) に知らせる必要があります。 これにより、プロファイラーが後でメタデータのアセンブリ参照を変更するつもりでも、アセンブリが共有している "初期の段階で CLR によって行われた決定" は有効なままになります。 このため一部のインスタンスでの、プロファイラーのメタデータ変更による SECURITY_E_INCOMPATIBLE_SHARE エラーの発生を回避できる場合があります。

プロファイラーは、このメソッドで与えられた ICorProfilerAssemblyReferenceProvider オブジェクトを使用して、CLR アセンブリ参照クロージャのウォーカーへのアセンブリ参照を追加します。 ICorProfilerAssemblyReferenceProvider オブジェクトは、このコールバックからのみ使用します。 このコールバックからの、ICorProfilerAssemblyReferenceProvider::AddAssemblyReference メソッドへの呼び出しによって変更されたメタデータが生じることはなく、変更されたアセンブリ参照クロージャのウォークのみが発生します。 参照元のアセンブリに対して ICorProfilerCallback::ModuleLoadFinished コールバック内部から明示的にアセンブリ参照を追加するには、プロファイラーは (GetAssemblyReferences コールバックを実装している場合でも) やはり IMetaDataAssemblyEmit オブジェクトを使用する必要があります。

プロファイラーは同じアセンブリに対して、このコールバックへの重複した呼び出しを受け取る準備をし、重複した各呼び出しに対して同じように応答する必要があります。このようにするには、ICorProfilerAssemblyReferenceProvider::AddAssemblyReference 呼び出しの同じセットを作成します。

必要条件

:システム要件」を参照してください。

ヘッダー : CorProf.idl、CorProf.h

ライブラリ: CorGuids.lib

.NET Framework のバージョン: 4.5.2 以降で使用可能

関連項目