Вопрос

Есть ли способ получить все сборки, которые зависят от данной сборки?

Псевдо:

Assembly a = GetAssembly();
var dependants = a.GetDependants();
Это было полезно?

Решение

Если вы хотите найти зависимые сборки из текущего домена приложения, вы можете использовать что -то вроде GetDependentAssemblies Функция определена ниже:

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

А analyzedAssembly Параметр представляет сборку, для которой вы хотите найти всех иждивенцев.

Другие советы

Программатически вы можете использовать Mono.cecil сделать это.

Что -то подобное (обратите внимание, что это не сработает, если отладчик прикреплен - например, если вы запустите его изнутри против самого):

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

Если вам не нужно делать это программатически, тогда Ndepend или же Отражатель может дать вам эту информацию.

Сначала определите свою область, например:

  1. Все сборки в каталоге моего приложения

  2. Все сборки в каталоге моего приложения + все сборки в GAC

  3. Все сборки на любой машине в мире.

Затем просто (*) переверните все сборки в вашей области и используйте отражение, чтобы проверить, зависят ли они от вашей целевой сборки.

Если вы хотите косвенных, а также прямых ссылок, вам придется промыть и повторить для всех найденных вами сборок.

(*) Может быть не так просто, если ваша область 3 выше.

Я не знаю никакой встроенной возможности получить зависимости во время выполнения. Поэтому я думаю, что самое простое решение - определить метод расширения и использовать код из это заявление. Я использовал саму приложение много лет назад. Но не надо Используйте код этого.

Надеюсь это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top