如何找到特定DLL的PublicKeyToken?

Mat*_*nes 172 .net dll .net-assembly publickeytoken

我需要在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>
Run Code Online (Sandbox Code Playgroud)

但是,我收到运行时错误,说无法加载此程序集,我认为这是因为我有错误的PublicKeyToken.如何查找我的程序集的PublicKeyToken?

或者,我是否完全采用错误的方式?

dan*_*elB 247

使用PowerShell,您可以执行以下语句:

([system.reflection.assembly]::loadfile("c:\MyDLL.dll")).FullName
Run Code Online (Sandbox Code Playgroud)

输出将提供Version,CulturePublicKeyToken,如下所示:

MyDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a
Run Code Online (Sandbox Code Playgroud)

  • 令人讨厌的是,即使在调用完成后,PowerShell.exe 仍会锁定 dll。我需要先关闭 PowerShell 控制台,然后才能再次构建我的解决方案。 (4认同)
  • 在C#Interactive中,您可以调用:Console.WriteLine(System.Reflection.Assembly.LoadFile(@"c:\ some.dll").FullName); (2认同)

Dar*_*rov 135

使用sn.exe实用程序:

sn -T YourAssembly.dll
Run Code Online (Sandbox Code Playgroud)

或在Reflector中加载程序集.

  • 通常可以在C:\ Program Files(x86)\ Microsoft SDKs\Windows下的以下位置之一找到sn.exe:C:\ Program Files(x86)\ Microsoft SDKs\Windows\v7.0A\Bin,C:\Program Files(x86)\ Microsoft SDKs\Windows\v7.0A\Bin\x64,C:\ Program Files(x86)\ Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools (31认同)
  • 请注意,密钥区分大小写。-t(小写)将给出“无法将密钥转换为令牌 - 无效的程序集公钥。”,这将使您朝错误的方向搜索。 (2认同)

Zan*_*non 29

如果已将DLL添加到项目中,则可以打开csproj文件并查看Reference标记.

例:

<Reference Include="System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
Run Code Online (Sandbox Code Playgroud)


Joa*_*iro 22

sn -T <assembly>在Visual Studio命令行中.如果程序集安装在全局程序集缓存中,则可以更轻松地C:\Windows\assembly在GAC程序集列表中找到它.

在您的特定情况下,您可能将类型全名与程序集引用混合,您可能需要查看MSDN.


小智 6

答案很简单,使用.NET Framework工具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


Mik*_*ney 5

我使用 Windows 资源管理器,导航到 C:\Windows\assembly ,找到我需要的那个。从属性中,您可以复制 PublicKeyToken。

这不依赖于 Visual Studio 或正在安装的任何其他实用程序。