【问题标题】:Embedding Powershell v2.0 in .NET app on Windows 8 RTM在 Windows 8 RTM 上的 .NET 应用程序中嵌入 Powershell v2.0
【发布时间】:2012-09-28 10:29:37
【问题描述】:

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

加载扩展类型数据时出现以下错误 文件:Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml(2977):错误 在类型“System.Security.AccessControl.ObjectSecurity”中:异常: getter 方法应该是公共的、非 void 的、静态的,并且有一个 PSObject 类型的参数。 Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml(2984):错误 在类型“System.Security.AccessControl.ObjectSecurity”中:异常: getter 方法应该是公共的、非 void 的、静态的,并且有一个 PSObject 类型的参数。 Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml(2991):错误 在类型“System.Security.AccessControl.ObjectSecurity”中:异常: getter 方法应该是公共的、非 void 的、静态的,并且有一个 PSObject 类型的参数。 Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml(2998):错误 在类型“System.Security.AccessControl.ObjectSecurity”中:异常: getter 方法应该是公共的、非 void 的、静态的,并且有一个 PSObject 类型的参数。 Microsoft.PowerShell.Core, C:\Windows\SysWOW64\WindowsPowerShell\v1.0\types.ps1xml(3005):错误 在类型“System.Security.AccessControl.ObjectSecurity”中:异常: getter 方法应该是公共的、非 void 的、静态的,并且有一个 PSObject 类型的参数。

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

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

可能是什么问题?

【问题讨论】:

    标签: .net powershell


    【解决方案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>
    

    【讨论】:

    • 完美——这是这篇关于同一主题的帖子中缺少的附加信息:stackoverflow.com/questions/12060460/…
    • 在 Windows 8.1 上使用 Visual Studio 2013,将这些行添加到 %APPDATA%\..\Local\Microsoft\VisualStudio\12.0\devenv.exe.config&lt;runtime&gt; 部分可以解决问题。
    • 它在 VS2015 中对我来说失败了,这个建议对它很有帮助。只需打开 c:\Users\%username%\AppData\Local\Microsoft\VisualStudio\14.0\devenv.exe.config 并添加相同的行。
    • 很遗憾,Visual Studio 时不时会重新生成这个文件,并且更改会丢失,所以您必须将其放回原处。
    • 快 4 年过去了,这仍然是唯一的解决方案吗?
    【解决方案2】:

    我在 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 :-/

    【讨论】:

    • 我刚刚更新了配置文件,没有删除和文件夹,它对我有用。
    【解决方案3】:

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

    重新启动 VS 后,此文件夹会重新创建,并且包管理器控制台会再次运行。有点粗糙,但它可以完成工作。

    【讨论】:

    • 非常感谢!!!这是唯一有效的方法。更新到 v3 后在我的两台电脑上都发生了……非常感谢和感谢!!!!!!
    • 不是一个好主意。这也将删除许多已安装的扩展。
    • 其实对我没有帮助。
    【解决方案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 管理框架 (WMF) 5.0 的一部分)

      【讨论】:

      • 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 的一部分)
      • 要在本机操作系统版本中安装,请转到:-控制面板\所有控制面板项目\程序和功能或等效项,-然后单击“打开或关闭 Windows 功能”链接, -单击左侧导航窗格中 MMC 树视图中的“功能”,-然后单击“功能摘要”窗格手风琴子部分右侧的“添加功能”链接 -最后,选中 Windows 的复选框PowerShell 集成脚本环境 (ISE) 或等效(名称在不同操作系统中可能不同)
      • 在“版本”部分查看原始发行版本和匹配的操作系统:en.wikipedia.org/wiki/Windows_PowerShell>
      猜你喜欢
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多