programing

공용 키를 찾는 방법특정 dll에 대한 토큰?

newsource 2023. 5. 25. 22:08

공용 키를 찾는 방법특정 dll에 대한 토큰?

web.config 파일에서 다음과 같은 공급자를 다시 만들어야 합니다.

<membership defaultProvider="AspNetSqlMemProvider">
  <providers>
    <clear/>
    <add connectionStringName="TRAQDBConnectionString" applicationName="TRAQ" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="0"
         name="AspNetSqlMemProvider"
         type="System.Web.Security.SqlMembershipProvider, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"
    />
  </providers>
</membership>

그러나 이 어셈블리를 로드할 수 없다는 런타임 오류가 발생하며, 잘못된 PublicKey를 가지고 있기 때문인 것 같습니다.토큰. 공용 키를 조회하려면 어떻게 해야 합니까?내 집회를 위한 토큰?

아니면, 제가 완전히 잘못된 방향으로 가고 있는 것일까요?

PowerShell을 사용하여 다음 명령을 실행할 수 있습니다.

([system.reflection.assembly]::loadfile("C:\..\Full_Path\..\MyDLL.dll")).FullName

출력은 버전, 문화공개 키를 제공합니다.아래 표시된 토큰:

MyDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a

sn.exe 유틸리티 사용:

sn -T YourAssembly.dll

또는 Reflector에서 어셈블리를 로드합니다.

프로젝트에 DLL을 추가한 경우 csproj 파일을 열고 참조 태그를 볼 수 있습니다.

예:

<Reference Include="System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

sn -T <assembly>Visual Studio 명령줄에 있습니다.어셈블리가 글로벌 어셈블리 캐시에 설치된 경우 다음으로 이동하는 것이 더 쉽습니다.C:\Windows\assemblyGAC 어셈블리 목록에서 찾을 수 있습니다.

구체적인 경우에는 전체 이름 유형과 어셈블리 참조를 혼합할 수 있습니다. MSDN을 확인해 보는 것이 좋습니다.

.NET Framework 툴을 사용하면 매우 간단합니다.sn.exeVisual Studio 2008 명령 프롬프트를 열고 공용 키를 가져올 dll 폴더를 가리킵니다.

다음 명령을 사용합니다.

sn –TmyDLL.dll

공개 키 토큰이 제공됩니다.어셈블리에 강력한 서명을 해야 하는 경우에만 작동하는 한 가지 사항을 기억하십시오.

C:\WINNT\Microsoft.NET\프레임워크\v3.sn -T EdmGen.exe
Microsoft (R) .NET Framework 강력한 이름 유틸리티 버전 3.5.21022.8저작권 (c) Microsoft Corporation.무단 전재 금지.

공개 키 토큰은 b77a5c561934e089입니다.

Windows 탐색기를 사용하는 경우 C:로 이동합니다.\Windows\assembly, 필요한 파일을 찾습니다.속성에서 공용 키를 복사할 수 있습니다.상품권.

이는 설치 중인 Visual Studio나 다른 유틸리티에 의존하지 않습니다.

정보를 추가하기만 하면, 언급된 위치에서 sn.exe 유틸리티를 찾을 수 없습니다. 제 경우에는 C:\Program Files(x86)\Microsoft SDKs\Windows\v7.0에 있습니다.A\bin

어셈블리.파일 로드(@"C:\Windows\Microsoft).NET\Framework\v4.0.30319\system.data.dll").전체 이름

결과적으로 발생합니다.

System.Data, Version=4.0.0.0, Culture=neutral, PublicKey토큰=b77a5c561934e089

@CRICE가 말했듯이 아래 방법을 사용하여 publicKey가 있는 종속 어셈블리 목록을 가져올 수 있습니다.상품권

public static int DependencyInfo(string args) 
{
    Console.WriteLine(Assembly.LoadFile(args).FullName);
    Console.WriteLine(Assembly.LoadFile(args).GetCustomAttributes(typeof(System.Runtime.Versioning.TargetFrameworkAttribute), false).SingleOrDefault());
    try {
        var assemblies = Assembly.LoadFile(args).GetReferencedAssemblies(); 

        if (assemblies.GetLength(0) > 0)
        {
            foreach (var assembly in assemblies)
            {
                Console.WriteLine(" - " + assembly.FullName + ", ProcessorArchitecture=" + assembly.ProcessorArchitecture);             
            }
            return 0;
        }
    }
    catch(Exception e) {
        Console.WriteLine("An exception occurred: {0}", e.Message);
        return 1;
    } 
    finally{}

    return 1;
}

나는 일반적으로 그것을 LinqPad 스크립트로 사용합니다.

DependencyInfo("@c:\MyAssembly.dll"); 에서.

만약 당신이 누겟에 게시된 어떤 것에 대한 토큰을 원한다면,

예를 들어, OxyPlot입니다.Wpf:

https://nuget.info/packages/OxyPlot.Wpf/2.1.0

DLL 및 세부 정보를 검색합니다.

다른 패키지의 URL에서 nuget pkg 이름과 버전을 변경하기만 하면 됩니다.

철하다, 철하다, 철하다 등dll-assemblyinfo의 신의에$PATH:

#!/bin/sh

f=$(readlink -f "$1")

{
echo "using System.Reflection;"
echo "Assembly.LoadFile(\"$f\");"
} | csharp

chmod +x 그러면

$ dll-assemblyinfo packages/System.Buffers.4.5.1/lib/netstandard2.0/System.Buffers.dll
System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51

다음과 같은 방법으로 확인할 수도 있습니다.

실행으로 이동 : 공용 키가 필요한 DLL의 경로를 입력합니다.두 개의 파일을 찾을 수 있습니다: 1. __AssemblyInfo_.ini 2. DLL 파일

이 __어셈블리 열기메모장의 Info_.ini 파일에서 공개 키 토큰을 볼 수 있습니다.

MSVC 등에 의해 생성된 DLL의 경우
publicKeypktexttract 위해 pktexttract를 사용하는 '.cer'에서 .
https://learn.microsoft.com/en-us/windows/win32/sbscs/://learn.microsoft.com/en-us/windows/win32/sbscs/pktextract-exe

다른 답변에서 자세한 내용을 확인하십시오. https://stackoverflow.com/a/72190473/12529885

언급URL : https://stackoverflow.com/questions/1710935/how-do-i-find-the-publickeytoken-for-a-particular-dll