Вложение Powershell v2.0 в приложение .NET в Windows 8 RTM

Я получаю следующую ошибку при попытке запустить сценарии с мощными сценариями до обновления с Windows 7. Я никогда не получал эту ошибку.

При загрузке данных расширенного типа произошла ошибка файл: Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml (2977): ошибка в типе "System.Security.AccessControl.ObjectSecurity" : Исключение: метод getter должен быть открытым, непустым, статическим и иметь один параметр типа PSObject. Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml (2984): ошибка в типе "System.Security.AccessControl.ObjectSecurity" : Исключение: метод getter должен быть открытым, непустым, статическим и иметь один параметр типа PSObject. Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml (2991): ошибка в типе "System.Security.AccessControl.ObjectSecurity" : Исключение: метод getter должен быть открытым, непустым, статическим и иметь один параметр типа PSObject. Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml (2998): ошибка в типе "System.Security.AccessControl.ObjectSecurity" : Исключение: метод getter должен быть открытым, непустым, статическим и иметь один параметр типа PSObject. Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml (3005): ошибка в типе "System.Security.AccessControl.ObjectSecurity" : Исключение: метод getter должен быть открытым, непустым, статическим и иметь один параметр типа PSObject.

Я применил следующее в App.config:

<dependentAssembly>
  <assemblyIdentity name="System.Management.Automation" publicKeyToken="31bf3856ad364e35" />
  <publisherPolicy apply="no" />
</dependentAssembly>

Что может быть проблема?

Ответ 1

Решение состоит в том, чтобы сделать следующее, а не просто добавлять блок только для System.Management.Automation, как было предложено сообщениями, которые я читал, вам нужно добавить один для всех связанных сборок PS.

  <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Management.Automation" publicKeyToken="31bf3856ad364e35" />
            <publisherPolicy apply="no" />
          </dependentAssembly>
        <dependentAssembly>
          <assemblyIdentity name="Microsoft.PowerShell.Commands.Utility" publicKeyToken="31bf3856ad364e35" />
          <publisherPolicy apply="no" />
        </dependentAssembly>
        <dependentAssembly>
          <assemblyIdentity name="Microsoft.PowerShell.ConsoleHost" publicKeyToken="31bf3856ad364e35" />
          <publisherPolicy apply="no" />
        </dependentAssembly>
        <dependentAssembly>
          <assemblyIdentity name="Microsoft.PowerShell.Commands.Management" publicKeyToken="31bf3856ad364e35" />
          <publisherPolicy apply="no" />
        </dependentAssembly>
        <dependentAssembly>
          <assemblyIdentity name="Microsoft.PowerShell.Security" publicKeyToken="31bf3856ad364e35" />
          <publisherPolicy apply="no" />
        </dependentAssembly>
        <dependentAssembly>
          <assemblyIdentity name="Microsoft.PowerShell.Commands.Diagnostics" publicKeyToken="31bf3856ad364e35" />
          <publisherPolicy apply="no" />
        </dependentAssembly>
        </assemblyBinding>
    </runtime>

Ответ 2

У меня была та же проблема в обновлении VS 2015.

Я должен удалить папку:

%APPDATA%\Local\Microsoft\VisualStudio\

а затем добавьте в:

c:\Users\%username%\AppData\Local\Microsoft\VisualStudio\14.‌​0\devenv.exe.config

в разделе:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

следующие строки:

<dependentAssembly>
  <assemblyIdentity name="System.Management.Automation" publicKeyToken="31bf3856ad364e35" />
  <publisherPolicy apply="no" />
</dependentAssembly>

<dependentAssembly>
  <assemblyIdentity name="Microsoft.PowerShell.Commands.Utility" publicKeyToken="31bf3856ad364e35" />
  <publisherPolicy apply="no" />
</dependentAssembly>

<dependentAssembly>
  <assemblyIdentity name="Microsoft.PowerShell.ConsoleHost" publicKeyToken="31bf3856ad364e35" />
  <publisherPolicy apply="no" />
</dependentAssembly>

<dependentAssembly>
  <assemblyIdentity name="Microsoft.PowerShell.Commands.Management" publicKeyToken="31bf3856ad364e35" />
  <publisherPolicy apply="no" />
</dependentAssembly>

<dependentAssembly>
  <assemblyIdentity name="Microsoft.PowerShell.Security" publicKeyToken="31bf3856ad364e35" />
  <publisherPolicy apply="no" />
</dependentAssembly>

<dependentAssembly>
  <assemblyIdentity name="Microsoft.PowerShell.Commands.Diagnostics" publicKeyToken="31bf3856ad364e35" />
  <publisherPolicy apply="no" />
</dependentAssembly>

Я потерял два дня для поиска решений... спасибо MS: -/

Ответ 3

выше ответ не работал у меня, я исправил проблему, удалив папку% APPDATA%..\Local\Microsoft\VisualStudio \.

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

Ответ 4

После попытки решения в принятом ответе и устали от перезагрузки Visual Studio, я переустановил VS 2015 с нуля и с тех пор не имел проблемы. Если вы обнаружите, что проблема не устранена, ядерный вариант определенно стоит попробовать.

Ответ 5

Установите соответствующую версию PowerShell для вашей ОС:

  • Windows XP SP2/Vista/2003/2008 - PowerShell v1.0
  • Windows XP SP3/Vista SP1/7/2003 SP2/2008 R2 - PowerShell v2.0
  • Windows 7 SP1/8/2008 SP1/2008 R2 SP1/2012 - PowerShell v3.0
  • Windows 7 SP1/8.1/2008 R2 SP1/2012/2012 R2 - PowerShell v4.0
  • Windows 7 SP1/8.1/2008 R2 SP1/2012/2012 R2 - PowerShell v5.0 (как часть Windows Management Framework (WMF) 5.0)