我想在某些PowerShell脚本中使用.NET我将要编写 - 如何知道/声明在这些脚本运行时要处理哪个版本的.NET?哪个.NET版本是我的PowerShell脚本使用?
是否可以选择我的脚本将运行的.NET版本?
我想在某些PowerShell脚本中使用.NET我将要编写 - 如何知道/声明在这些脚本运行时要处理哪个版本的.NET?哪个.NET版本是我的PowerShell脚本使用?
是否可以选择我的脚本将运行的.NET版本?
在PowerShell 2.0中,只取偷看在$PSVersionTable
变量:
PS> $psversiontable
Name Value
---- -----
CLRVersion 2.0.50727.4927
BuildVersion 6.1.7600.16385
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
在PowerShell 1.0中,使用[System.Environment]::Version
:
PS> [Environment]::Version
Major Minor Build Revision
----- ----- ----- --------
2 0 50727 4927
哪一个是.NET版本?它是CLRVersion吗? – 2014-11-26 02:40:15
@Backwards_Dave是的,CLRVersion指示公共语言运行库的版本。您可以将该版本号与正在使用的.NET Framework版本相关联 - 这个SO答案http://stackoverflow.com/questions/212896/how-do-the-net-framework-clr-and-visual-studio-version-数字涉及到每个 – 2014-11-26 20:37:58
查看该文章Hey, Scripting Guy! How Do I Check Which Version of Windows PowerShell I'm Using?。它显示了您可以在注册表中的哪个位置进行确认。
.NET版本可以从mscorlib的版本推断。所以,你可以做在PowerShell中以下输出.NET的当前版本:
$a = [System.Reflection.Assembly]::Load("mscorlib")
$a.GetName().Version
您不必加载mscorlib,因为它默认已经加载到应用程序域中:'([AppDomain] :: CurrentDomain.GetAssemblies()|?{$ _。GetName()。Name -eq“mscorlib”}) .GetName()。Version' – 2010-07-27 18:58:56
更容易使用:[环境] ::版本 – x0n 2010-07-30 15:19:29
@ x0n [环境] ::版本返回CLR版本,但mscorlib.GetName()。版本返回使用的.net框架 – 2014-05-14 17:40:54
我发现,你可以看看在目录C的信息:\ WINDOWS \ Microsoft.NET \框架:
cd C:\Windows\Microsoft.NET\Framework
dir
那个里面的目录会告诉你安装的框架的版本。
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 14/07/2009 10:48 3082
d---- 14/07/2009 4:37 v1.0.3705
d---- 14/07/2009 4:37 v1.1.4322
d---- 25/06/2010 17:26 v2.0.50727
d---- 14/07/2009 10:48 v3.0
d---- 14/07/2009 10:48 v3.5
I don我不认为这就是问题所在。 – svick 2014-09-15 18:14:19
这个问题需要一个编程解决方案 - doh! – 2017-01-06 11:04:04
要获得.NET版本:
[System.Reflection.Assembly]::GetExecutingAssembly().ImageRuntimeVersion
......这是,默认情况下,该版本的CLR的组件(System.Management.Automation.dll
)下进行编译。
不,你不能选择你可以运行脚本的.NET版本。
powershell.exe是硬编码加载CLR的V2.0,总是。这对v1和v2都有效。 – x0n 2010-07-30 15:18:22
和powershell版本的最简洁的方式可能是:[环境] ::版本 – x0n 2010-07-30 15:19:02
George_Howarth,这是不正确的。正如下面的jmh_gr指出的那样,你可以覆盖所使用的.NET版本(所以它不会被硬编码)。我需要检查PS1中.NET4程序集的版本,为此,我应用了下面发布的提示jmh_gr(.NET 1未能阅读较新的程序集类型)。运行“[System.Reflection.Assembly] :: GetExecutingAssembly()。ImageRuntimeVersion”返回v2.0.50727,但运行“[Environment] :: Version”会返回更准确的4.0.30319.296。 – 2013-02-06 10:33:15
PS> [Runtime.InteropServices.RuntimeEnvironment] :: GetRuntimeDirectory ()
C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \
......不,你不能选择哪个.NET版本可以在运行该脚本 - 乔治·霍沃斯
哇,这不是真的!您可以可以指定PowerShell使用哪种版本的.NET。关键是.NET标准应用程序配置文件,其格式为[appname] .exe.config。您可以将其放在与大多数.NET应用程序相同的目录中 - 包括PowerShell和可执行文件 - 并且CLR将自动加载配置文件中指定的任何可识别的选项。其中一个选项是您希望应用程序使用的CLR版本。
这是在问题中详细记录:How can I run PowerShell with the .NET 4 runtime?。具体见皇帝XLII的帖子。
而不是皇帝XLII,尝试杰普斯蒂格尼尔森的回答http://stackoverflow.com/a/27188121。 – erroric 2015-01-23 16:36:22
截至该框架的3.5版本,它们都是向后兼容的/包含在一起的。因此,只需使用与您定位的框架版本一致的功能子集即可。 – 2010-07-27 15:27:59