我需要在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?
或者,我是否会完全错误地使用它?
答案 0 :(得分:215)
使用 PowerShell ,您可以执行以下语句:
([system.reflection.assembly]::loadfile("c:\MyDLL.dll")).FullName
输出将提供 Version , Culture 和 PublicKeyToken ,如下所示:
MyDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a
答案 1 :(得分:132)
答案 2 :(得分:22)
sn -T <assembly>
。
如果程序集安装在全局程序集缓存中,则可以更轻松地转到C:\Windows\assembly
并在GAC程序集列表中找到它。
根据您的具体情况,您可能会将类型全名与程序集引用混合,您可能需要查看MSDN。
答案 3 :(得分:22)
如果您已将DLL添加到项目中,则可以打开csproj文件并查看Reference标记。
示例:
<Reference Include="System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
答案 4 :(得分: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
答案 5 :(得分:4)
我使用Windows资源管理器,导航到C:\ Windows \ assembly,找到我需要的那个。从属性中,您可以复制PublicKeyToken。
这并不依赖于Visual Studio或正在安装的任何其他实用程序。
答案 6 :(得分:3)
只是添加更多信息,我无法在上述位置找到sn.exe实用程序,在我的情况下,它位于C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ bin < / p>
答案 7 :(得分:0)
您还可以通过以下方法进行检查。
转到“运行”:键入需要公钥的DLL路径。 你会发现2个文件: 1. __AssemblyInfo_.ini 2. DLL文件
在记事本中打开此__AssemblyInfo_.ini文件,此处可以看到公钥标记。
答案 8 :(得分:0)
正如@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;
}
我通常将其用作 LinqPad 脚本 您可以将其称为
DependencyInfo("@c:\MyAssembly.dll");
来自代码