Referenzierte Assembly Nicht Gefunden - Wie bekomme ich alle DLLs inklusive in Lösung

Bin ich mit einem WCF-Anwendung CoreApplication deren VS-Projekt hat einen Verweis auf AncillaryProject. CoreApplication verwendet eine Klasse Provider aus AncillaryProject; es ist jedoch nie explizit verwiesen wird - es ist aufgerufen, über Reflexion.

Mein problem ist, dass manchmal CoreApplication nicht finden Provider weil AncillaryProject nicht in den Ruf zu GetAssemblies(). Manchmal funktioniert es gut, aber manchmal (ich vermute, es sind, nach dem JIT) führt.

Hier mein original-code:

var providers = from d in AppDomain.CurrentDomain.GetAssemblies()
                from c in d.GetTypes()
                where typeof(BaseProvider).IsAssignableFrom(c)
                select c;

Nach einem Blick auf diese Frage, versuchte ich mit GetReferencedAssemblies():

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;

Merke ich, dass die Frage, auf die ich verwiesen löst das problem durch das dynamische laden Sie alle dll-Dateien im bin-Verzeichnis, aber das klingt nicht besonders gut zu mir. Gibt es einen besseren Weg, dies zu tun, oder ist .NETTO-einfach nicht geladen, die anderen Assemblys überhaupt? Wie funktioniert das unter der Haube, und gibt es irgendetwas, was ich dagegen tun kann?

  • Es wird nicht ganz Ihre Frage beantworten, aber es gibt einige relevante info in meiner Antwort auf diese Frage: stackoverflow.com/questions/9947882/... Andere als die Feststellung, dass "auf die" Baugruppen in VisualStudio nicht viel bedeuten, bei der Laufzeit, die Antwort unten über die Verwendung von Fusion-Logger ist eine gute Hilfe zu. Sie sollten in der Lage sein, einfach kopieren AncillaryProject.dll überall dort, wo die Fusion ist auf der Suche nach Baugruppen, aber es könnte einige Antworten liefern, wo es zu suchen.
  • Ahh - das gibt mir genau die Informationen, die ich wissen müssen.
  • Follow-up für wer Sie findet, diese Frage: in den dazwischen liegenden Jahren seit der Aufforderung, merkte ich, dass ich im Begriff war, über dieses in der komplett falsche Weg. Manchmal ist weniger magisch und explizit auflisten der Types Sie wollen, ist weit, weit besser. Dies ist eine jener Situationen.
InformationsquelleAutor eouw0o83hf | 2012-04-03
Schreibe einen Kommentar