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();
War es hilfreich?

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.:

  1. Alle Baugruppen im Bin -Verzeichnis meiner Anwendung

  2. Alle Baugruppen im Bin -Verzeichnis meiner Anwendung + alle Baugruppen im GAC

  3. 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top