gpt4 book ai didi

.net - 访问新签名的第三方 DLL 出错

转载 作者:行者123 更新时间:2023-12-04 23:06:37 24 4
gpt4 key购买 nike

我有一个使用第三方 DLL 的签名应用程序。这些 DLL 未签名。 - 到目前为止,第一步没有问题:我刚刚签署了它们(使用 ildasm.exe 获取 *.il,在 *.il 中只是获得 publickeytoken 因为它们具有相互依赖性,并使用 ilasm.exe 制作了 *.dll)

该项目现在可以正常编译并启动。

但是,当在我的代码中调用了 3rd-party-DLL 的类构造函数(或其他什么?-这只是我做的第一件事)时,我收到错误消息“强名称签名的程序集必须在其InternalsVisibleTo 声明”

如果你有DLL的源并且可以通过设置在AssemblyInfo.cs中调整,似乎不会有问题

[assembly: InternalsVisibleTo("MyProject.Domain.Tests, PublicKey=..."]

但是:如上所述,我有一个第三方 DLL I 不要有来源。所以没有办法解决这样的问题。

有什么建议可以让它运行吗?

最佳答案

我有完全相同的问题。

为什么会发生

  • 第 3 方程序集声明为 InternalsVisibleTo使其成为其他程序集的“ friend ”,例如InternalsVisibleTo("OtherAssembly")
  • .NET 要求强名称程序集只能是其他强名称程序集的“ friend ”,在这种情况下 InternalsVisibleTo属性必须指定那些其他程序集的公钥,例如InternalsVisibleTo("OtherAssembly, PublicKey=[key]")
  • 在运行时,CLR 看到 InternalsVisibleTo没有为相关程序集正确声明,因此它抛出异常。

  • 如何修复

    如果程序执行不需要“ friend ”程序集(例如,它是未部署在生产中的测试程序集),请执行以下步骤:
  • 拆卸有问题的组件:ildasm.exe ThirdParty.dll /OUTPUT=ThirdParty.il
  • 使用文本编辑器编辑 IL 文件,删除 InternalsVisibleTo 的任何声明
  • 组装并签署 IL:ilasm.exe ThirdParty.il /DLL /OUTPUT=ThirdParty.modified.dll /KEY=key.snk
  • 备注 : 生成 key :sn.exe -k key.snk

  • 如果程序执行需要“ friend ”程序集,则必须对所有这些 friend 程序集进行签名。然后按照与上面类似的步骤进行操作,除了不是删除 InternalsVisibleTo ,您必须使用正确的公钥修改每个声明。

    关于.net - 访问新签名的第三方 DLL 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10738008/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com