Как получить сильное имя сборки?

Мне нужно 'friend' библиотеку dll, которую я не создавал.

Я вижу в свойствах, что у него сильное имя, но как узнать, что такое сильное имя, поэтому я могу использовать его в System.Runtime.CompilerServices.InternalsVisibleTo?

Ответы

Ответ 1

Чтобы получить открытый ключ для сборки с сильным именем, используйте инструмент sn:

sn -Tp assembly.dll

Это покажет вам открытый ключ, который нужно добавить в атрибут InternalsVisibleTo. Если вы откроете командную строку Visual Studio, инструмент sn.exe уже будет в пути.

Однако, я бы поставил под сомнение то, что вы пытаетесь достичь. Если у вас есть скомпилированная сборка, которую вы не писали, добавление атрибута InternalsVisibleTo к вашему коду позволит ему получить доступ к внутренним компонентам вашего кода, но он не был бы скомпилирован без уже имеющегося доступа к другу. Если вы пытаетесь получить доступ к внутренним компонентам другой сборки, тогда атрибуту InternalsVisibleTo потребуется добавить к другой сборке - то, что вы не можете сделать, не перекомпилируя ее.

Ответ 2

Вам нужно указать полное имя и токен открытого ключа в файле AssemblyInfo.cs сборки, в котором вам нужен "друг":

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

Если у вас есть Reflector.NET или ildasm в руке, вы можете использовать его для просмотра этой информации.