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

不过,我得到一个运行时错误说这集不会被加载,我想这是因为我有错误的公钥。我看上去怎么样了公钥对我的组装?

另外,我该怎么完全与这个错误的方式?

有帮助吗?

解决方案

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

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

的输出将提供文化公钥,如下所示:

MyDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a

其他提示

使用 SN.EXE 效用:

sn -T YourAssembly.dll

或加载组件反射

如果你有DLL添加到您的项目,你可以打开的csproj文件,请参见参考标签。

示例:

<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 \组装,找到一个我需要的。从属性,你可以复制公钥。

这不依赖于Visual Studio或任何其它实用程序被安装。

只是添加更多的信息,我没能找到所提到的地点SN.EXE工具,在我的情况下,它是在C:\ Program Files文件(x86)的\微软的SDK \的Windows \ v7.0A \ BIN

  

Assembly.LoadFile(@ “C:\的Windows \ Microsoft.NET \框架\ v4.0.30319 \ system.data.dll中”)。全名

会导致

  

System.Data,版本= 4.0.0.0,Culture =非   公钥= b77a5c561934e089

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

去跑:输入DLL在您需要的公共密钥的路径。 你会发现2个文件: 1. __AssemblyInfo_.ini 2. DLL文件

用记事本打开该文件__AssemblyInfo_.ini,在这里你可以看到公钥标记。

正如@CRice说可以使用以下方法来获得从属组件的列表,包括公钥

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");

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top