2012-03-26 4 views
5

Ich habe eine MEF-Anwendung, die bei lokaler Ausführung sehr gut funktioniert, aber nicht funktioniert, wenn sie remote auf einer Netzwerkfreigabe aufgerufen wird.MEF-Komposition, wenn Anwendung in einer Netzwerkfreigabe ist

Ich Assembly.LoadFrom mit UNC Probleme zu vermeiden, aber da alle dlls neben der exe liegen ich nicht wirklich denke, das ist das Problem sein würde, aber ich versuchte es jede mögliche Weise.

Ich habe auch die ConfigurationManager.GetSection Probleme, die ein häufiges Problem mit .NET 4 Berechtigungen zu sein scheint behoben, nachdem Sie auf msdn.

Ich erlaube <loadFromRemoteSources enabled="true"/> in der Konfigurationsdatei. Ich bin mir also nicht sicher, wo das Problem liegen könnte.

Bearbeiten: Der ProductDispatcher in der Ausnahme ist im Katalog eindeutig.Parts.

Der Code, den Behälter und Katalog der Einrichtung:

var catalog = new AggregateCatalog(); 

var dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 

foreach (string file in Directory.GetFiles(dir, "XXX*.dll")) 
{ 
    var assembly = Assembly.LoadFrom(file); 
    catalog.Catalogs.Add(new AssemblyCatalog(assembly)); 
} 

var container = new CompositionContainer(catalog); 
var batch = new CompositionBatch(); 
batch.AddPart(this); 
container.Compose(batch); 

Der Import ist (was ich machen Öffentlichkeit versucht haben):

[ImportMany(typeof(IEntityTypeDispatcher))] 
private IEnumerable<IEntityTypeDispatcher> Dispatchers { get; set; } 

Ein Beispiel für einen Export ist:

[Export(typeof(IEntityTypeDispatcher))] 
internal class ContactDispatcher : EntityTypeDispatcher<Contact> 

Der Ausnahmefehler, den ich bekomme, ist:

The composition produced a single composition error. The root cause is provided below. Review the CompositionException.Errors property for more detailed information. 

1) Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information. 

Resulting in: An exception occurred while trying to create an instance of type 'XXX.XXX.Dispatch.ProductDispatcher'. 

Resulting in: Cannot activate part 'XXX.XXX.Dispatch.ProductDispatcher'. 
Element: XXX.XXX.Dispatch.ProductDispatcher --> XXX.XXX.Dispatch.ProductDispatcher --> AssemblyCatalog (Assembly="XXX.XXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null") 

Resulting in: Cannot get export 'XXX.XXX.Dispatch.ProductDispatcher (ContractName="XXX.XXX.Dispatch.IEntityTypeDispatcher")' from part 'XXX.XXX.Dispatch.ProductDispatcher'. 
Element: XXX.XXX.Dispatch.ProductDispatcher (ContractName="XXX.XXX.Dispatch.IEntityTypeDispatcher") --> XXX.XXX.Dispatch.ProductDispatcher --> AssemblyCatalog (Assembly="XXX.XXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null") 

Resulting in: Cannot set import 'XXX.XXX.Dispatch.DispatcherRepository.Dispatchers (ContractName="XXX.XXX.Dispatch.IEntityTypeDispatcher")' on part 'XXX.XXX.Dispatch.DispatcherRepository'. 
Element: XXX.XXX.Dispatch.DispatcherRepository.Dispatchers (ContractName="XXX.XXX.Dispatch.IEntityTypeDispatcher") --> XXX.XXX.Dispatch.DispatcherRepository 
(System.ComponentModel.Composition.CompositionException) 

    at System.ComponentModel.Composition.CompositionResult.ThrowOnErrors(AtomicComposition atomicComposition) 
    at System.ComponentModel.Composition.Hosting.ComposablePartExportProvider.Compose(CompositionBatch batch) 
    at System.ComponentModel.Composition.Hosting.CompositionContainer.Compose(CompositionBatch batch) 
    at XXX.XXX.Dispatch.DispatcherRepository.LoadDispatchers() in D:\Workspaces\XXX\Branches\Dev1\XXX.XXX\XXX.XXX\Dispatch\DispatcherRepository.cs:line 71 
    at XXX.XXX.Dispatch.DispatcherRepository.get_Instance() in D:\Workspaces\XXX\Branches\Dev1\XXX.XXX\XXX.XXX\Dispatch\DispatcherRepository.cs:line 34 
    at XXX.XXX.Dispatch.DispatcherRepository.GetDispatchers() in D:\Workspaces\XXX\Branches\Dev1\XXX.XXX\XXX.XXX\Dispatch\DispatcherRepository.cs:line 21 
    at XXX.XXX.Dispatch.Dispatcher.get_Instance() in D:\Workspaces\XXX\Branches\Dev1\XXX.XXX\XXX.XXX\Dispatch\Dispatcher.cs:line 30 
    at XXX.XXX.Broker..ctor() in D:\Workspaces\XXX\Branches\Dev1\XXX.XXX\XXX.XXX\Broker.cs:line 52 

Es scheint zu sein, dass MEF in Partial Trust-Szenarien nicht so gut funktioniert. Gibt es etwas, was ich tun muss, um sicherzustellen, dass alles unter vollem Vertrauen läuft?

+0

Ich hatte das gleiche Problem mit meinen Projekten, aber ich war leider nie in der Lage, dies zu beheben. :( – eandersson

Antwort

3

Obwohl Sie "load from remote sources" aktiviert haben, tritt dies möglicherweise auf, da die Dateien möglicherweise weiterhin Einschränkungen enthalten.

NTFS unterstützt die Möglichkeit, Metadaten auf eine Datei in einem alternativen Datenstrom (ADS) anzuwenden. Dies schließt die Zoneninformation (z. B. Internetzone usw.) ein.

Dies ist möglicherweise der Grund für Probleme mit Ihren im Netzwerk befindlichen Dateien. Sie werden möglicherweise in der Internetzone klassifiziert und sind daher möglicherweise weiterhin blockiert.

Sie in diesem Artikel sehen, ob diese es für Sie lösen wird: http://mikehadlow.blogspot.co.uk/2011/07/detecting-and-changing-files-internet.html

Verwandte Themen