/ / Referenced Assembly Not Found - Ako dostať všetky DLL obsiahnuté v riešení - c #, .net, reflexia, zostavy

Odkazované zhromaždenie nebolo nájdené - Ako získať všetky knižnice DLL zahrnuté v riešení - c #, .net, reflexie, zostavy

Bežím aplikáciu WCF CoreApplication ktorého projekt VS má odkaz na AncillaryProject. CoreApplication používa triedu Provider z AncillaryProject; nikdy však nie je výslovne uvedený - je vyvolaný pomocou Reflection.

Môj problém je to niekedy CoreApplication nedokáže nájsť Provider pretože AncillaryProject neprichádza vo výzve GetAssemblies(). Niekedy to funguje dobre, ale niekedy (hádam to môže byť po JIT) sa to nepodarí.

Tu je môj pôvodný kód:

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

Po pohľade na táto otázka, Snažil som sa použiť 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;

Uvedomujem si, že otázka, na ktorú som odkazoval, rieši problém dynamickým načítaním všetkých dll súborov do adresára bin, ale to mi neznie obzvlášť dobre. Existuje lepší spôsob ako to urobiť?, alebo .NET jednoducho nenačíta ďalšie zhromaždenia? Ako to funguje pod kapotou, a môžem s tým niečo urobiť?

odpovede:

9 pre odpoveď č. 1

Podľa dokumentácie spoločnosti Microsoft AppDomain.CurrentDomain.GetAssemblies() získa zostavy, ktoré boli načítané do kontextu vykonávania tejto aplikačnej domény. O AppDomain.CurrentDomain.GetAssemblies ()

Zdá sa, že musíte zmeniť stratégiu načítania potrebných zostáv z používania domény na hľadanie DLL v priečinku aplikácií.

Našiel som diskusiu o podobnom probléme tu


3 pre odpoveď č. 2

Môžete spracovať udalosť AssemblyResolve a načítať ju AncillaryProject.dll v takom prípade obsluha

http://msdn.microsoft.com/en-us/library/ff527268.aspx


3 pre odpoveď № 3

Mali by ste si stiahnuť .NET Development SDK a začať FuslogVw.exe (prehliadač fúznych protokolov). Bude hlásiť aplikáciu CLR, ktorá sa pokúša vyriešiť závislosti .NET. Ukáže vám, že sa pozerá a ako hodnotí kandidátov nachádzajúcich sa na týchto miestach.