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

.NET 7发布的应用在Ubuntu 23.04无法运行,求排查方案

问题排查:.NET 7双项目解决方案发布后无法运行(Ubuntu 23.04)

项目结构

/Project1
  - Project1.csproject
  - appsettings.json

/Project2
  - Project2.csproject
  - appsettings.json

MySolution.sln

发布操作及输出

执行的发布命令:

dotnet publish 'MySolution.sln' --self-contained false -r linux-x64 -c Release -o publish

命令输出:

MSBuild version 17.4.3+7e646be43 for .NET
Determining projects to restore...
All projects are up-to-date for restore.
Project1 -> /home/myuser/mysolution/project1/bin/Release/net7.0/linux-x64/Project1.dll
Project1 -> /home/myuser/mysolution/publish/
Project2 -> /home/myuser/mysolution/project1/bin/Release/net7.0/linux-x64/Project2.dll
Project2 -> /home/myuser/mysolution/publish/

发布后/publish目录包含代码,但应用无法运行,直接执行dotnet Project1.dll --verbosity=diagnostic无任何输出。

应用Kestrel端口配置

Project1/appsettings.json

"AllowedHosts": "*",
"Kestrel": {
  "Endpoints": {
    "Http": {
      "Url": "http://localhost:5001"
    },
    "Https": {
      "Url": "https://localhost:5001"
    }
  }
}

Project2/appsettings.json

"AllowedHosts": "*",
"Kestrel": {
  "Endpoints": {
    "Http": {
      "Url": "http://localhost:5002"
    },
    "Https": {
      "Url": "https://localhost:5002"
    }
  }
}

当前.NET环境信息

.NET SDK:
 Version:   7.0.105
 Commit:    e1bc5e001c

Runtime Environment:
 OS Name:     ubuntu
 OS Version:  23.04
 OS Platform: Linux
 RID:         ubuntu.23.04-x64
 Base Path:   /usr/lib/dotnet/sdk/7.0.105/

Host:
  Version:      7.0.5
  Architecture: x64
  Commit:       8042d61b17

.NET SDKs installed:
  7.0.105 [/usr/lib/dotnet/sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 7.0.5 [/usr/lib/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 7.0.5 [/usr/lib/dotnet/shared/Microsoft.NETCore.App]

Systemd服务配置

创建的/etc/systemd/system/project1.service文件内容:

[Unit]
Description=Project1

[Service]
Type=simple
WorkingDirectory=/home/myuser/
Restart=on-failure
RestartSec=10
ExecStart=/usr/bin/dotnet /home/myuser/mysolution/project1/bin/Release/net7.0/linux-x64/Project1.dll
KillSignal=SIGINT
SyslogIdentifier=dotnet-project1
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

服务启动后瞬间停止。


排查步骤

  • 检查发布目录配置文件覆盖问题:两个项目发布到同一个publish目录,appsettings.json会被后发布的项目覆盖,导致应用读取错误的配置。需分别发布到独立目录测试。
  • 单独发布单个项目:执行以下命令分别发布两个项目,再单独启动测试:
    dotnet publish Project1/Project1.csproj --self-contained false -r linux-x64 -c Release -o publish-project1
    dotnet publish Project2/Project2.csproj --self-contained false -r linux-x64 -c Release -o publish-project2
    
    进入对应目录执行dotnet Project1.dll或dotnet Project2.dll,观察是否有输出。
  • 强制输出启动日志:设置日志环境变量后再启动,获取详细错误信息:
    export ASPNETCORE_LOGGING__LOGLEVEL__DEFAULT=Debug
    export ASPNETCORE_LOGGING__CONSOLE__ENABLED=true
    dotnet Project1.dll
    
  • 确认工作目录与配置文件路径:运行应用时确保当前工作目录包含appsettings.json,或手动指定配置文件路径:
    dotnet Project1.dll --configuration /path/to/Project1/appsettings.json
    
  • 修正Systemd服务配置:
    • 将WorkingDirectory修改为应用所在目录(如/home/myuser/mysolution/project1/bin/Release/net7.0/linux-x64/),确保服务能读取配置文件。
    • 添加User=myuser配置项,避免用root权限运行,同时确保该用户对应用目录有读写权限:
      [Service]
      # 新增或修改以下内容
      User=myuser
      WorkingDirectory=/home/myuser/mysolution/project1/bin/Release/net7.0/linux-x64/
      
  • 查看Systemd服务日志:实时查看服务启动日志,定位失败原因:
    journalctl -u project1.service -f
    
  • 检查端口占用:确认配置的端口未被其他进程占用:
    ss -tulpn | grep 5001
    ss -tulpn | grep 5002
    
  • 验证RID兼容性:去掉-r linux-x64参数重新发布,让系统自动匹配RID,避免兼容性问题:
    dotnet publish Project1/Project1.csproj --self-contained false -c Release -o publish-project1
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:24:53