2013-02-27 1 views

ответ

34

Если вы имеете в виду программно, используйте Assembly.GetReferencedAssemblies.

Вы можете использовать это рекурсивно, чтобы найти все необходимые вам сборки. (Таким образом, вы находите зависимости X, затем зависимости зависимостей и т. Д.)

+0

вам нужно будет включать в себя "с использованием System.Reflection;" – greenfeet

+4

@greenfeet: Не обязательно - вы можете использовать 'var assemblylies = typeof (Foo) .Assembly.GetReferencedAssemblies();' например. В общем, не стоит добавлять все пространства имен, используемые всеми типами, на которые ссылаются ответы, особенно если нет ссылок на типы, о которых идет речь.Я предполагаю, что читатели понимают достаточно языка C#, чтобы знать, когда добавлять директиву 'using'. –

+0

Не могли бы вы добавить 'using System.Reflection' для зависимостей зависимостей? Не нужно ли в какой-то момент ссылаться на Assembly.LoadWithPartialName (или что-то подобное)? – theoski

6

Вы можете использовать ходу зависимых http://www.dependencywalker.com, чтобы понять это. Однако обратите внимание на разницу между x32 и x64.

Dependency Walker является инструментом, который сканирует любой 32-битный или 64-битные модуль для Windows (EXE, DLL, OCX, SYS и т.д.) и строит иерархическую диаграмму дерева всех зависимых модулей.

10

Поскольку вопрос отмечен как «C#», я бы предположил, что вы говорите об управляемых DLL (сборках). В этом случае зависимый пользователь не является полезным. Если вы хотите сделать это с помощью программы, хорошими являются dotPeek от JetBrians и Reflector от RedGate. Или вы даже можете использовать инспектора объектов в Visual Studio.

Однако, это может быть долгий процесс и громоздкий. Я бы написал короткий скрипт C#/F #, который использует Assembly.GetReferencedAssemblies, как сказал Джон.

Если вместо этого вы хотите изучить родные DLL-зависимости с помощью программы (код C#), вам необходимо пройти проверку файла PE (файл MS dll и exe) и его таблицу адресов импорта (IAT). Не легко, но не невозможно ...

Я хотел бы начать here on MSDN и here понять PE разделов, и использовать управляемую библиотеку, чтобы прочитать его (там много, в том числе некоторые из проекта Mono (я имею в виду Cecil , он должен работать с носителями бинарных файлов тоже), в прошлом я использовал this one от хорошего Джон Гоу

3

для сборок .NET, потрясающий инструмент для просмотра сборки сборка зависит от является AsmSpy

+2

В нем не указаны косвенные сборки. – BartoszKP

2
..

Все ответы на вопросы относятся к предыдущим авторам за использование Assembly.GetReferencedAssemblies. Это всего лишь запись и подделка t C# консольное приложение, которое работает исключительно для сборки .NET. return 0 на сборках, которые вы смогли проверить, и при успешном выполнении выводит их в STDOUT. Все остальное будет return 1 и напечатать какой-то выход ошибки. Вы можете захватить сущность here.

using System; 
using System.Reflection; 
using System.IO; 
namespace DotNetInspectorGadget 
{ 
    class DotNetInspectorGadget 
    { 
     static int Main(string[] args) 
     { 
      if(args.GetLength(0) < 1) 
      { 
      Console.WriteLine("Add a single parameter that is your" + 
      " path to the file you want inspected."); 
      return 1; 
      } 
      try { 
       var assemblies = Assembly.LoadFile(@args[0]).GetReferencedAssemblies(); 

       if (assemblies.GetLength(0) > 0) 
       { 
        foreach (var assembly in assemblies) 
        { 
        Console.WriteLine(assembly); 
        } 
        return 0; 
       } 
      } 
      catch(Exception e) { 
      Console.WriteLine("An exception occurred: {0}", e.Message); 
      return 1; 
      } finally{} 

      return 1; 
     } 
    } 
} 

Использование:

call %cd%\dotnet_inspector_gadget.exe C:\Windows\Microsoft.NET\assembly\GAC_64\Microsoft.ConfigCI.Commands\v4.0_10.0.0.0__31bf3856ad364e35\Microsoft.ConfigCI.Commands.dll 

Выход:

mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 
System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a