Kurz gesagt, eine AppDomain ist erforderlich, wenn Sie .dlls überschreiben möchten, die von einer Anwendung verwendet werden, und dass AppDomain die ShadowCopyFiles = "true"
angeben muss.
Schattenkopieren von Dateien bedeutet, dass die Anwendungsdomäne die DLLs in ein temporäres Verzeichnis kopiert und sie aus diesem temporären Verzeichnis lädt, damit die ursprünglichen .dlls überschrieben werden können.
Leider können die Assemblys, die in eine beliebige AppDomain geladen werden, nicht entladen werden, es sei denn, die AppDomain, die sie enthält, wird entladen. Das Aktualisieren eines Plugins ist deshalb schwierig, weil Sie A) die gesamte AppDomain entladen müssen, die notwendigerweise alle anderen .dlls in dieser AppDomain entfernt, oder B) eine neue Version derselben .dll zulassen geladen, um den Speicherbedarf Ihrer Anwendung zu erhöhen. Die zweite Option erfordert außerdem, dass Ihre Plug-in-.dlls stark benannt sind und eine andere Versionsnummer haben, damit MEF einen Unterschied erkennen und die neue .dll laden kann.