Domanda

C'è un modo per ottenere tutti i gruppi che dipendono da un determinato assemblaggio?

Pseudo:

Assembly a = GetAssembly();
var dependants = a.GetDependants();
È stato utile?

Soluzione

Se si desidera trovare gli assemblaggi dipendenti dal dominio dell'applicazione corrente, potresti usare qualcosa come il GetDependentAssemblies funzione definita di seguito:

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);
}

Il analyzedAssembly Il parametro rappresenta l'assemblaggio per il quale si desidera trovare tutte le persone a carico.

Altri suggerimenti

Programmaticamente, puoi usare Mono.cecil per farlo.

Qualcosa di simile a questo (nota che non funzionerà se il debugger è allegato - ad esempio se lo si esegue dall'interno rispetto a sé):

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);
}

Se non hai bisogno di farlo in modo programmatico, allora Ndipend o Riflettore può darti queste informazioni.

Definisci prima il tuo ambito, ad esempio:

  1. Tutti gli assembly nella directory del cestino della mia applicazione

  2. Tutti gli assembly nella directory bin della mia applicazione + tutti gli assemblys nel GAC

  3. Tutti i gruppi su qualsiasi macchina del mondo.

Quindi semplicemente (*) iterare attraverso tutti i gruppi nell'ambito e utilizzare la riflessione per verificare se dipendono dal gruppo target.

Se vuoi riferimenti indiretti e diretti, dovrai sciacquare e ripetere per tutti gli assiemi che trovi.

(*) Potrebbe non essere così semplice se il tuo ambito è 3 sopra.

Non sono a conoscenza di alcuna possibilità integrata di ottenere dipendenze in fase di esecuzione. Quindi penso che la soluzione più semplice sia definire un metodo di estensione e utilizzare il codice questo applicazione. Ho usato un'applicazione stessa un anno fa. Ma non usa il codice.

Spero che sia di aiuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top