Powershell load dll出错:Add-Type:无法加载文件或程序集"WebDriver.dll"或其依赖项之一.不支持操作

Jus*_*ner 11 dll powershell selenium add-type

我想用PowerShellselenium,并从下载硒http://www.java2s.com/Code/Jar/s/Downloadseleniumremotedriver2350jar.htm.当我尝试加载其中一个dll时,我遇到了错误.希望有人可以帮助我.

这是我的系统信息.

OS Name:                   Microsoft Windows 7 Enterprise
OS Version:                6.1.7601 Service Pack 1 Build 7601
OS Manufacturer:           Microsoft Corporation
Run Code Online (Sandbox Code Playgroud)

这是我的PowerShell信息.

PS C:\Users\test\Downloads\selenium-dotnet-2.35.0\net40> $psversiontable

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.18052
BuildVersion                   6.3.9421.0
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2


PS C:\Users\test\Downloads\selenium-dotnet-2.35.0\net40>
Run Code Online (Sandbox Code Playgroud)

这是我在尝试加载dll时遇到的错误.

    PS C:\Users\test\Downloads\selenium-dotnet-2.35.0\net40> Add-Type -Path .\WebDriver.dll
    Add-Type : Could not load file or assembly 'file:///C:\Users\test\Downloads\selenium-dotnet-2.35.0\net40\WebDriver.dll' or one of its dependencies. Operation is
    not supported. (Exception from HRESULT: 0x80131515)
    At line:1 char:1
    + Add-Type -Path .\WebDriver.dll
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [Add-Type], FileLoadException
        + FullyQualifiedErrorId : System.IO.FileLoadException,Microsoft.PowerShell.Commands.AddTypeCommand

    PS C:\Users\test\Downloads\selenium-dotnet-2.35.0\net40> [reflection.assembly]::LoadFrom(".\WebDriver.dll")
    Exception calling "LoadFrom" with "1" argument(s): "Could not load file or assembly 'file:///C:\Users\test\WebDriver.dll' or one of its dependencies. The system
    cannot find the file specified."
    At line:1 char:1
    + [reflection.assembly]::LoadFrom(".\WebDriver.dll")
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : FileNotFoundException

    PS C:\Users\test\Downloads\selenium-dotnet-2.35.0\net40> [reflection.assembly]::LoadFrom("WebDriver.dll")
    Exception calling "LoadFrom" with "1" argument(s): "Could not load file or assembly 'file:///C:\Users\test\WebDriver.dll' or one of its dependencies. The system
    cannot find the file specified."
    At line:1 char:1
    + [reflection.assembly]::LoadFrom("WebDriver.dll")
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : FileNotFoundException

    PS C:\Users\test\Downloads\selenium-dotnet-2.35.0\net40> [reflection.assembly]::LoadFrom("C:\Users\test\Downloads\selenium-dotnet-2.35.0\net40\WebDriver.dll")
    Exception calling "LoadFrom" with "1" argument(s): "Could not load file or assembly 'file:///C:\Users\test\Downloads\selenium-dotnet-2.35.0\net40\WebDriver.dll' or
    one of its dependencies. Operation is not supported. (Exception from HRESULT: 0x80131515)"
    At line:1 char:1
    + [reflection.assembly]::LoadFrom("C:\Users\test\Downloads\selenium-dotnet-2.35.0 ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : FileLoadException

    PS C:\Users\test\Downloads\selenium-dotnet-2.35.0\net40> [reflection.assembly]::LoadFile("C:\Users\test\Downloads\selenium-dotnet-2.35.0\net40\WebDriver.dll")
    Exception calling "LoadFile" with "1" argument(s): "An attempt was made to load an assembly from a network location which would have caused the assembly to be sandboxed

 in previous versions of the .NET Framework. This release of the .NET Framework does not enable CAS policy by default, so this load may be dangerous. If
    this load is not intended to sandbox the assembly, please enable the loadFromRemoteSources switch. See http://go.microsoft.com/fwlink/?LinkId=155569 for more
    information."
    At line:1 char:1
    + [reflection.assembly]::LoadFile("C:\Users\test\Downloads\selenium-dotnet-2.35.0 ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : NotSupportedException

    PS C:\Users\test\Downloads\selenium-dotnet-2.35.0\net40>
Run Code Online (Sandbox Code Playgroud)

Ant*_*ace 33

如果您从互联网上下载.DLL,默认情况下,Powershell不会信任它们.你可以在这里做两件事之一:

  1. 取消阻止内容.这是一个对问题进行详细说明指南,但基本上您只需右键单击下载的文件,选择"属性",然后单击常规选项卡中的"取消阻止".您可以使用Unblock-Filecmdlet 直接从powershell取消阻止内容.
  2. 更改您的执行政策.这也可以允许您下载的恶意脚本运行,因此要小心.

具体来说,查看和取消阻止您信任的内容似乎是更好的选择,特别是对于您的情况,因为您似乎只会执行此操作并且您信任该程序包.


编辑:如果这没有解决这个问题,那么我对此类错误的另一种体验是Powershell与.NET程序集的版本不同.请参阅此问题以获取某些上下文,其中Powershell 2.0运行.NET 2运行时,而提问者需要.NET 4才能使用某些程序集.

您没有使用相同版本的PS,因此您的里程可能会有所不同,但我会尝试根据链接的答案创建/编辑配置文件,以支持您正在使用的DLL的运行时.

  • 如果您在powershell控制台中工作,则必须在取消阻止文件后重新打开它. (10认同)
  • 对于其他人,如果上述方法无法解决问题,请检查您是否尝试将x86 DLL加载到64位PowerShell实例中.只需使用`PowerShell(x86)`即可解决问题! (3认同)

wtj*_*nes 5

这对我有用:(来自/sf/answers/1397002141/)

在文件中:

C:\ Windows\System32\WindowsPowerShell\v1.0\powershell.exe.config C:\ Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration>
   <runtime>
      <loadFromRemoteSources enabled="true"/>
   </runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)

  • 当前版本的powershell中不存在powershell.exe.config,并且powershell_ise.exe.config不可编辑 - 即使对于管理员也会锁定权限,因此无法写入该文件. (2认同)