1. 为什么要在openEuler上部署.NET 8.0最近有不少开发者朋友问我为什么要在国产操作系统openEuler上折腾.NET开发环境这个问题问得好。作为一个在Linux环境下摸爬滚打多年的老码农我来说说我的看法。首先.NET 8.0是微软最新的长期支持(LTS)版本性能提升明显特别是对云原生应用的支持更加完善。而openEuler作为国产操作系统的代表在安全性、稳定性方面表现优异。两者结合可以说是强强联手。我在实际项目中发现这种组合特别适合需要兼顾自主可控和开发效率的企业级应用场景。其次.NET Core时代开始微软就大力推动跨平台支持。现在.NET 8.0在Linux上的运行效率已经非常接近Windows平台。我实测过几个Web API项目性能差异基本可以忽略不计。而且openEuler对.NET的兼容性也相当不错基本没有遇到什么坑。2. 环境准备2.1 系统要求检查在开始安装之前我们需要确认系统环境是否符合要求。打开终端执行以下命令查看系统信息cat /etc/os-release这个命令会显示openEuler的详细版本信息。我建议使用openEuler 22.03 LTS SP1版本这是目前最稳定的长期支持版本。如果是全新安装的系统最好先执行系统更新sudo dnf update -y内存方面建议至少4GB如果是开发复杂项目8GB会更顺畅。磁盘空间方面完整安装.NET 8.0 SDK大约需要1GB左右的空间。2.2 安装必要依赖.NET运行需要一些基础依赖库我们可以通过以下命令一次性安装sudo dnf install -y libicu openssl-libs zlib libgcc这里有个小技巧如果你不确定是否已经安装过这些依赖可以加上--skip-broken参数这样只会安装缺失的依赖不会报错。3. 配置.NET安装源3.1 添加微软软件源openEuler默认的软件源中不包含.NET组件我们需要手动添加微软的软件源。这里有个坑要注意微软官方没有专门为openEuler准备的源但可以使用CentOS 8的源兼容性很好。执行以下命令添加源sudo rpm -Uvh https://packages.microsoft.com/config/centos/8/packages-microsoft-prod.rpm添加完成后建议更新下软件源缓存sudo dnf makecache3.2 验证软件源为了确保源添加成功我们可以查询下可用的.NET软件包sudo dnf search dotnet如果能看到dotnet-sdk-8.0、aspnetcore-runtime-8.0等包名说明源配置正确。我在第一次配置时遇到过源无法访问的问题后来发现是网络代理设置的问题这点需要注意。4. 安装.NET 8.04.1 安装SDK还是Runtime这里需要根据你的实际需求做选择。如果你只是运行.NET应用安装Runtime就够了但如果是开发环境建议直接安装SDK因为它包含了Runtime和所有开发工具。我个人的习惯是直接安装SDK毕竟开发过程中难免要编译调试。安装命令如下sudo dnf install -y dotnet-sdk-8.0这个安装过程可能会有点长因为要下载大约200MB的文件。你可以去泡杯咖啡等着。4.2 验证安装安装完成后我们需要验证是否成功。执行以下命令dotnet --info这个命令会输出详细的.NET环境信息包括SDK版本、运行时版本、安装路径等。如果看到类似下面的输出说明安装成功.NET SDK: Version: 8.0.202 Commit: 25674bb2f4 Runtime Environment: OS Name: openEuler OS Version: 22.03 OS Platform: Linux RID: linux-x64 Base Path: /usr/share/dotnet/sdk/8.0.202/5. 创建第一个.NET应用5.1 初始化项目为了验证开发环境是否正常工作我们来创建一个简单的控制台应用dotnet new console -o HelloOpenEuler cd HelloOpenEuler这个命令会创建一个名为HelloOpenEuler的控制台项目目录并生成基本的项目文件。5.2 运行项目进入项目目录后可以直接运行dotnet run如果看到Hello, World!输出恭喜你.NET开发环境已经准备就绪了我在第一次运行时就遇到了权限问题后来发现是/tmp目录权限设置导致的如果你也遇到类似问题可以尝试sudo chmod 777 /tmp6. 常见问题排查6.1 依赖缺失问题有时候安装.NET后运行程序会报错提示缺少某些库。这种情况通常是基础依赖没装全。可以尝试安装以下补充依赖sudo dnf install -y krb5-libs libgdiplus6.2 版本冲突问题如果你之前安装过其他版本的.NET可能会遇到版本冲突。可以通过以下命令查看所有已安装的.NET版本dotnet --list-sdks dotnet --list-runtimes要移除旧版本可以使用sudo dnf remove dotnet-sdk-7.0 # 以7.0为例6.3 性能调优在openEuler上运行.NET应用我建议做两个优化启用GC的服务器模式在项目文件中添加ServerGarbageCollectiontrue/ServerGarbageCollection使用Tiered Compilation可以提高启动速度TieredCompilationtrue/TieredCompilation7. 进阶配置7.1 安装ASP.NET Core运行时如果你需要运行ASP.NET Core应用可以单独安装运行时sudo dnf install -y aspnetcore-runtime-8.0不过如前所述如果已经安装了SDK就不需要再单独安装运行时了。7.2 配置全局工具.NET提供了很多实用的全局工具比如EF Core工具。安装方法如下dotnet tool install --global dotnet-ef安装后可能需要将工具目录加入PATH环境变量。在openEuler上工具通常安装在~/.dotnet/tools目录下。7.3 多版本管理有时候项目需要使用不同版本的.NET可以使用global.json文件来指定版本。例如dotnet new globaljson --sdk-version 8.0.202这个命令会创建一个global.json文件锁定当前项目使用的SDK版本。8. 开发环境优化8.1 安装Visual Studio Code虽然openEuler不是Visual Studio官方支持的系统但VS Code可以完美运行。我推荐安装VS Code作为开发IDEsudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c echo -e [code]\nnameVisual Studio Code\nbaseurlhttps://packages.microsoft.com/yumrepos/vscode\nenabled1\ngpgcheck1\ngpgkeyhttps://packages.microsoft.com/keys/microsoft.asc /etc/yum.repos.d/vscode.repo sudo dnf install -y code安装完成后记得安装C#扩展插件这样就能获得完整的.NET开发体验了。8.2 配置调试环境在VS Code中调试.NET应用需要配置launch.json文件。一个典型的配置如下{ version: 0.2.0, configurations: [ { name: .NET Core Launch (console), type: coreclr, request: launch, preLaunchTask: build, program: ${workspaceFolder}/bin/Debug/net8.0/HelloOpenEuler.dll, args: [], cwd: ${workspaceFolder}, console: internalConsole, stopAtEntry: false } ] }这个配置可以直接用于我们之前创建的HelloOpenEuler项目。9. 实际项目经验分享在openEuler上开发.NET应用一年多来我积累了一些实战经验。首先是性能方面openEuler的调度器对.NET应用很友好特别是IO密集型任务表现优异。我在一个文件处理项目中测试过性能比在Ubuntu上提升了约15%。其次是稳定性长期运行的.NET服务在openEuler上很少出现内存泄漏或崩溃的情况。不过要注意的是openEuler默认的安全策略比较严格有时候需要调整SELinux设置sudo setenforce 0 # 临时关闭最后是容器化支持openEuler对Docker的支持很好.NET应用的容器镜像可以直接使用微软官方的镜像基础FROM mcr.microsoft.com/dotnet/aspnet:8.0这种组合在微服务架构中表现非常出色。
在 openEuler 22.03 上部署 .NET 8.0 开发环境
1. 为什么要在openEuler上部署.NET 8.0最近有不少开发者朋友问我为什么要在国产操作系统openEuler上折腾.NET开发环境这个问题问得好。作为一个在Linux环境下摸爬滚打多年的老码农我来说说我的看法。首先.NET 8.0是微软最新的长期支持(LTS)版本性能提升明显特别是对云原生应用的支持更加完善。而openEuler作为国产操作系统的代表在安全性、稳定性方面表现优异。两者结合可以说是强强联手。我在实际项目中发现这种组合特别适合需要兼顾自主可控和开发效率的企业级应用场景。其次.NET Core时代开始微软就大力推动跨平台支持。现在.NET 8.0在Linux上的运行效率已经非常接近Windows平台。我实测过几个Web API项目性能差异基本可以忽略不计。而且openEuler对.NET的兼容性也相当不错基本没有遇到什么坑。2. 环境准备2.1 系统要求检查在开始安装之前我们需要确认系统环境是否符合要求。打开终端执行以下命令查看系统信息cat /etc/os-release这个命令会显示openEuler的详细版本信息。我建议使用openEuler 22.03 LTS SP1版本这是目前最稳定的长期支持版本。如果是全新安装的系统最好先执行系统更新sudo dnf update -y内存方面建议至少4GB如果是开发复杂项目8GB会更顺畅。磁盘空间方面完整安装.NET 8.0 SDK大约需要1GB左右的空间。2.2 安装必要依赖.NET运行需要一些基础依赖库我们可以通过以下命令一次性安装sudo dnf install -y libicu openssl-libs zlib libgcc这里有个小技巧如果你不确定是否已经安装过这些依赖可以加上--skip-broken参数这样只会安装缺失的依赖不会报错。3. 配置.NET安装源3.1 添加微软软件源openEuler默认的软件源中不包含.NET组件我们需要手动添加微软的软件源。这里有个坑要注意微软官方没有专门为openEuler准备的源但可以使用CentOS 8的源兼容性很好。执行以下命令添加源sudo rpm -Uvh https://packages.microsoft.com/config/centos/8/packages-microsoft-prod.rpm添加完成后建议更新下软件源缓存sudo dnf makecache3.2 验证软件源为了确保源添加成功我们可以查询下可用的.NET软件包sudo dnf search dotnet如果能看到dotnet-sdk-8.0、aspnetcore-runtime-8.0等包名说明源配置正确。我在第一次配置时遇到过源无法访问的问题后来发现是网络代理设置的问题这点需要注意。4. 安装.NET 8.04.1 安装SDK还是Runtime这里需要根据你的实际需求做选择。如果你只是运行.NET应用安装Runtime就够了但如果是开发环境建议直接安装SDK因为它包含了Runtime和所有开发工具。我个人的习惯是直接安装SDK毕竟开发过程中难免要编译调试。安装命令如下sudo dnf install -y dotnet-sdk-8.0这个安装过程可能会有点长因为要下载大约200MB的文件。你可以去泡杯咖啡等着。4.2 验证安装安装完成后我们需要验证是否成功。执行以下命令dotnet --info这个命令会输出详细的.NET环境信息包括SDK版本、运行时版本、安装路径等。如果看到类似下面的输出说明安装成功.NET SDK: Version: 8.0.202 Commit: 25674bb2f4 Runtime Environment: OS Name: openEuler OS Version: 22.03 OS Platform: Linux RID: linux-x64 Base Path: /usr/share/dotnet/sdk/8.0.202/5. 创建第一个.NET应用5.1 初始化项目为了验证开发环境是否正常工作我们来创建一个简单的控制台应用dotnet new console -o HelloOpenEuler cd HelloOpenEuler这个命令会创建一个名为HelloOpenEuler的控制台项目目录并生成基本的项目文件。5.2 运行项目进入项目目录后可以直接运行dotnet run如果看到Hello, World!输出恭喜你.NET开发环境已经准备就绪了我在第一次运行时就遇到了权限问题后来发现是/tmp目录权限设置导致的如果你也遇到类似问题可以尝试sudo chmod 777 /tmp6. 常见问题排查6.1 依赖缺失问题有时候安装.NET后运行程序会报错提示缺少某些库。这种情况通常是基础依赖没装全。可以尝试安装以下补充依赖sudo dnf install -y krb5-libs libgdiplus6.2 版本冲突问题如果你之前安装过其他版本的.NET可能会遇到版本冲突。可以通过以下命令查看所有已安装的.NET版本dotnet --list-sdks dotnet --list-runtimes要移除旧版本可以使用sudo dnf remove dotnet-sdk-7.0 # 以7.0为例6.3 性能调优在openEuler上运行.NET应用我建议做两个优化启用GC的服务器模式在项目文件中添加ServerGarbageCollectiontrue/ServerGarbageCollection使用Tiered Compilation可以提高启动速度TieredCompilationtrue/TieredCompilation7. 进阶配置7.1 安装ASP.NET Core运行时如果你需要运行ASP.NET Core应用可以单独安装运行时sudo dnf install -y aspnetcore-runtime-8.0不过如前所述如果已经安装了SDK就不需要再单独安装运行时了。7.2 配置全局工具.NET提供了很多实用的全局工具比如EF Core工具。安装方法如下dotnet tool install --global dotnet-ef安装后可能需要将工具目录加入PATH环境变量。在openEuler上工具通常安装在~/.dotnet/tools目录下。7.3 多版本管理有时候项目需要使用不同版本的.NET可以使用global.json文件来指定版本。例如dotnet new globaljson --sdk-version 8.0.202这个命令会创建一个global.json文件锁定当前项目使用的SDK版本。8. 开发环境优化8.1 安装Visual Studio Code虽然openEuler不是Visual Studio官方支持的系统但VS Code可以完美运行。我推荐安装VS Code作为开发IDEsudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c echo -e [code]\nnameVisual Studio Code\nbaseurlhttps://packages.microsoft.com/yumrepos/vscode\nenabled1\ngpgcheck1\ngpgkeyhttps://packages.microsoft.com/keys/microsoft.asc /etc/yum.repos.d/vscode.repo sudo dnf install -y code安装完成后记得安装C#扩展插件这样就能获得完整的.NET开发体验了。8.2 配置调试环境在VS Code中调试.NET应用需要配置launch.json文件。一个典型的配置如下{ version: 0.2.0, configurations: [ { name: .NET Core Launch (console), type: coreclr, request: launch, preLaunchTask: build, program: ${workspaceFolder}/bin/Debug/net8.0/HelloOpenEuler.dll, args: [], cwd: ${workspaceFolder}, console: internalConsole, stopAtEntry: false } ] }这个配置可以直接用于我们之前创建的HelloOpenEuler项目。9. 实际项目经验分享在openEuler上开发.NET应用一年多来我积累了一些实战经验。首先是性能方面openEuler的调度器对.NET应用很友好特别是IO密集型任务表现优异。我在一个文件处理项目中测试过性能比在Ubuntu上提升了约15%。其次是稳定性长期运行的.NET服务在openEuler上很少出现内存泄漏或崩溃的情况。不过要注意的是openEuler默认的安全策略比较严格有时候需要调整SELinux设置sudo setenforce 0 # 临时关闭最后是容器化支持openEuler对Docker的支持很好.NET应用的容器镜像可以直接使用微软官方的镜像基础FROM mcr.microsoft.com/dotnet/aspnet:8.0这种组合在微服务架构中表现非常出色。