Ich führe eine WCF-Anwendung CoreApplication
, deren VS-Projekt einen Verweis auf AncillaryProject
hat. CoreApplication
verwendet eine Klasse Provider
von AncillaryProject
; Es wird jedoch nie explizit darauf verwiesen - es wird über Reflection aufgerufen.Referenzierte Assembly nicht gefunden - Wie alle DLLs in Lösung enthalten sind
Mein Problem ist, dass manchmalCoreApplication
Provider
weil AncillaryProject
nicht kommen im Aufruf GetAssemblies()
zu finden, fehlschlägt. Manchmal funktioniert es gut, aber manchmal (ich vermute, es kann nach einem JIT sein) schlägt es fehl.
Hier ist mein Original-Code:
var providers = from d in AppDomain.CurrentDomain.GetAssemblies()
from c in d.GetTypes()
where typeof(BaseProvider).IsAssignableFrom(c)
select c;
Nachdem bei this question suchen, habe ich versucht, GetReferencedAssemblies()
mit:
var allAssemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (var a in AppDomain.CurrentDomain.GetAssemblies())
{
allAssemblies = allAssemblies.Union(
a.GetReferencedAssemblies()
.Select(b => System.Reflection.Assembly.Load(b)));
}
var providers = from d in allAssemblies
from c in d.GetTypes()
where typeof(BaseProvider).IsAssignableFrom(c)
select c;
Mir ist klar, dass die Frage, die ich verweisen das Problem löst durch dynamisch alle DLL-Dateien in Laden das bin-Verzeichnis, aber das hört sich für mich nicht besonders gut an. Gibt es eine bessere Möglichkeit, dies zu tun, oder lädt .NET die anderen Assemblys überhaupt nicht? Wie funktioniert das unter der Haube, und kann ich irgendetwas dagegen tun?
gefunden Ihre Frage beantworten, aber es gibt einige relevanten Informationen zu dieser Frage in meiner Antwort: http://stackoverflow.com/questions/9947882/ get-assemblies-with-instantiating-them/9948404 # comment12730056_9948404 Abgesehen davon, dass "referenzierte" Assemblies in VisualStudio zur Laufzeit nicht viel bedeuten, ist die folgende Antwort zur Verwendung von Fusion Logger eine gute Hilfe. Sie sollten in der Lage sein, AncientProject.dll einfach dorthin zu kopieren, wo Fusion nach Assemblys sucht, aber es könnte einige Antworten darauf geben, wo es hinschaut. – CodingWithSpike
Ahh - das gibt mir genau die Informationen, die ich wissen muss. – eouw0o83hf
Follow-up für jeden, der diese Frage findet: In den dazwischen liegenden Jahren seit ich danach gefragt habe, habe ich gemerkt, dass ich das völlig falsch mache. Manchmal mag es weniger magisch sein und explizit die 'Typ's zu nennen, die du willst, ist weit, viel besser. Dies ist eine dieser Situationen. – eouw0o83hf