【问题标题】:Strong name validation failed for application应用程序的强名称验证失败
【发布时间】:2015-01-28 22:57:01
【问题描述】:

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

我还将 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 上运行。

【问题讨论】:

标签: c# dll


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    System.Management.Automation
    

    但我建议使用Fuslogvw(可以与支持 dll 一起复制到您的目标服务器上)获取更多关于具体问题的信息。

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

    【讨论】:

      【解决方案3】:

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

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

      • 把验证码改成这个

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多