我如何find一个特定的DLL的PublicKeyToken?

我需要在我的web.config文件中重新创build一个提供程序,如下所示:

<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?

另外,我是否完全用这个错误的方式?

使用PowerShell ,你可以执行这个语句:

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

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

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

使用sn.exe实用程序:

 sn -T YourAssembly.dll 

或在reflection器中加载组件。

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

在你的具体情况下,你可能会混合types的全名和程序集引用,你可能想看看MSDN 。

如果将该DLL添加到项目中,则可以打开csproj文件并查看参考标记。

例:

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

答案很简单,使用.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强名称实用程序版本3.5.21022.8
版权所有(c)微软公司。 版权所有。

公钥令牌是b77a5c561934e089 

我使用Windows资源pipe理器,导航到C:\ Windows \程序集,find我需要的。 从属性中可以复制PublicKeyToken。

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

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

您也可以通过以下方法进行检查。

转到“运行”:input您需要公钥的DLL的path。 你会发现2个文件:1. __AssemblyInfo_.ini 2. DLL文件

在记事本中打开__AssemblyInfo_.ini文件,在这里你可以看到公钥标记。