Das AssemblyResolve-Ereignis muss angeschlossen werden, wenn DisallowApplicationBaseProbing = true ist
Ich muss ein AssemblyResolve-Ereignis für meine erstellte AppDomain einrichten, wenn DisallowApplicationBaseProbing = true festgelegt wurde. Der Grund dafür ist, dass die Laufzeitumgebung das AssemblyResolve-Ereignis aufruft, das zum Auflösen einer Assembly erforderlich ist, anstatt zuerst zu testen. Auf diese Weise kann ein anderer Entwickler MyDllName.dll nicht einfach in das ApplicationBase-Verzeichnis einfügen und die Assembly überschreiben, die ich im AssemblyResolve-Ereignis laden wollte.
Das Problem dabei ist das folgende ...
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);
}
}
Der Code kommt nie über die Zeile + = OnAssemblyResolve hinaus.
Wenn der Code ausgeführt werden soll, versucht die neue Anwendungsdomäne, die Assembly aufzulösen, in der ich ausgeführt habe. Da DisallowApplicationBaseProbing = true ist, ist nicht bekannt, wo sich diese Assembly befindet. Ich habe anscheinend ein Henne-Ei-Problem. Es muss meine Assembly aufgelöst werden, um den Assembly-Resolver anzuschließen, aber der Assembly-Resolver muss meine Assembly aufgelöst werden.
Vielen Dank für jede Hilfe.
-Mike