Gibt es so etwas wie:
AppDomain.CurrentDomain.GetAssemblyByName("TheAssemblyName")
also anstatt durchzuschleifen AppDomain.CurrentDomain.GetAssemblies()
, könnten wir einfach die spezifische Baugruppe direkt erhalten.
c#
assemblies
Jronny
quelle
quelle
System.IO.FileNotFoundException
wenn die Baugruppe nicht geladen werden konnte.Ich habe mit LINQ gelöst
quelle
Es hängt davon ab, was Sie erreichen wollen.
Wenn Sie nur die Baugruppe erhalten möchten, sollten Sie anrufen
System.Reflection.Assembly.Load()
(wie bereits erwähnt). Dies liegt daran, dass .NET automatisch überprüft, ob die Assembly bereits in die aktuelle AppDomain geladen wurde, und sie dann nicht erneut lädt, wenn dies der Fall war.Wenn Sie nur versuchen zu überprüfen, ob die Baugruppe geladen wurde oder nicht (möglicherweise aus diagnostischen Gründen), müssen Sie alle geladenen Baugruppen durchlaufen.
Ein weiterer Grund, warum Sie eine Schleife durchführen möchten, besteht darin, dass Sie nur einige der Assembly-Informationen kennen (z. B. sind Sie sich der Version nicht sicher). Das heißt, Sie wissen genug, um "es zu erkennen, wenn Sie es sehen", aber nicht genug, um es zu laden. Das ist jedoch ein ziemlich dunkles und unwahrscheinliches Szenario.
quelle
Für diejenigen, die nur auf die Metadaten (Version usw.) der Assembly zugreifen müssen, lesen Sie Assembly.ReflectionOnlyLoad (Name), mit dem nur die Metadaten geladen werden können, wodurch möglicherweise Speicher und E / A eingespart werden.
quelle
Wenn dies eine Assembly ist, auf die Sie verwiesen haben, schreibe ich gerne eine Klasse wie die folgende:
und wann immer Sie einen Verweis auf diese Baugruppe benötigen:
quelle
options.RegisterFromAssembly(Application.AssemblyReference.Value)
Sie können eine Erweiterungsmethode schreiben, die genau das tut, was Sie benötigen.
Diese Methode listet geladene Assemblys nur auf . Wenn Sie sie möglicherweise laden müssen, verwenden Sie sie
Assembly.Load
aus der akzeptierten Antwort.Dann rufen Sie diese Methode in einer AppDomain wie folgt auf:
Wenn SomeAssembly in die aktuelle AppDomain geladen wird, gibt die Methode diese zurück, andernfalls wird sie zurückgegeben
null
.quelle
Schauen Sie sich die System.Reflection.Assembly-Klasse an, insbesondere die Load-Methode: MSDN
quelle