我创建了一个c#应用程序,它使用C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ WindowsPowerShell \ 3.0 \ System.Management.Automation.dll
我还将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上运行。
答案 0 :(得分:4)
您可以通过更改
删除app.confg中对程序集的强引用System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
到
System.Management.Automation
但我建议使用Fuslogvw(可以将其复制到目标服务器上,以及支持dll)获取有关确切错误的更多信息。
这将显示应用程序探测dll的确切位置以及导致问题的原因。也许你需要将另一个dll添加到bin文件夹中,或者GAC可能会在另一个dll上获胜。
答案 1 :(得分:1)
我认为问题在于我的方式只适用于Windows 8,因为它有这个dll的更新版本。 使其在Windows 7上运行:
<参考Include =“System.Management.Automation”/>
将身份验证代码更改为此
SecureString securePwd = new SecureString(); pass.ToCharArray()。ToList()。ForEach(p => securePwd.AppendChar(p)); PSCredential credentials = new PSCredential(username,securePwd); string shellUri =“http://schemas.microsoft.com/powershell/Microsoft.PowerShell”; WSManConnectionInfo connectionInfo = new WSManConnectionInfo(false,host,5985,“/ wsman”,shellUri,credentials,100000); // timeout是以毫秒为单位
答案 2 :(得分:1)
[如果在测试二进制文件期间遇到问题,请使用此解决方案] 我和作者有同样的问题。我使用snremove.exe
删除了system.management.automation.dll上的强名称snremove -r。\ system.management.automation.dll (并删除用于测试的所有二进制文件的强名称。) http://www.nirsoft.net/dot_net_tools/strong_name_remove.html
现在效果很好。我这样做只是因为我不想在测试之前检查我的二进制文件。签入后,我的二进制文件将由构建签名,我不必担心强大的命名。