특정 DLL에 대한 publicKeyToken을 어떻게 찾습니까?
-
19-09-2019 - |
문제
내 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>
그러나이 어셈블리를로드 할 수 없다는 런타임 오류가 발생합니다. 공개 keytoken이 잘못 되었기 때문이라고 생각합니다. 내 어셈블리를 위해 publickeytoken을 어떻게 찾아 보나요?
또는, 나는 이것으로 완전히 잘못된 길로 가고 있습니까?
해결책
사용 PowerShell, 당신은이 명령문을 실행할 수 있습니다.
([system.reflection.assembly]::loadfile("c:\MyDLL.dll")).FullName
출력이 제공합니다 버전, 문화 그리고 PublicKeyToken 아래 그림과 같이:
MyDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a
다른 팁
DLL이 프로젝트에 추가 된 경우 CSPROJ 파일을 열고 참조 태그를 볼 수 있습니다.
예시:
<Reference Include="System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
sn -T <assembly>
Visual Studio Command Line에서. 어셈블리가 글로벌 어셈블리 캐시에 설치되면 C:\Windows\assembly
GAC 어셈블리 목록에서 찾으십시오.
특정 사례에서는 형식 전체 이름을 조립 참조와 믹싱 할 수 있습니다. MSDN.
답은 .NET 프레임 워크 도구를 매우 간단하게 사용합니다 sn.exe
. 따라서 Visual Studio 2008 명령 프롬프트를 열고 공개 키를 얻으려는 DLL의 폴더를 가리 키십시오.
다음 명령을 사용하고
sn –T myDLL.dll
이것은 당신에게 공개 키 토큰을 줄 것입니다. 조립에 강력하게 서명 해야하는 경우에만 효과가있는 것만 기억하십시오.
예시
C:\WINNT\Microsoft.NET\Framework\v3.5>sn -T EdmGen.exe Microsoft (R) .NET Framework Strong Name Utility Version 3.5.21022.8 Copyright (c) Microsoft Corporation. All rights reserved. Public key token is b77a5c561934e089
Windows 탐색기를 사용하고 C : Windows 어셈블리로 이동하여 필요한 것을 찾으십시오. 속성에서 PublicKeyToken을 복사 할 수 있습니다.
이것은 Visual Studio 또는 설치중인 다른 유틸리티에 의존하지 않습니다.
더 많은 정보를 추가하면 언급 된 위치에서 Sn.exe 유틸리티를 찾을 수 없었습니다. 제 경우에는 C : Program Files (x86) Microsoft SDKS Windows V7.0A Bin입니다.
Assembly.loadFile (@"C : Windows Microsoft.net Framework V4.0.30319 System.Data.dll").
결과가 나옵니다
System.Data, 버전 = 4.0.0.0, 문화 = 중립, publicKeyToken = B77A5C561934E089
다음 방법으로 확인할 수도 있습니다.
실행 중 : 공개 키가 필요한 DLL 경로를 입력하십시오. 두 개의 파일이 있습니다 : 1. __assemblyInfo_.ini 2. DLL 파일
메모장 에서이 __assemblyInfo_.ini 파일을 열면 여기에서 공개 키 토큰을 볼 수 있습니다.
@crice가 말했듯이 아래 방법을 사용하여 publickeyToken을 사용하여 종속 어셈블리 목록을 얻을 수 있습니다.
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;
}
나는 일반적으로 그것을 a로 사용합니다 linqpad 스크립트라고 부를 수 있습니다
DependencyInfo("@c:\MyAssembly.dll");
코드에서