我想在某些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