在Windows 8 RTM上的.NET应用程序中嵌入Powershell v2.0

时间:2012-09-28 10:29:37

标签: .net powershell

在从Windows 7升级之前尝试运行托管的PowerShell脚本时出现以下错误我从未遇到此错误。

  

加载扩展类型数据时发生以下错误   file:Microsoft.PowerShell.Core,   C:\ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 \ types.ps1xml(2977):错误   在“System.Security.AccessControl.ObjectSecurity”类型中:例外:   getter方法应该是public,non void,static,并且有一个   PSObject类型的参数。 Microsoft.PowerShell.Core,   C:\ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 \ types.ps1xml(2984):错误   在“System.Security.AccessControl.ObjectSecurity”类型中:例外:   getter方法应该是public,non void,static,并且有一个   PSObject类型的参数。 Microsoft.PowerShell.Core,   C:\ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 \ types.ps1xml(2991):错误   在“System.Security.AccessControl.ObjectSecurity”类型中:例外:   getter方法应该是public,non void,static,并且有一个   PSObject类型的参数。 Microsoft.PowerShell.Core,   C:\ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 \ types.ps1xml(2998):错误   在“System.Security.AccessControl.ObjectSecurity”类型中:例外:   getter方法应该是public,non void,static,并且有一个   PSObject类型的参数。 Microsoft.PowerShell.Core,   C:\ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 \ types.ps1xml(3005):错误   在“System.Security.AccessControl.ObjectSecurity”类型中:例外:   getter方法应该是public,non void,static,并且有一个   PSObject类型的参数。

我在App.config中应用了以下内容:

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

问题是什么?

5 个答案:

答案 0 :(得分:37)

解决方案是执行以下操作,而不是仅按照我读过的帖子的建议为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>

答案 1 :(得分:7)

我在VS 2015 Update 3中遇到了同样的问题。

我必须删除文件夹:

%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: - /

答案 2 :(得分:1)

以上答案对我不起作用,我通过删除%APPDATA%.. \ Local \ Microsoft \ VisualStudio \文件夹来解决问题。

重新启动VS后,将重新创建此文件夹,并且包管理器控制台将再次运行。有点原油,但它确实有效。

答案 3 :(得分:1)

在接受的答案中尝试解决方案并厌倦了Visual Studio重置文件后,我从头开始重新安装VS 2015并且从那时起就没有问题了。如果你发现问题仍然存在,核选项绝对值得一试。

答案 4 :(得分:0)

为您的操作系统安装适当版本的PowerShell:

  • Windows XP SP2 / Vista / 2003/2008 - PowerShell v1.0
  • Windows XP SP3 / Vista SP1 / 7/2002 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的一部分)