Programing

.Net 어셈블리의 PublicKeyToken 얻기

lottogame 2020. 6. 10. 23:01
반응형

.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)"

And check the "Use Output window" option.


The simplest way for me is to use ILSpy.

When you drag & drop the assembly on its window and select the dropped assembly on the the left, you can see the public key token on the right side of the window.

(I also think that the newer versions will also display the public key of the signature, if you ever need that one... See here: https://github.com/icsharpcode/ILSpy/issues/610#issuecomment-111189234. Good stuff! ;))


1) The command is C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\sn -T {your.dll}

In the above example, the Microsoft SDK resides in C:\Program Files\Microsoft SDKs\Windows\v6.0A. Your environment may differ.

2) To get the public key token of any of your project, you can add sn.exe as part of your External Tools in Visual Studio. The steps are shown in this Microsoft link: How to: Create a Tool to Get the Public Key of an Assembly


As an alternative, you can also use linq like this -

    string key = string.Join ("",assembly
                                .GetName()
                                .GetPublicKeyToken()
                                .Select (b => b.ToString ("x2")));

In case someone was looking for the assembly Public Key (like me), not the Public Key Token - using sn.exe works great, except you have to use -Tp switch, which will return both the Public Key and Public Key Token - more at https://msdn.microsoft.com/en-us/library/office/ee539398(v=office.14).aspx .


An alternate method would be if you have decompiler, just look it up in there, they usually provide the public key. I have looked at .Net Reflector, Telerik Just Decompile and ILSpy just decompile they seem to have the public key token displayed.


You can use the Ildasm.exe (IL Disassembler) to examine the assembly's metadata, which contains the fully qualified name.

Following MSDN: https://msdn.microsoft.com/en-us/library/2exyydhb(v=vs.110).aspx

참고URL : https://stackoverflow.com/questions/3045033/getting-the-publickeytoken-of-net-assemblies

반응형