单个.NET程序集针对两个不同的CLR?

时间:2014-02-12 03:15:04

标签: .net powershell clr

使用PowerShell版本3.0或4.0的一些人知道您可以指定-Version 2.0参数来启动PowerShell版本2.0。我很想知道PowerShell v2.0可执行文件的确切位置,所以我决定做一些研究。

PowerShell 4.0

powershell.exe
$PSVersionTable.PSVersion;
(Get-Process -Id $pid).Path;

PowerShell 2.0

然后对于PowerShell 2.0版,同样的事情:

powershell -version 2.0
$PSVersionTable.PSVersion;
(Get-Process -Id $pid).Path;

结果显示两个PowerShell版本从同一文件路径运行,但这两个进程正在运行不同的CLR版本。

我的问题是:如果相同的 .NET程序集在两个不同的CLR版本中执行,这种情况怎么可能呢?

PowerShell Versions PowerShell CLR Version

1 个答案:

答案 0 :(得分:2)

事实证明,答案非常简单:PowerShell.exe不是.NET程序集(必须通过ILDasm.exe验证才能证明这一点)。

它只是根据需要将模块/ dll加载到CLR中。 CLRVersion值报告PowerShell在加载程序集时将使用的CLR版本。不幸的是,我无法找到任何详细说明PowerShell用于加载/与.NET代码交互的过程的好资源。