AppDomainsは、純粋なマネージコード構造です。そのようなものはネイティブコードには存在せず、Windowsはそれについて何も考えていません。したがって、ロードされたネイティブDLLのスコープはプロセスです。技術的には、pinvokeマーシャラーはDLLのカウントを参照し、どのAppDomainがDLLのロードをトリガーしたかを正確に追跡できます。ただし、そのDLLを使用するネイティブコードが実行されているかどうかはわかりません。別のAppDomainのコードから、場合によってはマーシャリングされたデリゲートを介して間接的に行われた呼び出しによって開始される可能性のあるネイティブコード。
AppDomainマネージャーがそのように使用されたDLLをアンロードすると、明らかに災害が発生します。これは厄介で、AccessViolationを診断することは不可能です。AppDomainがアンロードされた後、長時間トリガーされる可能性があるため、特に厄介です。
したがって、マーシャラーはそのようなカウントを実装せず、DLLはロードされたままになります。これが発生しないことを保証できるのはあなただけです。DLLで実行されるコードとその開始方法を正確に制御できます。DLLを強制的にアンロードできますが、ハックが必要です。LoadLibrary()を自分でPinvokeして、DLLへのハンドルを取得します。そして、FreeLibrary()を2回ピンボークして、強制的にアンロードします。WindowsもCLRも、あなたが不正行為をしていることを認識できません。この後、DLLを使用できないようにする必要があります。