Ich konvertiere eine selbstentwickelte Plugin-Architektur zu MEF von .NET 4.0. Die MEF-basierte Anwendung funktioniert wunderbar, wenn sie von meinem lokalen Rechner aus ausgeführt wird. Wenn ich die Anwendung auf eine Netzwerkfreigabe verschiebe und dann ausführe, lädt MEF jedoch meine Plugins nicht mehr.
Wenn ich eine Debugging-Sitzung an den Prozess anschließe und das DirectoryCatalog-Objekt untersuche, sehe ich, dass in den Eigenschaften Assemblies oder Parts keine Einträge vorhanden sind. Der FullPath ist das richtige Verzeichnis und die LoadFiles-Eigenschaft enthält alle DLLs in dem durchsuchten Verzeichnis.
Zuerst dachte ich, es handele sich um ein CasPol-Problem, bis ich versuchte, CasPol zu ändern, und eine Warnung erhielt, dass CasPol in .NET 4.0 nicht mehr standardmäßig aktiviert ist. Es muss etwas anderes sein. Ich habe Vollzugriffsrechte auf das betreffende Verzeichnis.
Hier ist die Eigenschaft, die die importierten AddIns enthalten wird:
[ImportMany]
private IEnumerable<IRecipient> RecipientAddIns;
Und hier ist die Methode, die die AddIns entdeckt und importiert:
private void LoadRecipientAddIns()
{
using (var catalog = new AggregateCatalog())
{
// Look for IRecipient AddIns in the ./Recipients directory.
catalog.Catalogs.Add(new DirectoryCatalog("Recipients"));
// Look for IRecipient AddIns in subdirectories hanging off of ./Recipients.
foreach (string currentDirPath in Directory.GetDirectories("Recipients"))
catalog.Catalogs.Add(new DirectoryCatalog(currentDirPath));
using (var compositionContainer = new CompositionContainer(catalog))
{
compositionContainer.ComposeParts();
compositionContainer.SatisfyImportsOnce(this);
// The discovered AddIns should now be in the RecipientAddIns property.
}
// Do stuff with the Recipient AddIns
foreach (var recipient in this.RecipientAddIns)
{
...
}
}
// Clear the list of discovered Recipient AddIns
this.RecipientAddIns = null;
}
Irgendwelche Ideen?
Ich danke Ihnen.