문제

내 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

다른 팁

사용 sn.exe 공익사업:

sn -T YourAssembly.dll

또는 어셈블리를로드합니다 반사기.

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"); 코드에서

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top