Eine kurze Erklärung, warum ich dies tun will:Kann ich die Standard-Anwendungsdomäne Schattenkopien bestimmter Assemblys verwenden?
Ich bin damit beschäftigt, ein Plugin für Autodesk Revit Architecture 2010 Testing meines Plugin Code zu schreiben ist extrem umständlich, da ich Autodesk für jede Debug-Sitzung neu starten, manuell laden ein Revit-Projekt, klicken Sie auf den Tab Add-Ins und starten Sie dann mein Plugin. Das dauert einfach zu lange.
Ich habe ein zweites Plugin geschrieben, das einen IronPython-Interpreter hostet. Auf diese Weise kann ich mit der von Revit bereitgestellten API experimentieren. Aber irgendwann muss der Code in C# neu geschrieben und debugged werden.
Einfach, dachte ich: Einfach die Plugins-DLL aus dem IronPython-Skript laden und üben. Das funktioniert, aber sobald es geladen ist, kann ich in Visual Studio nicht neu kompilieren, da die DLL jetzt in Revits AppDomain geladen ist.
Einfach, dachte ich (mit ein wenig Hilfe von StackOverflow): Laden Sie einfach die DLL in eine neue AppDomain. Leider können die RevitAPI-Objekte nicht zu einer anderen AppDomain gemarshallt werden, da sie nicht MarshalByRefObject
erweitern.
Ich denke, ich könnte auf etwas mit Schattenkopien sein. ASP.NET scheint dies zu tun. Aber das Lesen der Dokumentation auf MSDN scheint es, ich kann dies nur angeben, wenn eine AppDomain erstellen.
Kann ich dies für die aktuelle (Standard) AppDomain ändern? Kann ich die Verwendung von Schattenkopien von DLLs aus einem bestimmten Verzeichnis erzwingen?
Die Dokumente sagen, dass sie veraltet sind - ist das das gleiche wie veraltet? Ich werde es versuchen. Vielen Dank! –
Ich kann es nicht zur Arbeit ... –
Es funktioniert für mich. Ich habe meine Antwort mit einem Arbeitsbeispiel geändert. Kopieren Sie es und fügen Sie es in Ihre Main() -Methode ein.Stellen Sie außerdem sicher, dass Ihre Main() -Methode nicht direkt auf Ihre anderen Assemblies verweist, weil .NET sie vor 'SetShadowCopyFiles()' lädt, wird –