You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行ASP.NET Core应用时其版本及对应程序集版本由什么决定

ASP.NET Core版本选择逻辑

不管你是手动在Microsoft.NET.Sdk项目中添加Microsoft.AspNetCore.App的框架引用,还是直接使用Microsoft.NET.Sdk.Web(该SDK会隐式引入这个框架引用),版本选择逻辑完全一致,按.NET版本阶段划分规则如下:

  • .NET Core 3.0 及后续所有版本(含.NET 5/6/7/8等)
    从这个版本开始,ASP.NET Core已经作为.NET基础运行时的内置组件发布,和.NET运行时强绑定,不存在独立于运行时的版本选择逻辑:
    • 你在<TargetFramework>里指定的大版本(比如netcoreapp3.1、net6.0)直接决定ASP.NET Core的大版本号
    • 具体加载的补丁版本,默认遵循和.NET运行时完全一致的前滚规则:优先加载本机已安装的对应大版本下最高补丁版的ASP.NET Core共享框架
    • 注意:不要尝试在<FrameworkReference>标签上添加Version属性指定版本,这个写法在3.0+版本会被SDK直接忽略,不会产生任何效果。
  • .NET Core 2.x 及更早版本
    这个阶段ASP.NET Core还没有纳入共享框架体系,是通过独立NuGet元包的形式发布的,你直接给对应的包引用节点加Version属性就能自由指定版本,和普通NuGet包的版本选择逻辑完全一致。

同.NET大版本下切换不同ASP.NET Core补丁版本做特性测试的方法

因为3.0+版本ASP.NET Core和运行时强绑定,你没法直接在项目文件里单独指定ASP.NET Core版本,要做同大版本的特性差异测试,可以用下面两种可落地的方案:

  • 方案1:用global.json锁定SDK版本
    每个正式发布的.NET SDK版本,都对应固定版本的运行时和ASP.NET Core组件。你只需要提前在测试环境安装好要对比的两个补丁版本对应的SDK,在项目根目录放置global.json文件,通过sdk.version指定具体SDK版本,同时把rollForward设为Disable禁止自动前滚,就能完全锁定编译、运行阶段使用的ASP.NET Core版本。要切换测试版本只需要修改global.json里的版本号即可。
    示例global.json配置:
    {
      "sdk": {
        "version": "3.1.100",
        "rollForward": "Disable"
      }
    }
    
    上面的配置会强制使用3.1.100版本的SDK,对应加载3.1.0版本的ASP.NET Core运行时,不会自动调用本机安装的更高3.1补丁版本。
  • 方案2:框架依赖部署+运行时前滚配置
    如果你不想安装多个版本的SDK,可以提前在本机安装好需要测试的两个版本的ASP.NET Core共享框架,在项目里添加runtimeconfig.template.json文件,指定运行时加载框架的版本规则和前滚策略,就能控制应用启动时加载对应版本的ASP.NET Core共享框架。

补充:如果用自包含(self-contained)模式发布,你指定的.NET运行时版本会直接决定打包进程序的ASP.NET Core版本,不需要额外做其他配置,适合需要在干净环境做对比测试的场景。


内容的提问来源于stack exchange,提问作者Rob L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 02:18:20