2016-07-21 19 views
1

Ich erstelle eine ASP.NET Core-Anwendung, die auf ein Klassenbibliotheksprojekt verweist. Diese Klassenbibliothek versucht, einen Endpunkt einzurichten. Da ich Microsoft.AspNetCore.Identity.EntityFrameworkCore enthalten sind, bekomme ich die folgende Ausnahme:Ausnahme beim Assembly-Scan in NServiceBus 6

{System.IO.FileLoadException: Die Datei oder Assembly "System.Interactive.Async, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" oder eine Abhängigkeit davon wurde nicht gefunden. Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein. (Ausnahme von HRESULT: 0x80131040) 
Dateiname: "System.Interactive.Async, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
    bei System.Signature.GetSignature(Void* pCorSig, Int32 cCorSig, RuntimeFieldHandleInternal fieldHandle, IRuntimeMethodInfo methodHandle, RuntimeType declaringType) 
    bei System.Reflection.RuntimePropertyInfo.get_Signature() 
    bei System.Reflection.RuntimePropertyInfo.get_PropertyType() 
    bei NServiceBus.Conventions.<>c.<.ctor>b__21_2(PropertyInfo p) 
    bei NServiceBus.Conventions.IsEncryptedProperty(PropertyInfo property) 

=== Zustandsinformationen vor Bindung === 
LOG: DisplayName = System.Interactive.Async, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
(Fully-specified) 
LOG: Appbase = file:///D:/enio_tfs/enio.InvoiceR/Main/enio.InvoiceR.WebApp/bin/Debug/net461/win7-x64/ 
LOG: Ursprünglicher PrivatePath = NULL 
Aufruf von Assembly : EntityFramework.Core, Version=7.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60. 
=== 
LOG: Diese Bindung startet im default-Load-Kontext. 
LOG: Die Anwendungskonfigurationsdatei wird verwendet: D:\enio_tfs\enio.InvoiceR\Main\enio.InvoiceR.WebApp\bin\Debug\net461\win7-x64\enio.InvoiceR.WebApp.exe.Config 
LOG: Die Hostkonfigurationsdatei wird verwendet: 
LOG: Die Computerkonfigurationsdatei von C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config wird verwendet. 
LOG: Verweis nach der Richtlinie: System.Interactive.Async, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
LOG: Download von neuem URL file:///D:/enio_tfs/enio.InvoiceR/Main/enio.InvoiceR.WebApp/bin/Debug/net461/win7-x64/System.Interactive.Async.DLL. 
WRN: Der Vergleich des Assemblynamens führte zum Konflikt: Hauptversion. 
ERR: Das Setup der Assembly konnte nicht abgeschlossen werden (hr = 0x80131040). Die Suche wurde beendet. 
} 

Diese Ausnahmen tritt auf, wenn ich versuche, den Endpunkt zu starten (Endpoint.Start ...)

Wie ich dachte, dass die Ausnahme könnte weggehen, wenn ich die Montage System.Interactive.Async.dll vom Scannen ausschließen ich den Endpunkt Konfigurationscode geändert haben:

endpointConfiguration.ExcludeAssemblies("System.Interactive.Async.dll", "System.Interactive.Async"); 

Aber leider hat dies keine Auswirkungen. Die Ausnahme bleibt gleich.

Übrigens, wie kann ich jetzt alle Microsoft. * Und System. * DLLs ausschließen? ASP.NET Core stellt alle diese DLLs in das Verzeichnis bin. Daher habe ich über 100 solcher DLLs und das anfängliche Scannen dauert ewig.

Antwort

1

Leider sind meine Sprachkenntnisse schlechtes Englisch und schlechtes C#, also nehme ich an, dass Sie einen ähnlichen Fehler bekommen wie beim Scannen, bei dem versucht wurde, Assemblys und deren Abhängigkeitsbäume zu laden. Um Ihre Frage über das Ausschließen von Dateien in nServiceBus 6+ zu beantworten, was ich persönlich für einen schlechten Dienst gehalten habe, indem Sie die AllAssemblies Exclude-Funktion entfernt haben, könnten Sie Folgendes tun.

var endpointConfiguration = new EndpointConfiguration("MyEndpoint"); 
var fullPath = Assembly.GetAssembly(typeof(ServiceMain)).Location; 
var directory = new DirectoryInfo(Path.GetDirectoryName(fullPath)); 
var files = directory.GetFiles("*.dll", SearchOption.TopDirectoryOnly); 
var excludedFiles = new List<string>(); 
foreach (var file in files) { 
    if (!file.Name.Contains("NServiceBus") && !file.Name.Contains("Messages")) { 
     excludedFiles.Add(file.Name);  
    } 
} 
endpointConfiguration.ExcludeAssemblies(excludedFiles.ToArray()); 

Dies löste mein Problem für alle Drittanbieter-Code, die ich Bindung Umleitungen in der Konfigurationsdatei, die der Scanner, dlls indem nur nServiceBus Baugruppen und meine Botschaft durchfließen nicht respektieren hatte. Ich nehme an, dass Sie dieses Problem wahrscheinlich gelöst haben, aber ich hasse unbeantwortete Fragen, besonders gute, bei denen andere Leute Hilfe brauchen.