237

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

或者,我是否完全走错了路?

4

10 回答 10

354

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

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

输出将提供VersionCulturePublicKeyToken,如下所示:

MyDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a
于 2014-06-10T08:17:41.087 回答
155

使用sn.exe实用程序:

sn -T YourAssembly.dll

或在Reflector中加载程序集。

于 2009-11-10T20:27:39.853 回答
35

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

例子:

<Reference Include="System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
于 2017-04-26T13:16:40.010 回答
25

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

在您的特定情况下,您可能将类型全名与程序集引用混合在一起,您可能想看看MSDN

于 2009-11-10T20:26:26.987 回答
11

答案很简单,使用 .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
于 2013-07-02T11:16:19.873 回答
5

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

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

于 2014-11-04T04:07:55.433 回答
3

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

于 2014-10-15T15:01:16.617 回答
3

Assembly.LoadFile(@"C:\Windows\Microsoft.NET\Framework\v4.0.30319\system.data.dll").FullName

会导致

System.Data,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089

于 2018-02-26T11:26:50.987 回答
1

正如@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");从代码

于 2018-12-01T13:39:13.583 回答
0

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

转到运行:键入您需要公钥的 DLL 的路径。你会发现 2 个文件: 1. __AssemblyInfo_.ini 2. DLL 文件

在记事本中打开这个 __AssemblyInfo_.ini 文件,在这里您可以看到 Public Key Token。

于 2014-04-21T07:50:19.513 回答