我正在更新一个PowerShell脚本,该脚本管理一些.NET程序集.该脚本是为根据生成的程序集编写的.NET 2(与PowerShell运行的框架版本相同),但现在需要使用.NET 4程序集以及.NET 2程序集.

由于.NET 4支持运行针对旧版本的框架构建的应用程序,因此当我需要在.NET 4程序集上运行PowerShell时,似乎最简单的解决方案是使用.NET 4运行时启动PowerShell.

我怎样才能用它运行PowerShell.NET4运行时?

推荐答案

发动机在空气中运转良好.NET 4.0.PowerShell(console主机和ISE)没有,只是因为它们是针对旧版本的进行编译的.网有一个注册表设置将为change the .NET framework loaded systemwide,这将反过来允许PowerShell使用.NET 4.0课程:

reg add hklm\software\microsoft\.netframework /v OnlyUseLatestCLR /t REG_DWORD /d 1
reg add hklm\software\wow6432node\microsoft\.netframework /v OnlyUseLatestCLR /t REG_DWORD /d 1

要仅更新ISE以使用.NET 4.0,您可以更改配置($psHome\powershell_ise.exe.config)文件,使其具有如下区块:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup>
      <supportedRuntime version="v4.0.30319" />
    </startup>
</configuration>

您可以使用PowerShell API(System.Management.Automation.PowerShell)构建调用PowerShell的.NET4.0应用程序,但这些步骤将有助于使开箱即用的PowerShell主机在.NET4.0下工作.


Remove the registry keys when you don't need them any more. These are machine-wide keys and forcibly migrate ALL applications to .NET 4.0, even applications using .net 2 and .net 3.5


.net相关问答推荐

在PowerShell中,XML子对象和属性是对象属性.它怎麽工作?

正则表达式匹配 URL 中的多个子目录

如何在 NET 5 / 6 中使用 Direct3D11CaptureFramePool

无法使用 int.Parse 从字符串转换值

Gacutil.exe 成功添加程序集,但在资源管理器中无法查看程序集.为什么?

在 C# 中将字节数组保存为磁盘上的文件的最有效方法是什么?

如何从 appsettings.json 中获取价值

从 Windows 窗体打开 URL

有没有办法从方法返回匿名类型?

Visual Studio 2017 和 2019 突出显示滚动条中所选单词的出现

哪个密码字符在 winforms 文本框中显示黑点 (•)?

用 double 替换 int 时的 Visual Studio 长编译

使 HashSet 不区分大小写

从 'System.Int32' 到 'System.Nullable`1[[System.Int32, mscorlib]] 的无效转换

为什么 Roslyn 中有异步状态机类(而不是 struct )?

安装带有恢复操作的 Windows 服务以重新启动

.NET 图形库?

可以从 C# 调用 C++ 代码吗?

如何为 Dapper 查询动态创建参数

判断数据表中是否包含空值的最佳方法