麒麟 Linux aarch64安装.NET 6,并适配.net应用(达梦数据库)
2026/7/24 10:15:11 网站建设 项目流程

麒麟 Linux aarch64安装.NET 6,并适配.net应用(达梦数据库)

适用环境:麒麟 Linux aarch64,达梦(DM)数据库,.NET 6。

部署目录约定:

  • .NET 运行时:/home/hmf/dotnet

  • 应用本体:/home/hmf

一、安装.NET6运行环境

wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
chmod +x dotnet-install.sh

# 不加 --runtime 参数 = 装完整 SDK(含编译工具链 + 对应运行时)
./dotnet-install.sh --channel 6.0 --install-dir /home/hmf/dotnet

# 配置环境变量(安装在用户目录下,写入 ~/.bashrc 即可,不需要 root)echo 'export DOTNET_ROOT=/home/hmf/dotnet' >> ~/.bashrc
echo 'export PATH=$PATH:/home/hmf/dotnet' >> ~/.bashrc
source ~/.bashrc

#

#验证版本

dotnet --info

dotnet --list-sdks # 应该能看到 6.0.x
dotnet --list-runtimes # 应该能看到 Microsoft.AspNetCore.App 6.0.x 和 Microsoft.NETCore.App 6.0.x

离线环境(连不了外网):改成下载dotnet-sdk-6.0.x-linux-arm64.tar.gz(dotnet.microsoft.com),传到 tidb 后解压到/home/hmf/dotnet,其余步骤一样。

#检查版本Version: 6.0.36

二、适配应用

2.1、准备达梦驱动

达梦官网(www.dameng.com)下载中心,用达梦通行证账号登录后下载.NET驱动包(文件名类似dotNet-<日期>.zip),解压后会看到几个文件夹,比如:

dmDriver/
DmProvider/ <- 这个就是我们要用的
DM.DmProvider.8.3.1.51364.nupkg <- 真正的 NuGet 包文件
net40/ net45/ net5.0/ net6.0/ ... <- 包展开后按目标框架分的 lib 目录,不用管
EFCore.Dm6.0/ <- Entity Framework Core 驱动,本项目用不到,不用管

DmProvider这个文件夹整个传到目标机,比如放在/home/hmf/dmDriver/DmProvider

注册为本地 NuGet 源

dotnet nuget add source /home/hmf/dmDriver/DmProvider --name dm-local

如果提示dm-local这个名字已经存在(比如之前加过、指向了别的路径),改用:

dotnet nuget update source dm-local --source /home/hmf/dmDriver/DmProvider

确认一下:

dotnet nuget list source
# dm-local 那一行应该显示 /home/hmf/dmDriver/DmProvider

2.2、加到项目里

cd /home/hmf/TestApp
dotnet add package DM.DmProvider --version 8.3.1.51364 -s /home/hmf/dmDriver/DmProvider

会自动把<PackageReference Include="DM.DmProvider" Version="8.3.1.51364" />写进TestApp.csproj,不用手动改文件。

换了机器部署时,这一步(下载驱动 + 注册本地源 + add package)都要重新做一遍,因为dotnet nuget add source是注册在当前机器的全局 NuGet 配置里的,不会跟着项目代码一起传过去。

2.3、还原依赖并编译

cd /home/hmf/TestApp
dotnet build -c Release

2.4、 修改数据库连接配置

编辑/home/hmf/TestApp/appsettings.json

{
"ConnectionStrings": {
"DmConn": "Server=<达梦库地址>;Port=<端口,默认5236>;User Id=<用户名>;PWD=<密码>;"
},
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://0.0.0.0:8089"
}
}
}
}

监听地址建议用0.0.0.0(监听所有网卡)而不是写死具体 IP,机器换 IP 或有多网卡时更省心。

2.5、 运行前先验证数据库网络连通性

telnet <达梦库地址> 5236
# 或
nc -zv <达梦库地址> 5236

disql等达梦客户端工具的话,也可以直接拿账号密码连一下确认,OK 之后再启动本应用,避免网络问题和应用层报错混在一起排查。

2.7、发布并直接运行验证

cd /home/hmf/TestApp
dotnet publish -c Release -o /home/hmf/TestApp/out
cd /home/hmf/TestApp/out
dotnet TestDmPlugin.dll

看到类似输出说明启动成功:

Now listening on: http://0.0.0.0:8089
Application started. Press Ctrl+C to shut down.

浏览器访问http://10.1.1.229:8089/,应看到 select/other 两个 SQL 输入框的界面,测试 SQL 确认能正常连上达梦库并返回结果。

Ctrl+C停止后,继续第 8 步配置为系统服务长期运行。

查看日志

页面每次点击execSelect/execOther执行 SQL,都会记录一条日志(请求的 SQL、成功返回行数/影响行数、或失败时的异常堆栈),写入运行目录下的logs文件夹,按天滚动:

/home/hmf/TestApp/out/logs/app-20260720.log

  • 日志目录可通过appsettings.json里的Logging:LogDirectory配置,默认值logs(相对可执行文件所在目录),也可以填绝对路径。

  • 前台运行(第7步)和 systemd 服务(第8步)用的是同一份代码,都会写这个日志文件,跟终端输出/journalctl是两份独立的记录,互不影响。

  • 排查问题时优先看这个文件,比journalctl更完整(包含每次 SQL 请求明细)。

tail -f /home/hmf/TestApp/out/logs/app-$(date +%Y%m%d).log

三、配置systemd服务和开放端口

3.1、置systemd服务

创建/etc/systemd/system/testapp.service

[Unit]
Description=TestApp DM Plugin Test
After=network.target

[Service]
WorkingDirectory=/home/hmf/TestApp/out
ExecStart=/home/hmf/dotnet/dotnet /home/hmf/TestApp/out/TestDmPlugin.dll
Restart=always
RestartSec=5
KillSignal=SIGINT
SyslogIdentifier=testapp
User=hmf
Environment=ASPNETCORE_ENVIRONMENT=Production

[Install]
WantedBy=multi-user.target

启用并启动:

systemctl daemon-reload
systemctl enable testapp
systemctl start testapp
systemctl status testapp

查看日志:

journalctl -u testapp -f

除了 journald,应用自身还会把日志写入文件(详见下方「日志文件」一节),路径固定在/home/hmf/TestApp/out/logs/,不受 systemd/前台运行方式影响,且不会随终端关闭或服务重启丢失。

后续改了代码,重新发布只需要:

cd /home/hmf/TestApp
dotnet publish -c Release -o /home/hmf/TestApp/out
systemctl restart testapp

3.2、开放防火墙端口

# firewalld
firewall-cmd --permanent --add-port=8089/tcp
firewall-cmd --reload

# 或 iptables
iptables -I INPUT -p tcp --dport 8089 -j ACCEPT

四、常见问题

现象可能原因处理
dotnet build/dotnet add package报找不到 SDK只装了 Runtime,没装 SDK回到第 1 步,用不带--runtime的命令装完整 SDK
dotnet add package DM.DmProviderNU1101/找不到包本地 NuGet 源没注册对,或路径指错了dotnet nuget list source确认dm-local指向的路径就是DmProvider那个文件夹(里面直接能看到.nupkg文件的那一层)
编译报warning MSB3245: Could not locate the assembly "DmProvider"csproj里残留旧的<Reference HintPath=...>写法打开TestApp.csproj,删掉<Reference Include="DmProvider">那一整段,只留<PackageReference Include="DM.DmProvider" ...>
连接达梦库报错/超时连接串错误、网络不通、达梦库未开放对应端口先做第 6 步的网络连通性验证;检查appsettings.json连接串
页面打不开端口未监听/防火墙未放行/进程未启动ss -lntp \| grep 8089确认监听;检查systemctl status testapp和防火墙规则
中文乱码精简版系统缺少区域/编码支持确认系统已装localezh_CN.UTF-8
权限不足无法监听端口非 root 用户尝试监听 1024 以下端口用 1024 以上端口(已经是 8089,没问题),或给可执行文件加setcap 'cap_net_bind_service=+ep'

五、其他:达梦驱动下载

达梦官方下载平台(离线内网用,下载完整 ARM 驱动包)

主下载页(官方入口)

https://eco.dameng.com/download/

两种下载方式获取.NET 驱动

  1. 下载 DM8 ARM64 开发版安装包(推荐)

    • CPU 平台:鲲鹏 920(aarch64/ARM 通用)
    • 系统:银河麒麟 / 统信 UOS
    • 下载后解压 / 安装,路径:dmdbms/drivers/dotNet/
    • 内含Dameng.Data.Provider.8.x.x.nupkg离线安装包

2、页面底部【工具与驱动】单独下载.NET 驱动下滑页面找到「.NET 开发包」,直接下载对应 DM8 版本驱动压缩包。本次我下载的是这个。下载的文件包为:dotNet-20260710.zip

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询