.net - 如何找到特定dll的PublicKeyToken?




5 Answers

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

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

输出将提供Version,Culture和PublicKeyToken,如下所示:

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

我需要在我的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>

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

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




sn -T <assembly>在Visual Studio命令行中。 如果程序集安装在全局程序集缓存中,则更容易转到C:\Windows\assembly并在GAC程序集列表中找到它。

根据您的具体情况,您可能会将类型全名与汇编参考混合在一起,您可能需要查看MSDN




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



只是添加更多信息,我无法在提到的位置找到sn.exe实用程序,在我的情况下,它位于C:\ Program Files文件(x86)\ Microsoft SDKs \ Windows \ v7.0A \ bin




Assembly.LoadFile(@ “C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ system.data.dll中”)。全名

将导致

System.Data,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089




Related