4

DisallowApplicationBaseProbing = true を設定したときに、作成した AppDomain に AssemblyResolve イベントを接続する必要があります。私がこれを行っている理由は、最初に調査するのではなく、アセンブリを解決するために必要な AssemblyResolve イベントをランタイムに強制的に呼び出すためです。このように、別の開発者が MyDllName.dll を ApplicationBase ディレクトリに貼り付けて、AssemblyResolve イベントでロードしたかったアセンブリをオーバーライドすることはできません。

これを行う際の問題は次のとおりです...

  class Program
  {
 static void Main()
 {
    AppDomainSetup ads = new AppDomainSetup();
    ads.DisallowApplicationBaseProbing = true;
    AppDomain appDomain = AppDomain.CreateDomain("SomeDomain", null, ads);
    appDomain.AssemblyResolve += OnAssemblyResolve;
    appDomain.DoCallBack(target);
 }

 static System.Reflection.Assembly OnAssemblyResolve(object sender, ResolveEventArgs args)
 {
    Console.WriteLine("Hello");
    return null;

 }

 private static void target()
 {
    Console.WriteLine(AppDomain.CurrentDomain);
 }
  }

コードが += OnAssemblyResolve 行を超えることはありません。

コードを実行しようとすると、新しいアプリ ドメインは実行中のアセンブリを解決しようとします。DisallowApplicationBaseProbing = true であるため、このアセンブリの場所がわかりません。私は鶏と卵の問題を抱えているようです。アセンブリ リゾルバーを接続するにはアセンブリを解決する必要がありますが、アセンブリを解決するにはアセンブリ リゾルバーが必要です。

助けてくれてありがとう。

-マイク

4

1 に答える 1