Używam aplikacji WCF CoreApplication
, której projekt VS ma odniesienie do AncillaryProject
. CoreApplication
używa klasy Provider
z AncillaryProject
; nie jest to jednak nigdy jawnie przywoływane - jest wywoływane za pomocą Reflection.Nie znaleziono zestawu odniesienia - jak uzyskać wszystkie biblioteki DLL uwzględnione w rozwiązaniu
Moim problemem jest to, że czasamiCoreApplication
nie znajdzie Provider
ponieważ AncillaryProject
nie pojawią się w zaproszeniu do GetAssemblies()
. Czasami działa dobrze, ale czasami (domyślam się, że może to być po JIT) nie działa.
Oto mój oryginalny kod:
var providers = from d in AppDomain.CurrentDomain.GetAssemblies()
from c in d.GetTypes()
where typeof(BaseProvider).IsAssignableFrom(c)
select c;
Po obejrzeniu this question, próbowałem za pomocą 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;
Zdaję sobie sprawę, że kwestia ja odwoływać rozwiązuje ten problem poprzez dynamicznie ładuje wszystkie pliki dll w katalog bin, ale to nie brzmi szczególnie dobrze dla mnie. Czy istnieje lepszy sposób na zrobienie tego, czy też .NET po prostu nie ładuje w ogóle innych Złożenia? Jak to działa pod maską i czy jest coś, co mogę z tym zrobić?
To nie będzie całkowicie odpowiedzieć na to pytanie, ale istnieją pewne istotne informacje w moją odpowiedź na to pytanie: http://stackoverflow.com/questions/9947882/ get-assemblies-without-tworzenie ich-egzemplarzy/9948404 # comment12730056_9948404 Poza zauważeniem, że zespoły "referencyjne" w VisualStudio nie mają większego znaczenia w czasie wykonywania, odpowiedź poniżej na temat używania Fusion Logger jest również dobrą pomocą. Powinieneś być w stanie skopiować AncillaryProject.dll wszędzie tam, gdzie Fusion szuka złożeń, ale może dostarczyć odpowiedzi na pytanie, gdzie szuka. – CodingWithSpike
Ahh - to daje mi dokładnie te informacje, które muszę znać. – eouw0o83hf
Obserwacja dla każdego, kto znajdzie to pytanie: w ciągu kolejnych lat od zadawania tego, zdałem sobie sprawę, że podchodzę do tego w zupełnie niewłaściwy sposób. Czasami bycie mniej magicznym i wyraźne wymienianie "rodzaju", który chcesz, jest o wiele lepsze. To jedna z tych sytuacji. – eouw0o83hf