跨平台开发新体验:用C#和.NET Core开发Linux应用实战

一、引言

在当今多元化的技术环境中,跨平台开发已成为开发者们追求的重要目标。C#作为一门功能强大、语法优雅的编程语言,与.NET Core的结合为跨平台开发带来了新的可能。借助.NET Core的跨平台特性,开发者可以使用熟悉的C#语言在Linux系统上开发高性能、可扩展的应用程序。本文将详细介绍如何使用C#和.NET Core进行Linux应用的开发实战,带领大家开启跨平台开发的新体验。

二、环境搭建

(一)安装.NET Core SDK

  1. 选择合适的版本
    • 访问.NET Core官方下载页面(https://dotnet.microsoft.com/download),根据自己的Linux发行版选择合适的.NET Core SDK版本。常见的Linux发行版如Ubuntu、CentOS等都有相应的安装指南。
  2. Ubuntu系统安装步骤
    • 添加Microsoft包签名密钥:打开终端,执行以下命令添加Microsoft包签名密钥。
      wget -q https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
      sudo dpkg -i packages-microsoft-prod.deb
      
    • 安装.NET Core SDK:更新包列表并安装.NET Core SDK。
      sudo apt-get update
      sudo apt-get install -y apt-transport-https
      sudo apt-get update
      sudo apt-get install -y dotnet-sdk-3.1 # 这里以3.1版本为例,可根据需求选择其他版本
      
  3. 验证安装
    • 安装完成后,在终端中执行以下命令验证.NET Core SDK是否安装成功。
      dotnet --version
      
    • 如果输出了.NET Core SDK的版本号,则说明安装成功。

(二)选择开发工具

  1. Visual Studio Code
    • 安装:可以从Visual Studio Code官方网站(https://code.visualstudio.com/)下载适合Linux系统的安装包,然后按照提示进行安装。
    • 扩展安装:安装C#扩展,打开Visual Studio Code,点击左侧的扩展图标,搜索“C#”并安装。该扩展提供了语法高亮、代码智能提示、调试等功能,极大地提升了开发效率。

三、创建第一个Linux应用

(一)创建控制台应用项目

  1. 使用命令行创建项目
    • 打开终端,创建一个新的目录用于存放项目,例如:
      mkdir MyFirstLinuxApp
      cd MyFirstLinuxApp
      
    • 使用dotnet new命令创建一个控制台应用项目:
      dotnet new console
      
    • 该命令会在当前目录下生成一个基本的控制台应用项目结构,包含Program.cs文件和.csproj项目文件。
  2. 项目结构分析
    • Program.cs:这是应用程序的入口文件,包含了Main方法。以下是默认生成的Program.cs代码:
      using System;
      
      namespace MyFirstLinuxApp
      {
          class Program
          {
              static void Main(string[] args)
              {
                  Console.WriteLine("Hello World!");
              }
          }
      }
      
    • .csproj:项目文件,定义了项目的基本信息、依赖项等。例如:
      <Project Sdk="Microsoft.NET.Sdk">
      
        <PropertyGroup>
          <OutputType>Exe</OutputType>
          <TargetFramework>netcoreapp3.1</TargetFramework>
        </PropertyGroup>
      
      </Project>
      

(二)编译和运行项目

  1. 编译项目
    • 在终端中,确保当前目录是项目根目录,执行以下命令编译项目:
      dotnet build
      
    • 该命令会编译项目并生成可执行文件。编译成功后,会在bin/Debug/netcoreapp3.1目录下生成可执行文件。
  2. 运行项目
    • 执行以下命令运行项目:
      dotnet run
      
    • 终端会输出“Hello World!”,表示项目运行成功。

四、开发Linux服务应用

(一)创建服务项目

  1. 使用命令行创建
    • 打开终端,创建一个新的目录用于服务项目,例如:
      mkdir MyLinuxService
      cd MyLinuxService
      
    • 使用dotnet new命令创建一个Worker Service项目:
      dotnet new worker
      
    • 该项目模板适用于创建后台服务应用。
  2. 项目代码分析
    • Worker.cs:这是服务的核心类,继承自BackgroundService。以下是默认生成的Worker.cs代码:
      using System;
      using System.Threading;
      using System.Threading.Tasks;
      using Microsoft.Extensions.Hosting;
      using Microsoft.Extensions.Logging;
      
      namespace MyLinuxService
      {
          public class Worker : BackgroundService
          {
              private readonly ILogger<Worker> _logger;
      
              public Worker(ILogger<Worker> logger)
              {
                  _logger = logger;
              }
      
              protected override async Task ExecuteAsync(CancellationToken stoppingToken)
              {
                  while (!stoppingToken.IsCancellationRequested)
                  {
                      _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
                      await Task.Delay(1000, stoppingToken);
                  }
              }
          }
      }
      
    • 在这个类中,ExecuteAsync方法是服务的主要执行逻辑,它会每秒输出一条日志信息。

(二)配置和运行服务

  1. 配置服务
    • 可以通过修改appsettings.json文件来配置服务的相关参数。例如,可以修改日志级别等配置。
  2. 发布服务
    • 执行以下命令将服务发布到指定目录:
      dotnet publish -c Release -o ./publish
      
    • 该命令会将服务发布到publish目录下,生成可在Linux系统上运行的文件。
  3. 使用Systemd管理服务
    • 创建服务配置文件:在/etc/systemd/system目录下创建一个服务配置文件,例如my-linux-service.service
      sudo nano /etc/systemd/system/my-linux-service.service
      
    • 在文件中添加以下内容:
      [Unit]
      Description=My Linux Service
      After=network.target
      
      [Service]
      WorkingDirectory=/path/to/your/publish/directory
      ExecStart=/usr/bin/dotnet /path/to/your/publish/directory/MyLinuxService.dll
      Restart=always
      # Restart service after 10 seconds if the dotnet service crashes:
      RestartSec=10
      KillSignal=SIGINT
      SyslogIdentifier=my-linux-service
      User=yourusername
      Environment=ASPNETCORE_ENVIRONMENT=Production
      
      [Install]
      WantedBy=multi-user.target
      
    • 注意将/path/to/your/publish/directory替换为实际的发布目录,yourusername替换为实际的用户名。
    • 启动和管理服务
      • 重新加载Systemd管理器配置:
        sudo systemctl daemon-reload
        
      • 启动服务:
        sudo systemctl start my-linux-service
        
      • 设置服务开机自启:
        sudo systemctl enable my-linux-service
        
      • 查看服务状态:
        sudo systemctl status my-linux-service
        

五、处理Linux文件系统和进程

(一)文件系统操作

  1. 读取文件
    • 以下是一个使用C#读取Linux系统上文件内容的示例代码:
      using System;
      using System.IO;
      
      namespace FileSystemExample
      {
          class Program
          {
              static void Main()
              {
                  try
                  {
                      string filePath = "/path/to/your/file.txt";
                      string content = File.ReadAllText(filePath);
                      Console.WriteLine(content);
                  }
                  catch (Exception ex)
                  {
                      Console.WriteLine($"读取文件出错: {ex.Message}");
                  }
              }
          }
      }
      
  2. 写入文件
    • 以下是一个使用C#向Linux系统上文件写入内容的示例代码:
      using System;
      using System.IO;
      
      namespace FileSystemExample
      {
          class Program
          {
              static void Main()
              {
                  try
                  {
                      string filePath = "/path/to/your/file.txt";
                      string textToWrite = "这是要写入的内容。";
                      File.WriteAllText(filePath, textToWrite);
                      Console.WriteLine("文件写入成功。");
                  }
                  catch (Exception ex)
                  {
                      Console.WriteLine($"写入文件出错: {ex.Message}");
                  }
              }
          }
      }
      

(二)进程操作

  1. 启动外部进程
    • 以下是一个使用C#在Linux系统上启动外部进程(如ls命令)的示例代码:
      using System;
      using System.Diagnostics;
      
      namespace ProcessExample
      {
          class Program
          {
              static void Main()
              {
                  try
                  {
                      Process process = new Process();
                      process.StartInfo.FileName = "ls";
                      process.StartInfo.Arguments = "-l";
                      process.StartInfo.UseShellExecute = false;
                      process.StartInfo.RedirectStandardOutput = true;
                      process.Start();
      
                      string output = process.StandardOutput.ReadToEnd();
                      process.WaitForExit();
      
                      Console.WriteLine(output);
                  }
                  catch (Exception ex)
                  {
                      Console.WriteLine($"启动进程出错: {ex.Message}");
                  }
              }
          }
      }
      

六、总结

通过本文的实战介绍,我们深入了解了如何使用C#和.NET Core在Linux系统上进行应用开发。从环境搭建到创建控制台应用、服务应用,再到处理Linux文件系统和进程,我们逐步掌握了跨平台开发的关键技能。C#和.NET Core为开发者提供了一个强大而灵活的跨平台开发解决方案,让开发者能够在不同的操作系统上高效地开发和部署应用程序。希望本文能帮助开发者开启跨平台开发的新篇章。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐