Mam kolekcję bibliotek DLL (powiedzmy 20). Jak mogę znaleźć wszystkie biblioteki DLL, od których zależy jedna konkretna biblioteka DLL (na przykład DLL A)?Dowiedz się zależności wszystkich bibliotek DLL?
Odpowiedz
Jeśli masz na myśli programowanie, użyj Assembly.GetReferencedAssemblies
.
Możesz użyć tego rekurencyjnie, aby znaleźć wszystkie potrzebne zestawy. (Znajdziemy więc zależności X, a następnie zależności zależności, itd.)
Możesz użyć opiekuna zależności http://www.dependencywalker.com, aby to zrozumieć. Zwróć jednak uwagę na różnicę między x32 a x64.
Zależność Walker wolny narzędziowy, który skanuje wszystkie 32-bitowe lub 64-bitowe moduł Okna (EXE DLL OCX SYS, etc.) i tworzy się wykres hierarchicznej drzewa wszystkich modułów zależnych.
Ponieważ pytanie jest oznaczone jako "C#", zakładam, że mówimy o zarządzanych bibliotekach dll (złożeniach). W takim przypadku dependencywalker nie jest użyteczny. Jeśli chcesz to zrobić z programem, dobre są: dotPeek od JetBrians i Reflector od RedGate. Lub możesz nawet użyć inspektora obiektów w Visual Studio.
Jednak może to być długi proces i kłopotliwe zbyt. Napisałbym krótki skrypt C#/F #, który używa Assembly.GetReferencedAssemblies
, jak wspomniał Jon.
Jeśli zamiast tego chcesz zbadać zależności natywnych bibliotek DLL z programem (kod C#), musisz przejść do pliku PE (plik MS dll i format pliku exe) i jego IAT (tabela adresów importu). Nie jest łatwe, ale nie niemożliwe ...
Chciałbym zacząć here on MSDN i here zrozumieć sekcje PE i używać zarządzanej biblioteki, aby ją przeczytać (istnieje wiele, w tym niektóre z projektu Mono (mam na myśli Cecil , powinien działać z rodzimych plików binarnych zbyt); w przeszłości Użyłem this one z dobrej John Gough
Wszystkie podziękowania należą się poprzednim autorom za korzystanie z usługi Assembly.GetReferencedAssemblies
. To jest po prostu pisanie i kucie t C# aplikacja konsolowa działająca wyłącznie dla złożeń .NET. return 0
na złożeniach, które można było sprawdzić, a po pomyślnym zakończeniu, wyprowadza je do STDOUT. Cała reszta będzie return 1
i wydrukować jakiś rodzaj wyjścia błędu. Możesz pobrać istotę 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;
}
}
}
Zastosowanie:
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
wyjściowa:
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
- 1. .Informacje DLL DLL/narzędzie sprawdzania zależności
- 2. Opóźnienie Ładowanie bibliotek DLL
- 3. Zależności bibliotek przejściowych Batik
- 4. Używanie bibliotek DLL w VBScript
- 5. Jak programowo uzyskać zależności DLL
- 6. Dowiedz się ASP.NET MVC
- 7. M2E Załadowanie wszystkich zależności nie powiodło się.
- 8. Zależności bibliotek współdzielonych z distutils
- 9. Wymagania dotyczące bibliotek środowiska wykonawczego wysyłania/bibliotek DLL
- 10. Zmiana ścieżki wyszukiwania DLL dla statycznie połączonych bibliotek DLL
- 11. Jak odnieść się do zależności bibliotek zewnętrznych w qt qbs?
- 12. Przekroczono maksymalną liczbę bibliotek DLL w R
- 13. Narzędzie wiersza poleceń do znajdowania zależności Dll
- 14. Błąd: Maksymalna liczba bibliotek DLL osiągniętych
- 15. Dowiedz się, rozmiar obiektu .net
- 16. Dowiedz się, rozmiar obiektu polimorficznego
- 17. MSTest.exe nie kopiuje wszystkich potrzebnych bibliotek projektu?
- 18. Jak uzyskać nazwy bibliotek DLL używanych przez aplikację
- 19. Najlepsza praktyka do dokumentowania zależności bibliotek javascript
- 20. Specyficzna składnia zależności bibliotek zakresów w SBT?
- 21. Najlepsza praktyka w przypadku zależności bibliotek statycznych
- 22. jak skopiować zależności bibliotek JAR w Gradle
- 23. Konfiguracja zależności bibliotek Tomcat w narzędziu POM
- 24. Pakiet nie zawiera zależności dla bibliotek - OpenWRT
- 25. Dowiedz się, kiedy kursor jest przesuwany (UITextView)
- 26. Jak mogę uzyskać listę wszystkich niezarządzanych bibliotek dll, które zostały zarejestrowane przez narzędzie regsvr32?
- 27. Powielona biblioteka DLL w folderze "Wykryte zależności"
- 28. TeamCity nie kopiuje wszystkich bibliotek z odniesieniami
- 29. dll brakujące zależności w plikach Windows 7
- 30. Instalacja npm nie wydaje się uzyskać wszystkich zależności
trzeba będzie zawierać "za pomocą System.Reflection;" – greenfeet
@ green-end: Niekoniecznie - można użyć na przykład 'var assemblies = typeof (Foo) .Assembly.GetReferencedAssemblies();'. Ogólnie rzecz biorąc, nie warto dodawać wszystkich przestrzeni nazw używanych przez wszystkie typy wymienione w odpowiedziach - w szczególności nie wtedy, gdy istnieją odnośniki do typów, o których mowa.W pewnym sensie zakładam, że czytelnicy rozumieją wystarczającą ilość języka C#, aby wiedzieć, kiedy dodać dyrektywę "using". –
Czy można uniknąć dodawania 'using System.Reflection' dla zależności zależności? Czy nie musiałbyś w pewnym momencie wywoływać Assembly.LoadWithPartialName (lub czegoś podobnego)? – theoski