Мне нужно воссоздать провайдера в моем файле 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
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 версии 3.5.21022.8 Авторские права (c) Корпорация Microsoft. Все права защищены. Токен открытого ключа: b77a5c561934e089
Вы также можете проверить, используя следующий метод.
Перейти к Run: введите путь к DLL, для которой вам нужен открытый ключ. Вы найдете 2 файла: 1. __AssemblyInfo_.ini 2. Файл DLL
Откройте этот файл __AssemblyInfo_.ini в блокноте, здесь вы можете увидеть токен открытого ключа.
Просто добавив дополнительную информацию, я не смог найти утилиту sn.exe в упомянутых местах, в моем случае это было в C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ bin
Я использую Windows Explorer, перехожу к C: \ Windows \ assembly, нахожу тот, который мне нужен. Из свойств вы можете скопировать PublicKeyToken.
Это не зависит от установки Visual Studio или любых других утилит.
Если у вас есть DLL, добавленная в ваш проект, вы можете открыть файл csproj и увидеть тег Reference.
Пример:
<Reference Include="System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
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");
из кода