我如何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文件,在这里你可以看到公钥标记。