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

执行EF Core迁移包时抛出.NET框架未找到错误的原因排查

问题:EF Core迁移包bundle1.exe提示找不到已安装的.NET 9.0.0框架?

我为.NET应用执行以下命令创建了EF Core迁移包,用于部署到目标机器时运行数据库迁移:

dotnet ef migrations bundle --context applicationdbcontext 
       -o c:\users\hp\downloads\bundle1.exe --force

但在目标机器运行bundle1.exe时,出现如下错误提示:

You must install or update .NET to run this application.

App: C:\Users\Amjad\Downloads\AppName\bundle1.exe
Architecture: x64
Framework: 'Microsoft.NETCore.App', version '9.0.0' (x64)
.NET location: C:\Users\Amjad\Downloads\AppName\

No frameworks were found.

目标机器执行dotnet --info的输出显示已安装.NET 9.0.0及更高版本运行时,具体输出如下:

C:\Users\hp>dotnet --info

.NET SDK:
 Version:           9.0.102
 Commit:            cb83cd4923
 Workload version:  9.0.100-manifests.43af17c7
 MSBuild version:   17.12.18+ed8c6aec5

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.19045
 OS Platform: Windows
 RID:         win-x64
 Base Path:   C:\Program Files\dotnet\sdk\9.0.102\

.NET workloads installed:
There are no installed workloads to display.
Configured to use loose manifests when installing new manifests.

Host:
  Version:      9.0.1
  Architecture: x64
  Commit:       c8acea2262

.NET SDKs installed:
  8.0.204 [C:\Program Files\dotnet\sdk]
  9.0.102 [C:\Program Files\dotnet\sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 6.0.13 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 8.0.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 9.0.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 9.0.1 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 6.0.13 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 8.0.4 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 9.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 9.0.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 6.0.13 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 8.0.4 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 9.0.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 9.0.1 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

Other architectures found:
  x86   [C:\Program Files (x86)\dotnet]
    registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\InstallLocation]

Environment variables:
  Not set

global.json file:
  Not found

Learn more:
  https://aka.ms/dotnet/info

Download .NET:
  https://aka.ms/dotnet/download

请问为何bundle1.exe仍无法执行,并提示需要安装对应框架?


解答
  • 迁移包的.NET路径检测异常:错误信息显示.NET location: C:\Users\Amjad\Downloads\AppName\,说明bundle1.exe在当前目录下查找.NET运行时,而非系统默认的C:\Program Files\dotnet\路径。这是因为默认创建的迁移包属于依赖框架部署,但打包时的环境或配置导致它优先检测本地目录的.NET文件。

  • 版本匹配的严格性问题:尽管目标机器安装了.NET 9.0.0和9.0.1,但迁移包明确要求Microsoft.NETCore.App, version '9.0.0',部分场景下高版本运行时不会自动兼容低版本的严格依赖,需要确认版本匹配策略。

  • 解决办法:

    1. 重新创建迁移包时,添加--self-contained参数打包成自包含应用,将所需.NET运行时一并打包,无需依赖目标机器的系统安装:
      dotnet ef migrations bundle --context applicationdbcontext -o c:\users\hp\downloads\bundle1.exe --force --self-contained -r win-x64
      
    2. 检查目标机器的环境变量,确保DOTNET_ROOT指向C:\Program Files\dotnet\,未设置则手动添加,让应用能定位到系统安装的.NET运行时。
    3. 在目标机器上进入bundle1.exe所在目录,执行dotnet bundle1.exe,直接通过系统的dotnet宿主程序运行迁移包,绕过应用自身的路径检测逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:13:12