Muszę uzyskać dostęp do zestawu mojego projektu w C # .NET2.0.
Widzę identyfikator GUID w oknie dialogowym „Informacje o zespole” we właściwościach projektu, aw tej chwili właśnie skopiowałem go do stałej w kodzie. GUID nigdy się nie zmieni, więc nie jest to takie złe rozwiązanie, ale dobrze byłoby uzyskać do niego bezpośredni dostęp. Czy jest na to sposób?
ctrl+.
jest twoim przyjacielemSystem.AppDomain.DomainManager.get returned null.
za prostą aplikację konsolową. Wydaje się, żeAssembly.GetEntryAssembly()
jest to preferowany sposób.Innym sposobem jest użycie Marshal.GetTypeLibGuidForAssembly .
Według MSDN:
źródło
Assembly.ReflectionOnlyLoad
przypadku, gdy zestawy zależne nie są ładowane.System.Runtime.InteropServices.Marshal.GetTypeLibGuidForAssembly(System.Reflection.Assembly.GetExecutingAssembly()).ToString()
. Wygląda na znacznie prostszą niż inna metoda. Czy są jakieś wady?Lub równie proste:
Pracuje dla mnie...
źródło
Powinno być możliwe odczytanie atrybutu Guid zestawu za pośrednictwem odbicia. Spowoduje to pobranie identyfikatora GUID dla bieżącego zestawu
Możesz zastąpić GuidAttribute innymi atrybutami, jeśli chcesz czytać takie rzeczy, jak AssemblyTitle, AssemblyVersion itp.
Możesz także załadować inny zestaw (Assembly.LoadFrom i all) zamiast pobierania bieżącego zestawu - jeśli chcesz odczytać te atrybuty zestawów zewnętrznych (np. - podczas ładowania wtyczki)
źródło
Na wypadek, gdyby ktoś inny szukał nieszablonowego działającego przykładu, właśnie tego użyłem na podstawie poprzednich odpowiedzi.
Aktualizacja:
Ponieważ zwróciło to trochę uwagi, postanowiłem uwzględnić inny sposób robienia tego, którego używam. W ten sposób możesz używać go z klasy statycznej:
źródło
Aby uzyskać identyfikator aplikacji, możesz użyć następującego wiersza kodu:
W tym celu musisz dołączyć rozszerzenie
System.Runtime.InteropServices;
źródło
Nie ma tu szczęścia z innymi odpowiedziami, ale udało mi się to rozwiązać z tą ładną jedną linijką:
Mam nadzieję że to pomoże!
źródło