[.net] .Net 어셈블리의 PublicKeyToken 얻기

어셈블리의 공개 키 토큰을 찾는 가장 간단한 방법은 무엇입니까?

내가 생각할 수있는 가장 간단한 방법은 마우스 오른쪽 버튼을 클릭하고 공개 키를 얻는 것입니다.하지만이 기능이 없습니다. 아마도 Visual Studio Extension이 있습니까?

확장 프로그램을 사용할 수 있으면 Visual Studio 2010을 사용하고 있습니다.



답변

명령 프롬프트를 열고 Visual Studio 버전 및 운영 체제 아키텍처에 따라 다음 줄 중 하나를 입력하십시오.

32 비트 Windows에서 VS 2008 :

"%ProgramFiles%\Microsoft SDKs\Windows\v6.0A\bin\sn.exe" -T <assemblyname>

64 비트 Windows의 VS 2008 :

"%ProgramFiles(x86)%\Microsoft SDKs\Windows\v6.0A\bin\sn.exe" -T <assemblyname>

32 비트 Windows에서 VS 2010 :

"%ProgramFiles%\Microsoft SDKs\Windows\v7.0A\bin\sn.exe" -T <assemblyname>

64 비트 Windows에서 VS 2010 :

"%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.0A\bin\sn.exe" -T <assemblyname>

32 비트 Windows에서 VS 2012 :

"%ProgramFiles%\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe" -T <assemblyname>

64 비트 Windows에서 VS 2012 :

"%ProgramFiles(x86)%\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe" -T <assemblyname>

64 비트 Windows에서 VS 2015 :

"%ProgramFiles(x86)%\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\sn.exe" -T <assemblyname>

버전 VS2012 +의 경우 sn.exe 응용 프로그램은 더 이상 저장소가 아니라 하위 폴더에 있습니다. 또한 64 비트의 경우 (x86) 폴더를 지정해야합니다.

Visual Studio 명령 프롬프트를 사용하려면 다음을 입력하십시오.

sn -T <assembly> 

어디 <assemblyname> 관심이있는 어셈블리의 전체 파일 경로이며 공백이 있으면 따옴표로 묶습니다.

다음과 같이 VS에서 외부 도구로 추가 할 수 있습니다 :
http://blogs.msdn.com/b/miah/archive/2008/02/19/visual-studio-tip-get-public-key-token -s-a-stong-named-assembly.aspx


답변

다른 옵션 :

PowerShell을 사용하면 다음과 같은 내용을 알 수 있습니다.

PS C:\Users\Pravat> ([system.reflection.assembly]::loadfile("C:\Program Files (x86)\MySQL\Connector NET 6.6.5\Assemblies\v4.0\MySql.Data.dll")).FullName

처럼

PS C:\Users\Pravat> ([system.reflection.assembly]::loadfile("dll full path")).FullName

와 같이 나타납니다

MySql.Data, 버전 = 6.6.5.0, Culture = neutral, PublicKeyToken = c5687fc88969c44d


답변

라이브러리가 VS 프로젝트에 포함 된 경우 .cproj파일 을 확인할 수 있습니다 ( 예 :

<ItemGroup>
    <Reference Include="Microsoft.Dynamic, Version=1.1.0.20, Culture=neutral, PublicKeyToken=7f709c5b713576e1, processorArchitecture=MSIL">
...


답변

프로젝트에 어셈블리를 포함시킨 경우 다음을 수행 할 수 있습니다.

            var assemblies =
                AppDomain.CurrentDomain.GetAssemblies();


            foreach (var assem in assemblies)
            {
                    Console.WriteLine(assem.FullName);
            }


답변

C #을 통해 쉽게 얻을 수 있습니다.

private static string GetPublicKeyTokenFromAssembly(Assembly assembly)
{
    var bytes = assembly.GetName().GetPublicKeyToken();
    if (bytes == null || bytes.Length == 0)
        return "None";

    var publicKeyToken = string.Empty;
    for (int i = 0; i < bytes.GetLength(0); i++)
        publicKeyToken += string.Format("{0:x2}", bytes[i]);

    return publicKeyToken;
}


답변

다음과 같이이를 Visual Studio에 외부 도구로 추가 할 수 있습니다.

표제:

Get PublicKeyToken

명령:

c:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\sn.exe

(버전마다 경로가 다를 수 있음)

인수 :

-T "$(TargetPath)"

출력 창 사용 “옵션을 확인하십시오 .


답변

가장 간단한 방법은 ILSpy 를 사용하는 입니다.

창에서 어셈블리를 끌어다 놓고 왼쪽에서 삭제 된 어셈블리를 선택하면 창의 오른쪽에 공개 키 토큰이 표시됩니다.

(필요한 경우 최신 버전도 서명의 공개 키를 표시한다고 생각합니다 . 여기를 참조하십시오 : https://github.com/icsharpcode/ILSpy/issues/610#issuecomment-111189234 . 좋은 물건!;))