【问题标题】:Assembly has a strong name, but I"m getting the error that says a strong name is needed程序集有一个强名称,但我得到一个错误,说需要一个强名称
【发布时间】:2015-08-21 20:05:01
【问题描述】:

我正在尝试将第三方 COM dll 加载到我的应用程序中。一切都很好,但是当我运行应用程序时,我不断从我的应用程序中收到这条消息:

无法加载文件或程序集“程序集”、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null'或其依赖项之一。需要强命名程序集。 (来自 HRESULT 的异常:0x80131044)。

当我执行sn -vf "assembly" 时,它说程序集是有效的。有没有人见过这种行为?

【问题讨论】:

    标签: .net com strongname


    【解决方案1】:

    您正在尝试加载的程序集没有强名称。这可以从您的消息中看到,上面写着PublicKeyToken=null。如果它有一个强名称,它就会有一个公钥令牌。

    如果您在编译或引用它之后给它起了一个强名称,请尝试在您的项目中再次引用它。也许您的项目仍然有旧的引用,并且正在尝试加载未签名的版本。

    【讨论】:

    • 我应该能够使用 sn -vf 工具验证它是否具有强名称,对吗?
    • @Mykal73 重新阅读他所说的话。 磁盘上的程序集有一个强名称,您要求的程序集没有。如果这只是一个引用,请从项目中删除该引用并重新添加它,或者将您正在使用的字符串的 PublicKeyToken 部分与sn -T assemblyName 的输出一起修复以在运行时动态引用该文件。
    • 原来系统注册的com dll没有签名。我与应用程序一起部署的 dll 是。该应用程序不断抓取已向系统注册的未签名 dll。
    【解决方案2】:

    我以前在使用 Mongo CSharp 驱动程序时看到过这种行为。从 1.10.0 及更高版本开始,他们停止提供强命名程序集,因此您必须自己签名。

    当我签署提供的 3 个 dll 时; MongoDB.Bson、MongoDB.Driver 和 MongoDB.Driver.Core,我忽略了这些程序集的内置依赖结构。 MongoDB.Driver 依赖于依赖于 MongoDB.Bson 的 MongoDB.Driver.Core。这意味着尽管我的代码引用了已签名的程序集,但预编译的程序集却引用了它们所依赖的已签名程序集。

    一般来说,当你有这样的依赖树时,你会观察到这种行为

    Assembly1 -------> Assembly2
       |                   |
       |---> Assembly3 <---|
    

    其中程序集 1 和 2 都依赖于程序集 3,但程序集 1 也依赖于程序集 2。它比循环依赖少了一步,这使得它非常罕见。

    我在 5 部分系列的 part 4 中讨论了可用于签署第 3 方 DLL 并解决此问题的流程和 SDK 工具。 .NetFU 也有一篇关于这个过程的好文章,但他们的页面已被删除。

    【讨论】:

      【解决方案3】:

      如果您有不同的项目,它们都需要签名。您不能用证书签署一个而不签署其他的。

      【讨论】:

        【解决方案4】:

        我在使用新的 csproj 格式的项目中遇到了这个问题,从文件的顶部开始:

        <Project Sdk="Microsoft.NET.Sdk">
        

        与 PackageReference 一起只是包的名称。所以,没有本地包文件夹。在 Visual Studio 中查看包的属性,我可以在 .nuget 文件缓存中看到 DLL 的完整路径:

        %USERPROFILE%\.nuget\packages
        

        我不确定链接/引用是如何工作的,但即使将应用程序和已签名版本的包放在同一目录中,仍然无法正常工作。应用程序正在从 nuget 缓存中的 DLL 引用信息。

        所以我的解决方法是将 nuget 缓存中的 DLL 替换为 DLL 的签名版本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-04-11
          • 2011-02-07
          • 1970-01-01
          • 1970-01-01
          • 2019-03-22
          • 1970-01-01
          相关资源
          最近更新 更多