Ich versuche, Baugruppen in einer separaten App-Domäne zu laden, stoße aber auf ein sehr seltsames Problem. Hier ist etwas Code:
public static void LoadAssembly(string assemblyPath)
{
string pathToDll = Assembly.GetCallingAssembly().CodeBase;
AppDomainSetup domainSetup = new AppDomainSetup
{
PrivateBinPath = pathToDll
};
AppDomain newDomain = AppDomain.CreateDomain("AssemblyLoader",null,domainSetup);
AssemblyLoader loader = (AssemblyLoader)newDomain.CreateInstanceFromAndUnwrap(
pathToDll,
typeof(AssemblyLoader).FullName);
}
AssemblyLoader ist eine andere Klasse in der gleichen Baugruppe wie diese, und es erbt von MarshalByRef, jedoch aus irgendeinem seltsamen Grund, bekomme ich eine Cast-Ausnahme jedes Mal, wenn ich versuche, dies auszuführen. Ich habe sogar den Pfad zur DLL hartcodiert, anstatt GetCallingAssembly().CodeBase zu verwenden, aber ich erhalte immer noch diese Ausnahme.
Ich weiß, dass es schwierig ist, eine Frage wie diese zu beantworten, ohne sie tatsächlich gesehen zu haben und über mehr Informationen zu verfügen, aber vielleicht ist jemand in eine ähnliche Situation geraten und kennt die üblichen "Fallstricke" und weiß, worauf ich achten sollte.
EDIT: Der Grund, warum ich nicht wollen, um es direkt zu laden ist, weil dies nur ein Teil des Codes ist. Das ultimative Ziel ist, dass diese Klasse eine Methode haben wird, die Assemblies laden, bekommt ihre GUID und einige andere Informationen über sie und speichert sie in einer Datenbank für ein Projekt, das ich arbeite. Wenn ich also diese Baugruppe in eine separate App-Domäne lade, kann ich die anderen auch dort laden und dann die App-Domäne entladen. Es macht keinen Sinn, alle diese Baugruppen für die Dauer der Anwendung zu laden, wenn ich nur diese Daten benötige.