【问题标题】:C# Assembly Strong Name error although signed尽管已签名,但 C# 程序集强名称错误
【发布时间】:2019-03-22 08:16:50
【问题描述】:

我在运行 C# 应用程序时遇到问题,在尝试使用特定引用时抛出以下错误,如下所示:

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

然后我关注this answer 签署了有问题的程序集。

我还可以通过 Visual Studio 和 Sn 确认我的 DLL 现在已明确签名并且具有强名称。

但是我看到了两件事:

  1. 在我签名的应用程序版本中,我仍然遇到与上述相同的错误,就好像程序集没有强名称一样。
  2. 在我的未签名版本上,直到现在使用未签名的 DLL 都可以正常工作,现在它与已签名的 DLL 版本抛出相同的错误。

我不知道可能是什么原因。

感谢您的帮助。

【问题讨论】:

  • My3rdPartyAssembly 引用的所有程序集是否也是强签名的?这包括您可能编写的其他程序集。所以所有递归引用的程序集都需要有一个强名称。
  • 是的,我检查了这个,他们也签名了
  • 我遇到了这个问题,因为我有同样的问题。引用的程序集是否可能没有正确定位?也许我们仍然针对以前未签名的构建,即使在签名之后

标签: c# strongname


【解决方案1】:

事实证明我能够解决它。我正在更新第三方库(我要签名的程序集),以便它可以与我的 .exe 一起正常工作,但它被来自 NuGet 包的未签名版本所取代。

您必须在以下位置更新 .dll:

我将获得一个名为 WPFCustomMessageBox.dll 的示例包的说明。跟着ff。更新包并让它反映在调试文件夹中的步骤:

  1. 在上面提供的路径中打开cmd
  2. 键入ff。 你应该把系统中的路径组织成你的文件夹结构,你的文件所在的位置可能和我的不一样

一个。这个从 .dll 中获取必要的文件

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\Ildasm.exe" /all /out=WPFCustomMessageBox.il WPFCustomMessageBox.dll

b.我不确定这个是做什么的,但它会为下一个命令准备文件。

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Ilasm.exe" "WPFCustomMessageBox.il" /dll /resource="WPFCustomMessageBox.res" /key="publickey.snk"

c.这个创建签名的.dll

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\sn.exe" -R "WPFCustomMessageBox.dll" "pair.pfx"

  1. 输入 .pfx 文件的密码,它应该会生成签名的 .dll。

我在Adding a Strong Name to a Third-Party Assembly 的帮助下测试了这个方法。下次编译时,应该对之前编译/复制到 Debug 文件夹的未签名 .dll 进行签名。希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多