Powershell v5.1似乎使用了.Net Framework v4.0
[Environment]::Version
# Major Minor Build Revision
# ----- ----- ----- --------
# 4 0 30319 42000
而DateTimeOffset.FromUnixTimeSeconds方法需要.Net Framework v4.6+,所以基本上Powershell v5.1不应该访问它。
[DateTimeOffset]|Get-Member -Static -Name FromUnixTimeSeconds
# TypeName: System.DateTimeOffset
# Name MemberType Definition
# ---- ---------- ----------
# FromUnixTimeSeconds Method static System.DateTimeOffset FromUnixTimeSeconds(long seconds)
为什么我可以调用它?它是否与C# AssemblyVersion & AssemblyFileVersion有关?
1条答案
按热度按时间of1yzvn41#
[Environment]::Version
报告CLR( 运行时 )版本,该版本与 .NET Framework 版本不同,后者是基于给定CLR版本构建的独立版本控制类库[1]。要获取 *framework版本 *,请使用the following,它返回一个 * 字符串 *,例如
.NET Framework 4.8.4341.0
:注:
*注意事项:正如Bacon Bits报告的那样,
PSReadLineModule
module的2.0
版本可能会“隐藏”该属性,因为它莫名其妙地与[System.Runtime.InteropServices.RuntimeInformation]
类的旧版本捆绑在一起。Windows 11 22 H2 * 之前的Windows PowerShell版本附带 *2.0
,因此您必须手动将PSReadLine
模块升级到2.1
或更高版本(2.2.6
是撰写本文时的最新版本),例如使用Install-Module -Force PSReadLine -Scope CurrentUser
;详见注解。"4.8.04084"
:[2][1]在跨平台的.NET Core / .NET 5+版本中,只有一个 * 统一运行时 * 还包括类库,
[Environment]::Version
在.NET Core 3.0和更高版本中正确地反映了类库。[2]奇怪的是,这个版本与
[System.Runtime.InteropServices.RuntimeInformation]::FrameworkDescription
(如果有的话)报告的版本号不同,还有另一个版本不同的变体,作为来自同一注册表项的InstallPath
值的一部分;例如C:\Windows\Microsoft.NET\Framework64\v4.0.30319\