我需要在我的 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:\..\Full_Path\..\MyDLL.dll")).FullName
输出将提供版本、文化和 PublicKeyToken,如下所示:
MyDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a
使用 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" />
sn -T <assembly>
在 Visual Studio 命令行中。如果程序集安装在全局程序集缓存中,则更容易转到 C:\Windows\assembly
并在 GAC 程序集列表中找到它。
在您的特定情况下,您可能将类型全名与程序集引用混合在一起,您可能想查看 MSDN。
答案很简单,使用 .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
我使用 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\Framework\v4.0.30319\system.data.dll").FullName
会导致
System.Data,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089
正如@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");
来自代码
您也可以通过以下方法进行检查。
转到运行:键入您需要公钥的 DLL 的路径。你会发现 2 个文件: 1. __AssemblyInfo_.ini 2. DLL 文件
在记事本中打开这个 __AssemblyInfo_.ini 文件,在这里您可以看到 Public Key Token。
对于 MSVC 或其他人生成的 DLL
使用 pktextract 从 '.cer' 获取 publicKeyToken
https://docs.microsoft.com/en-us/windows/win32/sbscs/pktextract-exe
查看其他答案的详细信息:https://stackoverflow.com/a/72190473/12529885
如果你想要在 NuGet 上发布的东西的令牌,
例如, OxyPlot.Wpf :
https://nuget.info/packages/OxyPlot.Wpf/2.1.0
并浏览 dll 及其详细信息。
只需更改任何其他包的 url 上的 nuget pkg 名称和版本。
放入 $PATH
中的文件 dll-assemblyinfo
:
#!/bin/sh
f=$(readlink -f "$1")
{
echo "using System.Reflection;"
echo "Assembly.LoadFile(\"$f\");"
} | csharp
chmod +x 然后
$ dll-assemblyinfo packages/System.Buffers.4.5.1/lib/netstandard2.0/System.Buffers.dll
System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
不定期副业成功案例分享