Как найти PublicKeyToken для конкретной DLL?
Мне нужно воссоздать провайдера в моем файле 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 для моей сборки?
В качестве альтернативы, я не ошибаюсь с этим?
Ответы
Ответ 1
Используя PowerShell, вы можете выполнить это утверждение:
([system.reflection.assembly]::loadfile("c:\MyDLL.dll")).FullName
На выходе будут представлены Version, Culture и PublicKeyToken, как показано ниже:
MyDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a
Ответ 2
Используя sn.exe утилита:
sn -T YourAssembly.dll
или загрузите сборку в Reflector.
Ответ 3
sn -T <assembly>
в командной строке Visual Studio.
Если сборка установлена в глобальном кеше сборок, проще перейти к C:\Windows\assembly
и найти ее в списке сборок GAC.
В вашем конкретном случае вы можете смешивать полное имя типа с ссылкой на сборку, вы можете взглянуть на MSDN.
Ответ 4
Если у вас есть DLL, добавленная в ваш проект, вы можете открыть файл csproj и увидеть тег Reference.
Пример:
<Reference Include="System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
Ответ 5
Ответ очень прост в использовании инструментов .NET Framework sn.exe
. Поэтому откройте командную строку Visual Studio 2008 и затем укажите папку dlls, которую вы хотите получить открытым ключом,
Используйте следующую команду:
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
Ответ 6
Просто добавив больше информации, я не смог найти утилиту sn.exe в указанных местах, в моем случае это было в C:\Program Files (x86)\Microsoft SDK\Windows\v7.0A\bin
Ответ 7
Я использую проводник Windows, перейдите на C:\Windows\assembly, найдите тот, который мне нужен. Из свойств вы можете скопировать PublicKeyToken.
Это не зависит от Visual Studio или других установленных утилит.
Ответ 8
Assembly.LoadFile(@"C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Data.dll"). FullName
В результате
System.Data, Version = 4.0.0.0, Культура = нейтральная, PublicKeyToken = b77a5c561934e089
Ответ 9
Вы также можете проверить, следуя методу.
Перейдите в раздел "Выполнить": введите путь к DLL, для которого вам нужен открытый ключ.
Вы найдете 2 файла:
1. __AssemblyInfo_.ini
2. DLL файл
Откройте этот файл __AssemblyInfo_.ini в блокноте, здесь вы можете увидеть токен открытого ключа.
Ответ 10
Поскольку @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