Ошибка загрузки библиотеки Powershell: Add-Type: не удалось загрузить файл или сборку WebDriver.dll или одну из ее зависимостей. Операция не поддерживается

Я хочу использовать PowerShell с selenium и загрузить селен со страницы 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

Это моя информация о 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>

Это ошибки, которые я получил при попытке загрузить 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>

person Just a learner    schedule 14.09.2013    source источник


Ответы (3)


Если вы скачали файлы .DLL из Интернета, Powershell по умолчанию не будет им доверять. Здесь вы можете сделать одно из двух:

  1. Разблокируйте контент. Вот руководство с некоторыми подробностями о проблеме, но по сути вам просто нужно щелкнуть правой кнопкой мыши загруженный файл, выбрать "Свойства" и нажать "Разблокировать" на общей вкладке. Вы можете разблокировать контент прямо из PowerShell с помощью командлета Unblock-File.
  2. Измените свою политику выполнения. Это также может позволить запускать загруженные вами вредоносные сценарии, поэтому будьте осторожны.

В частности, просмотр и разблокирование контента, которому вы доверяете, кажется лучшим способом, особенно для вашего случая, поскольку вам кажется, что вы делаете это только один раз, и вы доверяете пакету.


Изменить: Если это не помогло, то другой опыт, который у меня был с этим типом ошибки, - это когда Powershell не использовал ту же версию среды выполнения .NET, что и сборка. См. этот вопрос для некоторого контекста, где Powershell 2.0 запускал среду выполнения .NET 2, а запрашивающему требовался .NET 4 для некоторых сборок .

Вы не используете одну и ту же версию PS, поэтому ваш пробег может отличаться, но я бы попытался создать / отредактировать файл конфигурации в соответствии со связанным ответом для поддержки времени выполнения используемых вами DLL.

person Anthony Neace    schedule 14.09.2013
comment
@Yousui Включая часть Operation is not supported. (Exception from HRESULT: 0x80131515) в первую ошибку? - person Anthony Neace; 14.09.2013
comment
Если вы работаете в консоли PowerShell, необходимо повторно открыть ее после разблокировки файлов. - person t3chb0t; 23.02.2016
comment
Для других, если вышеуказанное не решает проблему, убедитесь, что вы не пытаетесь загрузить библиотеки DLL x86 в 64-разрядный экземпляр PowerShell. Простое использование PowerShell (x86) может решить проблему, если да! - person Matt; 23.05.2017

Это сработало для меня: (из https://stackoverflow.com/a/19957173/107161)

В файлах:

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>
person wtjones    schedule 20.01.2014
comment
powershell.exe.config не существует в текущих версиях powershell, а файл powershell_ise.exe.config недоступен для редактирования - разрешения заблокированы даже для администраторов, поэтому запись в файл невозможна. - person ChopperCharles; 28.12.2015
comment
Это просто неправда. Это решение помогло мне запустить PowerShell 4.0. Разница заключалась в том, что мне пришлось взять под контроль папку из SYSTEM и отредактировать .\powershell_ise.exe.config. Затем я вернул разрешения на прежнее место и вуаля! Это сработало. Это хороший ответ. - person Chaim Eliyah; 30.03.2016
comment
В моем случае powershell работал нормально, но у powershell_ise были проблемы с Add-Type. Просто добавив файл C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe.config (ранее не существовавший) путем копирования с другого компьютера, я решил эту проблему. Мне даже не нужно было указывать параметр <runtime>. - person jschmitter; 08.05.2018
comment
Здесь предполагается, что библиотеки DLL находятся в удаленном месте. Перемещение их в локальное место также позволит избежать ошибки. Что является локальным или удаленным, вероятно, определяется Зоны безопасности. - person Chris; 17.01.2020

Запуск от имени администратора решил проблему, хотя моя политика get-execution полностью подписана.

person Manikanta Bluestar    schedule 23.10.2019
comment
Что добавляет этот ответ, что те, что были 6 лет назад, не покрывают, кроме рисков безопасности, возникающих из-за работы в качестве администратора, без надобности? - person Dragonthoughts; 23.10.2019
comment
@Dragonoughtts Похоже, это дает другое решение проблемы, которое может быть полезно для кого-то, любой, кто работает как администратор, должен знать, во что он ввязывается. - person yoel halb; 13.07.2021