Jak uzyskać ścieżki wszystkich zestawów, do których odwołuje się aktualnie wykonywany zespół? GetReferencedAssmblies()
daje mi AssemblyName[]
s. Jak dotrzeć do miejsca, z którego zostały załadowane, od tego miejsca?Uzyskaj ścieżki wszystkich odwoływanych zespołów
Odpowiedz
Nie możesz wiedzieć, dopóki zespół jest załadowany. Algorytm montażu jest skomplikowany i nie można jednoznacznie odgadnąć, co zrobi. Wywołanie nadpisania Assembly.Load(AssemblyName)
spowoduje wyświetlenie odniesienia do złożenia, a jego właściwość Położenie poinformuje, czego potrzebujesz.
Jednak naprawdę nie chce załadować zespoły z góry, przed kompilator JIT robi. Jest nieefektywny, a prawdopodobieństwo problemów nie wynosi zero. Możesz na przykład wywołać zdarzenie AppDomain.AssemblyResolve
, zanim program będzie gotowy na odpowiedź. Unikaj zadawania tego pytania.
Wielkie dzięki za właściwą odpowiedź. –
Właściwość CodeBase
powinna podać pełną nazwę ścieżki.
Czy próbowałeś? –
Niestety, CodeBase zwraca null na każdym zespole referencyjnym. :-) –
Można uzyskać lokalizację URL zespołu tak:
Assembly.GetExecutingAssembly().GetReferencedAssemblies()[0].CodeBase
CodeBase zwraca null. Rozwiązaniem jest post, z którym JasonEvans łączył się w swoim komentarzu do oryginalnego postu. Również Hans Passant ma właściwą odpowiedź. –
Po odpowiedzi Hansa Passanta, a ponieważ właściwość CodeBase
zawsze zawierała null
, wpadłem na to. Może nie znaleźć wszystkich złożeń, ponieważ mogą one nie być już załadowane. W mojej sytuacji, musiałem znaleźć wszystkie odniesienia do poprzednio załadowanego zespołu, więc to działa dobrze:
IEnumerable<string> GetAssemblyFiles(Assembly assembly)
{
var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (var assemblyName in assembly.GetReferencedAssemblies())
yield return loadedAssemblies.SingleOrDefault(a => a.FullName == assemblyName.FullName)?.Location;
}
Zastosowanie:
var assemblyFiles = GetAssemblyFiles(typeof(MyClass).Assembly);
- 1. sposób ładowania wszystkich zespołów z katalogu/bin
- 2. Zastępowanie odwoływanych atrybutów stylu
- 3. Uzyskaj ścieżkę UNC ze ścieżki lokalnej lub zmapowanej ścieżki
- 4. Uzyskaj wszystkich rodziców dla dziecka
- 5. Uzyskaj nazwę ścieżki od href w JavaScript
- 6. . Priorytety ładowania zespołów .NET
- 7. Procesory zespołów i procesorów wielordzeniowych
- 8. Odbicie z T4 zespołów get
- 9. pakietu Java vs C# zespołów
- 10. Uzyskaj listę wszystkich naciśnięć z Git
- 11. Uzyskaj dostęp do wszystkich właściwości stylu CSS?
- 12. Uzyskaj nazwy wszystkich uchwytów w bieżącym procesie
- 13. Uzyskaj adres URL wszystkich elementów dotkniętych WKWebView
- 14. Uzyskaj identyfikatory wszystkich obiektów na liście
- 15. Uzyskaj wszystkich członków w posortowanym zestawie
- 16. Uzyskaj adres URL aktualnej ścieżki w terminalu SSH
- 17. Uzyskaj odniesienie do pakietu ze ścieżki w Swift
- 18. Uzyskaj nazwę pliku ze ścieżki w skrypcie Bash
- 19. Sprężyna MVC 3, Interceptor na wszystkich wykluczających niektóre zdefiniowane ścieżki
- 20. Jak mogę wyświetlić ścieżki do wszystkich otwartych buforów vima?
- 21. Zmiana ścieżki lokalizacji AngularJs bez resetowania wszystkich kontrolerów
- 22. PostgreSQL ltree znajdź wszystkich przodków danej etykiety (bez ścieżki)
- 23. Jak skonfigurować ustawienia resharperu dla poszczególnych zespołów?
- 24. Tworzenie zespołów zasobów za pomocą AssemblyBuilder
- 25. Używanie plików zasobów zamiast zespołów satelitarnych
- 26. Uczyń klasy wewnętrzne widocznymi dla innych zespołów
- 27. Ścieżki pomocników ścieżki dynamicznej
- 28. Uzyskaj wartości wszystkich wejść z tą samą klasą co tablica
- 29. Uzyskaj listę wszystkich prywatnych kanałów z API Slack
- 30. Uzyskaj dostęp do wszystkich fasoli szparagowych danego typu.
Spróbuj http://stackoverflow.com/questions/1582510/ get-pathes-of-assemblies-used-in-type –
Wielkie dzięki. To rozwiązało to dla mnie. –
Aby uzyskać w pełni działający przykład, jak uzyskać wszystkie odwołania do złożeń, rekurencyjnie, zobacz http://stackoverflow.com/questions/383686/how-do-you-loop-through-currently-loaded- assemblies/26300241#26300241. – Contango