哪个版本的coreclr?

Which version of coreclr?

在 .NET CLI 中,我可以使用开关 --version 来获取 CLI 的版本。有没有类似的方法来获取 coreclr 的版本?

coreclr 的版本在我们应用程序的 project.json 中。 dnvm list -detailed(来自之前的工具链)向我们展示了与 dotnet 工具链完全无关的运行时信息。

> dnvm list -detailed
Active Version         Runtime Architect OperatingSystem Alias   Location
------ -------         ------- --------- --------------- -----   --------
       1.0.0-rc2-16595 coreclr x64       win                     C:\Users\me\.dnx\runtimes 
  *    1.0.0-rc2-20221 clr     x86       win             default C:\Users\me\.dnx\runtimes

我们可以找到对应的dotnet相关资料:

  • 版本和运行时在project.json的frameworks部分(例如netcoreapp1.0、net451)。
  • 架构和操作系统在project.json的runtimes部分(例如win7-x64)。
  • 位置 是恢复后我们的 NuGet 全局包文件夹 (nuget locals all -list) 和构建后项目的 bin
  • Alias 和 Active 已过时。

"There's no dnvm replacement" for the .NET CLI and no command to "get the version of the coreclr." 那是因为运行时现在在我们的 project.json 中完全指定并使用 dotnet restore 命令安装.

使用 dnu/dnx/dnvm 工具链,我们独立于我们的应用程序及其依赖项安装了运行时。

  1. 我们用dnvm install|upgrade|use下载并使用了运行时; dnvm没有咨询project.json。
  2. 我们使用 dnu restore 下载特定于应用程序的依赖项; dnu 咨询过 project.json.

使用 dotnet 工具链,restore 操作结合了这两个步骤。它咨询我们的 project.json 并下载运行时和依赖项。

dnvm 不与 dotnet 工具链交互。事实上,我们可以删除 ~/.dnx 目录,然后 dotnet 将构建我们的项目。

没有了 dnvm

coreclr 的版本在您的 project.json 文件中确定。

安装 dotnet cli 时还有一个共享的 运行时间。您可以在 dotnet cli 文件夹中找到它。

如果您的应用程序没有在 project.json 中指定任何 运行 时间,那么您的应用程序是可移植的,并且将 运行 使用共享的 运行 时间。您可以指定多个 运行 次,您的应用程序二进制文件将分别编译所有这些 运行 次。

已更新:

将 link 添加到 .NET Platform Standard 描述在 .NET API 中设计新方法的文档

Link 到 David Fowl 的 GitHub repository 描述 .NET 平台标准

这里是一个示例,其中指定了运行次

{
  "version": "1.0.0-*",
  "compilationOptions": {
    "warningsAsErrors": true,
    "preserveCompilationContext": true,
    "emitEntryPoint": true
  },
  "dependencies": {
       ...
  },
  "frameworks": {
    "net451": {
      "dependencies": {
        ....
      }
    },
    "netcoreapp1.0": {
      "imports": [
        "dnxcore50",
        "portable-net45+win8"
      ],
      "dependencies": {
        "NETStandard.Library": "1.5.0-rc2-24018",
        "Microsoft.DotNet.ProjectModel": "1.0.0-rc2-002416"
      }
    }
  },
  "content": [
    "config.json"
  ],
  "runtimes": {
    "win7-x64": {},
    "win7-x86": {},
    "osx.10.11-x64": {},
    "ubuntu.14.04-x64": {},
    "centos.7-x64": {},
    "rhel.7.2-x64": {},
    "debian.8.2-x64": {}
  }
}

现有的答案可能包含所有信息,但部分信息被遗留信息掩盖了,所以让我尝试 实用的摘要,截至 .NET Core v2.0 beta.

  • 虽然 全球活动的 SDK 版本 ,因为dotnet --version[1] 报道 ,

  • no 全球活动 运行time (CoreCLR) 版本 - 运行时间是并排安装的,每个项目确定它针对哪个运行时间,通过其 *.csproj 文件。

列出所有已安装 CoreCLR 版本:

  • bash:

    • ls -1 "$(dirname "$(which dotnet)")/shared/Microsoft.NETCore.App"
  • PowerShell Core(Windows 和 Unix)中:

    • (Get-ChildItem "$((Get-Command -Type Application dotnet).source)/../shared/Microsoft.NETCore.app").Name

检查给定项目的目标CoreCLR:(运行项目根文件夹中的命令):

  • bash:

    • awk -F '</?RuntimeFrameworkVersion>' 'NF>1 {print }' *.csproj
  • PowerShell Core(Windows 和 Unix)中:

    • ([xml] (Get-Content -Raw *.csproj)).Project.PropertyGroup.RuntimeFrameworkVersion

有关包含此功能及更多功能的 PowerShell Core 脚本,请参阅我的 this Gist


[1] 或者,在每个项目的基础上,您可以通过在项目文件夹中放置一个 global.json 文件来覆盖全局活动的 SDK 版本 - 请参阅 the docs .
另请注意,仅 运行ning dotnet 不带参数 或 运行ning dotnet --version 未安装 SDK 将显示反映共享 host ("driver") 版本的文本 - 这种模糊和混乱的行为正在 GitHub here 上讨论。