天道酬勤,学无止境

应用程序的强名称验证失败(Strong name validation failed for application)

问题

我制作了使用 C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\3.0\System.Management.Automation.dll 的 ac# 应用程序

我还将dll复制到我的bin文件夹中。 它工作正常,但如果我将 bin 文件夹复制到另一台机器并运行可执行文件,我会收到此错误:

************** Exception Text **************
System.IO.FileLoadException: Could not load file or assembly 'System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. Strong name validation failed. (Exception from HRESULT: 0x8013141A)
File name: 'System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' ---> System.Security.SecurityException: Strong name validation failed. (Exception from HRESULT: 0x8013141A)

注意:我根本没有签署程序集。 此外,我不想通过修改注册表项来禁用安全性。 我只是想正确修复它。 任何想法如何在不全局注册 dll 的情况下解决此问题?

更新:我尝试将整个 Visual Studio 项目复制到另一台机器上。 它在 Windows 8 上运行时无法在 Windows 7 上运行。

回答1

您可以通过更改在 app.confg 中删除对程序集的强引用

System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

System.Management.Automation

但我建议使用 Fuslogvw(可以将其与支持 dll 一起复制到目标服务器上)获取有关究竟是什么问题的更多信息。

这将准确显示应用程序在何处探测 dll 以及导致问题的原因。 也许您有另一个 dll 需要添加到您的 bin 文件夹中,或者 GAC 可能在另一个 dll 上胜出。

回答2

我认为问题在于我这样做的方式仅适用于 Windows 8,因为它具有此 dll 的较新版本。 要使其在 Windows 7 上运行:

  • 修改 csproj 文件以具有如下引用:

< 参考 Include="System.Management.Automation" />

  • 将验证码更改为此

    SecureString securePwd = new SecureString(); pass.ToCharArray().ToList().ForEach(p => securePwd.AppendChar(p)); PSCredential 凭证 = 新 PSCredential(username, securePwd); string shellUri = "http://schemas.microsoft.com/powershell/Microsoft.PowerShell"; WSManConnectionInfo connectionInfo = new WSManConnectionInfo(false, host, 5985, "/wsman", shellUri, credentials, 100000);// 超时时间以毫秒为单位

回答3

[如果您在测试二进制文件期间遇到问题,请使用此解决方案] 我和作者有同样的问题。 我使用 snremove.exe 删除了 system.management.automation.dll 上的强名称

snremove -r .\system.management.automation.dll(并删除所有用于测试的二进制文件的强名称。)http://www.nirsoft.net/dot_net_tools/strong_name_remove.html

它现在运作良好。 我这样做只是因为我不想在测试前检查我的二进制文件。 签入后,我的二进制文件由构建签名,我不必担心强命名。

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐