2011-08-12 17 views
15

Potrzebuję do "przyjaciela" biblioteki DLL, której nie napisałem.Jak uzyskać silną nazwę zespołu?

Widzę we właściwościach, że ma silną nazwę, ale jak mogę się dowiedzieć, jaka jest silna nazwa, więc mogę jej użyć w System.Runtime.CompilerServices.InternalsVisibleTo?

Odpowiedz

14

aby uzyskać klucz publiczny silnej nazwie zespołu, użyj narzędzia sn:

sn -Tp assembly.dll 

To pokaże, że klucz publiczny musisz wpisać atrybut InternalsVisibleTo. Po otwarciu wiersza polecenia programu Visual Studio narzędzie sn.exe będzie już znajdować się w ścieżce.

Jednak chciałbym zapytać, co próbujesz osiągnąć. Jeśli masz skompilowany zespół, którego nie pisałeś, dodanie do kodu kodu atrybutu InternalsVisibleTo pozwoli mu uzyskać dostęp do elementów wewnętrznych twojego kodu, ale nie skompilowałoby go bez uzyskania dostępu do znajomych. Jeśli próbujesz uzyskać dostęp do wnętrza innego zespołu, to atrybut będzie wymagał dodania do innego zespołu - czegoś, czego nie możesz zrobić bez rekompilacji ..

+0

Zestaw, który próbuję użyć, jest używany odbicia od mojego kodu, i łamie się, gdy kod odbicia odkryje, że jego działanie przeciwko klasie wewnętrznej, do której nie powinien mieć dostępu. Te błędy są w czasie wykonywania, a nie podczas kompilacji. –

+0

Dobre pytanie. –

2

Trzeba podać pełną nazwę i klucz publiczny wyraz w pliku AssemblyInfo.cs zgromadzeń ty „Potrzebuję przyjaciela”:

[assembly: InternalsVisibleTo("FullAssemblyName, PublicKey=....",)] 

Jeśli masz Reflector.NET lub ildasm w ręku można go użyć aby wyświetlić te informacje

Powiązane problemy