Frage

Ich möchte ein Setup wie folgt aus:

+- /ApplicationFolder
  -- App.exe
  -- Core.dll
  -- AnotherShared.dll
  +- /PluginsFolder
    -- plugin1.dll
    -- plugin2.dll

Aber weil plugin1.dll Verweise auf core.dll und Shared.dll wenn ich die Anwendung kompilieren fällt es eine Kopie von „Copy.dll“ und „Shared.dll“ auf Plugin-Ordner als auch, und wenn ich sie entfernen es doesn ‚t mehr arbeiten.

Wie kann ich dieses Problem lösen?

War es hilfreich?

Lösung

Wenn Sie eine AppDomain erstellen können Sie einen Pfad zum Laden von Baugruppen definieren. Setzen Sie AppDomainSetup.PrivateBinPath und übergeben zu AppDomain.Create Domäne.

ein AppDomain ist eine gute Idee für Plugins (ermöglicht unterschiedliche CAS-und Entladen).

Um VS / msbuild Kopieren referenzierten Assemblys in das Ausgabeverzeichnis, ändern „Copy Local“ auf falsch in den Eigenschaften der Referenz zu vermeiden.

Andere Tipps

Meine MEF-Anwendung ist so eingerichtet, dass die Plug-Projekte kompilieren, um ihre eigenen Ordner (wie das der Standard ist), dann benutze ich einen Post-Build-Befehl bestimmte Dateien auf die Ausgangserweiterungen Ordner zu kopieren.

Der andere Weg ist das Projekt direkt in die entsprechenden Ausgabeordner erstellen haben und, wie das andere Plakat sagte, öffnen Sie das Fenster „Eigenschaften“ für jede relevante Referenz in Ihrem Plugin-Projekt und „Copy Local“ auf false gesetzt.

Sie können versuchen, diese: Wie kann ich PrivateBinPath in MEF gesetzt

oder Sie können versuchen, die AppDomain.AssemblyResolve Event-Handling, die jederzeit angehoben .net kippt eine Baugruppe lokalisieren. dort können Sie benutzerdefinierte Logik zu lokalisieren und Last-Baugruppen von überall.

implementieren

die AssemblyResolve Eventhandler jsut gibt entweder die Assembly, die für oder null angesehen wird durchgeführt, so dass Sie die bereits geladen core.dll aus verfügbar von den AppDomain.GetAssemblies zurückkehren konnte () -Methode.

aber in Ihrem Fall sollte es in Ordnung sein, einfach nicht Code.dll mit plugin1.dll umfassen, .net sollte bereits erkennen, dass core.dll geladen und verwendet diese Instanz

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top