如何找到特定DLL的PublicKeyToken?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何找到特定DLL的PublicKeyToken?相关的知识,希望对你有一定的参考价值。

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

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

答案

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

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

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

MyDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a
另一答案

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

另一答案

使用sn.exe实用程序:

sn -T YourAssembly.dll

或在Reflector装载组件。

另一答案

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

例:

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

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

根据您的具体情况,您可能将类型全名与程序集引用混合,您可能需要查看MSDN

另一答案

答案很简单,使用.NET Framework工具sn.exe。因此,打开Visual Studio 2008命令提示符,然后指向要获取公钥的dll文件夹,

使用以下命令,

sn –T myDLL.dll

这将为您提供公钥令牌。请记住,只有在必须强烈签名程序集时,这才有效。

C:WINNTMicrosoft.NETFrameworkv3.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
另一答案

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

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

另一答案

只是添加更多信息,我无法在上述位置找到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

另一答案

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

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

在记事本中打开此__AssemblyInfo_.ini文件,您可以在此处看到公钥标记。

以上是关于如何找到特定DLL的PublicKeyToken?的主要内容,如果未能解决你的问题,请参考以下文章

如何找到特定的 dll 是不是是线程安全的? Ant API/工具呢?

如何找到依赖于特定依赖项的特定版本的内容?

DLL 版本控制错误

带有RabbitMQ.Client.dll异常的Microsoft.Diagnostics.Tracing.EventSource

未能加载文件或程序集“SrvCommon, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”

Mscordacwks.dll/SOS.dll 调试归档