Abhängige Versammlungen bekommen?
-
27-10-2019 - |
Frage
Gibt es eine Möglichkeit, alle Baugruppen zu erhalten, die von einer bestimmten Baugruppe abhängen?
Pseudo:
Assembly a = GetAssembly();
var dependants = a.GetDependants();
Lösung
Wenn Sie die abhängigen Baugruppen aus der aktuellen Anwendungsdomäne finden möchten, können Sie so etwas wie die verwenden GetDependentAssemblies
Funktionen unten definiert:
private IEnumerable<Assembly> GetDependentAssemblies(Assembly analyzedAssembly)
{
return AppDomain.CurrentDomain.GetAssemblies()
.Where(a => GetNamesOfAssembliesReferencedBy(a)
.Contains(analyzedAssembly.FullName));
}
public IEnumerable<string> GetNamesOfAssembliesReferencedBy(Assembly assembly)
{
return assembly.GetReferencedAssemblies()
.Select(assemblyName => assemblyName.FullName);
}
Das analyzedAssembly
Der Parameter repräsentiert die Baugruppe, für die Sie alle Angehörigen finden möchten.
Andere Tipps
Programmatisch können Sie verwenden Mono.cecil um dies zu tun.
So etwas (beachten Sie, dass dies nicht funktioniert, wenn der Debugger beigefügt ist - z. B. wenn Sie es von innen gegenüber selbst ausführen):
public static IEnumerable<string> GetDependentAssembly(string assemblyFilePath)
{
//On my box, once I'd installed Mono, Mono.Cecil could be found at:
//C:\Program Files (x86)\Mono-2.10.8\lib\mono\gac\Mono.Cecil\0.9.4.0__0738eb9f132ed756\Mono.Cecil.dll
var assembly = AssemblyDefinition.ReadAssembly(assemblyFilePath);
return assembly.MainModule.AssemblyReferences.Select(reference => reference.FullName);
}
Wenn Sie dies nicht programmatisch tun müssen, dann Ndepend oder Reflektor kann Ihnen diese Informationen geben.
Definieren Sie zuerst Ihren Umfang, z. B.:
Alle Baugruppen im Bin -Verzeichnis meiner Anwendung
Alle Baugruppen im Bin -Verzeichnis meiner Anwendung + alle Baugruppen im GAC
Alle Baugruppen auf jeder Maschine der Welt.
Dann einfach (*) alle Baugruppen in Ihrem Bereich durch und überprüft, ob sie von Ihrer Zielbaugruppe abhängen.
Wenn Sie sowohl indirekte als auch direkte Referenzen wünschen, müssen Sie für alle festgelegten Baugruppen ausspülen und wiederholen.
(*) Ist möglicherweise nicht ganz so einfach, wenn Ihr Zielfernrohr 3 oben ist.
Mir ist keine eingebaute Möglichkeit bekannt, Abhängigkeiten zur Laufzeit zu erhalten. Ich denke also, dass die einfachste Lösung eine Erweiterungsmethode definieren und Code von verwenden Dies Anwendung. Ich habe vor einem Jahr eine Anwendung selbst verwendet. Aber unterlassen Sie Verwenden Sie Code davon.
Hoffe das hilft.