Исключение рабочей среды PowerShell - "невозможно загрузить файл или сборку"

Это, по-видимому, обычная проблема в PowerShell и Visual Studio, но случаи и решения, похоже, сильно различаются. Хотя я видел несколько подобных вопросов, я еще не нашел рабочего решения для своей проблемы.

Проблема возникает в сообщении об ошибке

Не удалось загрузить файл или сборку 'file:///C:\users\jenstmar\Desktop\WinSCP.dll' Один из его зависимостей. Операция не поддерживается. (Исключение из HRESULT: 0x80131515)

Местоположение файла недопустимо, так как предполагается, что .dll находится в той же папке, что и установка WinSCP. Это место было изменено, чтобы проверить, нет ли каких-либо прав или недостатков, ограничило меня тем, как использовать его.

Линия script, вызывающая проблему, выглядит следующим образом:

# Load WinSCP .NET assembly
[Reflection.Assembly]::LoadFrom("C:\users\jenstmar\Desktop\WinSCP.dll") | Out-Null

Эта ошибка возникает как в PowerShell ISE, так и в PS ISE (x86). Я запускаю PowerShell V3.0 в среде Windows Enterprise 64, как локальный администратор. Как я могу исправить эту проблему?

Ответ 1

Решение в этом случае: Удалите и загрузите все это снова. Я даже разблокировал его в первом файле, без помощи. Рад, что это было на внутренней машине.

Ответ 2

Файл может быть заблокирован из-за его происхождения (хранится в NTFS-потоках). Проверьте свойства и посмотрите, горит ли маленькая кнопка разблокировки. Как только вы разблокируете его, возможно, он загрузится...

Ответ 3

Следующее работало для меня (из вопроса о переполнении стека сборка загрузки Add-Type из сетевой ошибки общего доступа UNC 0x80131515).

В файлах:

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>

Ответ 4

Import-Module : Could not load file or assembly 'file:/// *dll path*' or one of 
its dependencies. An attempt was made to load a program with an incorrect format.
At *script path*.ps1:68 char:2
+     Import-Module *module path*
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Import-Module], BadImageFormatException
    + FullyQualifiedErrorId : System.BadImageFormatException,Microsoft.PowerShell.Commands.ImportModuleCommand

Если вы видите вышеуказанную ошибку, может возникнуть проблема с запуском Windows PowerShell ISE в 32-битном режиме (Windows PowerShell ISE (x86)). Вам нужно запустить приложение Windows PowerShell ISE.

Это приложение (Windows PowerShell ISE) находится в режиме 64 бит. Когда я выполнил команду power shell, она отлично работает для меня.

Я пытался исправить это с помощью решений разных типов, но это не сработало для меня. Если вы используете режим 32, переключите его на 64 бит и попробуйте.

Ответ 5

Я бы посмотрел зависимости WinSCP.dll в ILDASM или dotPeek, а затем загрузил эти зависимости до загрузки WinSCP.dll. Проблема заключается в том, что вы работаете в контексте загрузки PowerShell.exe(или powershell_ise.exe), а сборки, которые WinSCP.dll не будут найдены в этих двух базовых каталогах exe. Поэтому вам нужно будет загрузить зависимые сборки до того, как загрузчик CLR захлопнет, потому что он не может найти нужную DLL. Если вам нужна помощь в выяснении, какая сборка не найдена, ознакомьтесь с инструментом fuslogvw.exe.

Кстати, с PowerShell v2 вы должны использовать Add-Type -Path <path> вместо [S.R.A]:: LoadFrom (...).

Ответ 6

Была такая же проблема, и это сработало для меня:

Щелкните правой кнопкой мыши на файле DLL. (WinSCP.dll в вашем случае)
Внизу, на вкладке "Общие", может быть опция разблокировки. Отметьте эту опцию, чтобы разблокировать файл.