软件研发 --- hello world 项目 之 桌面之王 C#
C# Hello World 程序安装编译运行完整指南
本指南将从零开始,详细说明如何安装.NET开发环境、编译和运行C# Hello World程序的全过程。
1. C#语言简介
C#(读作"C Sharp")是微软开发的面向对象编程语言,具有以下特点:
- 面向对象:完全的面向对象编程语言
 - 类型安全:强类型系统,编译时类型检查
 - 内存管理:自动垃圾回收,无需手动管理内存
 - 跨平台:.NET Core/.NET 5+支持Windows、macOS、Linux
 - 丰富的库:庞大的.NET生态系统和NuGet包管理
 - 现代语法:持续更新的语言特性
 
2. 安装.NET开发环境
2.1 选择.NET版本
微软提供了多个.NET版本:
- .NET Framework:仅Windows,传统版本
 - .NET Core:跨平台,已停止更新
 - .NET 5/6/7/8+:统一的跨平台版本(推荐)
 
推荐安装最新的.NET 8 LTS版本
2.2 下载.NET SDK
- 访问.NET官网:https://dotnet.microsoft.com/download
 - 选择".NET SDK"(不是Runtime)
 - 选择适合您操作系统的版本:
- Windows: 
.exe安装程序 - macOS: 
.pkg安装程序 - Linux: 包管理器或 
.tar.gz文件 
 - Windows: 
 
2.3 安装.NET SDK
Windows系统:
- 双击下载的
.exe文件 - 按照安装向导进行安装
 - 安装程序会自动配置环境变量
 
macOS系统:
- 双击下载的
.pkg文件 - 按照安装向导进行安装
 - 或者使用Homebrew:
# 使用Homebrew安装.NET brew install --cask dotnet 
Linux系统:
Ubuntu/Debian:
# 添加Microsoft包源
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
# 安装.NET SDK
sudo apt-get update
sudo apt-get install -y dotnet-sdk-8.0
CentOS/RHEL/Fedora:
# 添加Microsoft包源
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
# 安装.NET SDK
sudo yum install dotnet-sdk-8.0  # CentOS/RHEL
sudo dnf install dotnet-sdk-8.0  # Fedora
2.4 验证安装
打开命令行工具,输入以下命令验证安装:
# 检查.NET版本
dotnet --version
# 查看已安装的SDK
dotnet --list-sdks
# 查看已安装的运行时
dotnet --list-runtimes
# 查看.NET信息
dotnet --info
如果显示版本信息,说明安装成功。
3. C#项目结构和类型
3.1 项目类型
- 控制台应用程序:命令行程序
 - 类库:可重用的代码库
 - Web应用程序:ASP.NET Core Web应用
 - 桌面应用程序:WPF、WinForms、MAUI
 - 移动应用程序:Xamarin、.NET MAUI
 
3.2 项目文件结构
MyProject/
├── MyProject.csproj    # 项目文件
├── Program.cs          # 主程序文件
├── bin/               # 编译输出目录
├── obj/               # 临时文件目录
└── Properties/        # 项目属性
4. 创建和运行C#程序
4.1 方法一:使用.NET CLI(推荐)
创建新项目:
# 创建控制台应用程序
dotnet new console -n HelloWorld
# 进入项目目录
cd HelloWorld
# 查看生成的文件
dir  # Windows
ls   # macOS/Linux
替换Program.cs内容:
将生成的Program.cs文件内容替换为我们创建的Hello World代码。
运行程序:
# 直接运行(推荐用于开发)
dotnet run
# 编译并运行
dotnet build
dotnet run
4.2 方法二:手动创建项目
创建项目目录:
mkdir HelloWorld
cd HelloWorld
创建项目文件 (HelloWorld.csproj):
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
</Project>
创建Program.cs文件:
使用我们之前创建的C#代码。
// 使用System命名空间,包含Console类 using System; // 定义命名空间,用于组织代码 namespace HelloWorld { // 定义Program类,C#程序的入口类 class Program { // Main方法是C#程序的入口点 // static: 静态方法,可以直接通过类名调用 // void: 不返回任何值 // string[] args: 命令行参数数组 static void Main(string[] args) { // 使用Console.WriteLine()方法输出文本到控制台 // Console是System命名空间中的类,用于控制台输入输出 Console.WriteLine("Hello World!"); // 输出中文信息,展示C#对Unicode的支持 Console.WriteLine("欢迎来到C#编程世界!"); // 可选:等待用户按键,防止控制台窗口立即关闭 // Console.ReadKey(); } } }
运行程序:
dotnet run
4.3 方法三:编译成可执行文件
# 编译项目
dotnet build
# 发布为自包含应用程序
dotnet publish -c Release -r win-x64 --self-contained
# 运行编译后的程序
.\bin\Release\net8.0\win-x64\publish\HelloWorld.exe  # Windows
./bin/Release/net8.0/linux-x64/publish/HelloWorld   # Linux
./bin/Release/net8.0/osx-x64/publish/HelloWorld     # macOS
4.4 预期输出
程序运行后,您应该看到以下输出:
Hello World!
欢迎来到C#编程世界!
5. .NET CLI命令详解
5.1 项目管理命令
# 创建新项目
dotnet new console -n MyApp        # 控制台应用
dotnet new classlib -n MyLibrary   # 类库
dotnet new web -n MyWebApp         # Web应用
dotnet new mvc -n MyMvcApp         # MVC应用
# 添加项目引用
dotnet add reference ../MyLibrary/MyLibrary.csproj
# 添加NuGet包
dotnet add package Newtonsoft.Json
# 移除NuGet包
dotnet remove package Newtonsoft.Json
5.2 构建和运行命令
# 恢复依赖
dotnet restore
# 编译项目
dotnet build
dotnet build -c Release  # 发布版本
# 运行项目
dotnet run
dotnet run --project MyApp
# 测试项目
dotnet test
# 发布项目
dotnet publish
dotnet publish -c Release -o ./publish
5.3 解决方案管理
# 创建解决方案
dotnet new sln -n MySolution
# 添加项目到解决方案
dotnet sln add MyApp/MyApp.csproj
dotnet sln add MyLibrary/MyLibrary.csproj
# 列出解决方案中的项目
dotnet sln list
# 移除项目
dotnet sln remove MyApp/MyApp.csproj
6. C#程序结构详解
6.1 命名空间
// 传统方式
namespace HelloWorld
{
    class Program
    {
        // 类内容
    }
}
// C# 10+ 文件范围命名空间
namespace HelloWorld;
class Program
{
    // 类内容
}
6.2 使用语句
// 传统using语句
using System;
using System.Collections.Generic;
using System.Linq;
// C# 10+ 全局using(在项目文件中或GlobalUsings.cs中)
global using System;
global using System.Collections.Generic;
6.3 Main方法的不同形式
// 传统Main方法
static void Main(string[] args)
{
    Console.WriteLine("Hello World!");
}
// 异步Main方法
static async Task Main(string[] args)
{
    await SomeAsyncMethod();
}
// 返回int的Main方法
static int Main(string[] args)
{
    Console.WriteLine("Hello World!");
    return 0; // 返回退出代码
}
// C# 9+ 顶级程序(无需Main方法)
Console.WriteLine("Hello World!");
7. 开发工具推荐
7.1 IDE和编辑器
Visual Studio(Windows/macOS):
- 功能最全面的C# IDE
 - 强大的调试和分析工具
 - 内置设计器和项目模板
 - 免费的Community版本
 
Visual Studio Code(跨平台):
- 轻量级编辑器
 - 需要安装C#扩展
 - 适合轻量级开发
 
JetBrains Rider(跨平台):
- 功能强大的跨平台IDE
 - 优秀的代码分析和重构工具
 - 付费软件
 
7.2 Visual Studio安装
- 访问:https://visualstudio.microsoft.com/
 - 下载Visual Studio Community(免费)
 - 安装时选择".NET桌面开发"工作负载
 - 可选择其他工作负载(Web开发、移动开发等)
 
7.3 Visual Studio Code配置
# 安装C#扩展
code --install-extension ms-dotnettools.csharp
# 安装其他有用的扩展
code --install-extension ms-dotnettools.vscode-dotnet-runtime
code --install-extension formulahendry.dotnet-test-explorer
8. 常见问题及解决方案
8.1 "dotnet不是内部或外部命令"
原因: .NET SDK未正确安装或环境变量未配置
解决方案:
- 重新安装.NET SDK
 - 检查环境变量PATH中是否包含.NET安装路径
 - 重启命令行工具或重启计算机
 - 使用完整路径运行:
C:\Program Files\dotnet\dotnet.exe --version 
8.2 "找不到项目文件"
原因: 当前目录没有.csproj文件
解决方案:
# 确保在正确的项目目录中
ls *.csproj  # 检查是否有项目文件
# 或者指定项目文件
dotnet run --project path/to/project.csproj
8.3 编译错误
常见错误:
- 语法错误:检查分号、大括号匹配
 - 命名空间错误:检查using语句
 - 类型错误:检查变量类型声明
 
解决方案:
# 查看详细错误信息
dotnet build --verbosity detailed
# 清理项目
dotnet clean
dotnet build
8.4 NuGet包问题
# 清理NuGet缓存
dotnet nuget locals all --clear
# 恢复包
dotnet restore
# 更新包
dotnet add package PackageName --version 1.2.3
8.5 运行时错误
"应用程序无法启动":
# 检查目标框架
dotnet --list-runtimes
# 安装缺失的运行时
# 从 https://dotnet.microsoft.com/download/dotnet 下载
9. 项目配置详解
9.1 项目文件 (.csproj) 详解
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <!-- 输出类型:Exe(可执行文件), Library(类库) -->
    <OutputType>Exe</OutputType>
    
    <!-- 目标框架 -->
    <TargetFramework>net8.0</TargetFramework>
    
    <!-- 启用隐式using -->
    <ImplicitUsings>enable</ImplicitUsings>
    
    <!-- 启用可空引用类型 -->
    <Nullable>enable</Nullable>
    
    <!-- 程序集信息 -->
    <AssemblyTitle>Hello World Application</AssemblyTitle>
    <AssemblyDescription>A simple Hello World program</AssemblyDescription>
    <AssemblyVersion>1.0.0.0</AssemblyVersion>
    <FileVersion>1.0.0.0</FileVersion>
  </PropertyGroup>
  
  <!-- NuGet包引用 -->
  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
  </ItemGroup>
  
  <!-- 项目引用 -->
  <ItemGroup>
    <ProjectReference Include="..\MyLibrary\MyLibrary.csproj" />
  </ItemGroup>
</Project>
9.2 配置文件
appsettings.json(用于配置):
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Database=MyDb;Trusted_Connection=true;"
  }
}
10. 高级特性和最佳实践
10.1 现代C#特性示例
// C# 10+ 顶级程序
using System;
// 记录类型
public record Person(string Name, int Age);
// 模式匹配
var person = new Person("张三", 25);
var message = person switch
{
    { Age: < 18 } => "未成年",
    { Age: >= 18 and < 60 } => "成年人",
    _ => "老年人"
};
Console.WriteLine($"Hello, {person.Name}! {message}");
// 可空引用类型
string? nullableString = null;
if (nullableString is not null)
{
    Console.WriteLine(nullableString.Length);
}
10.2 异步编程
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
    static async Task Main(string[] args)
    {
        Console.WriteLine("开始异步操作...");
        
        await DoAsyncWork();
        
        Console.WriteLine("异步操作完成!");
    }
    
    static async Task DoAsyncWork()
    {
        using var client = new HttpClient();
        var response = await client.GetStringAsync("https://api.github.com");
        Console.WriteLine($"响应长度: {response.Length}");
    }
}
10.3 依赖注入
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
class Program
{
    static async Task Main(string[] args)
    {
        var host = Host.CreateDefaultBuilder(args)
            .ConfigureServices(services =>
            {
                services.AddTransient<IGreetingService, GreetingService>();
            })
            .Build();
        
        var greetingService = host.Services.GetRequiredService<IGreetingService>();
        greetingService.Greet("World");
        
        await host.RunAsync();
    }
}
public interface IGreetingService
{
    void Greet(string name);
}
public class GreetingService : IGreetingService
{
    public void Greet(string name)
    {
        Console.WriteLine($"Hello, {name}!");
    }
}
11. 性能优化和调试
11.1 性能分析
# 发布优化版本
dotnet publish -c Release
# 启用ReadyToRun
dotnet publish -c Release -p:PublishReadyToRun=true
# 单文件发布
dotnet publish -c Release -r win-x64 --self-contained -p:PublishSingleFile=true
11.2 调试技巧
// 条件编译
#if DEBUG
Console.WriteLine("调试模式");
#endif
// 断言
System.Diagnostics.Debug.Assert(value > 0, "值必须大于0");
// 日志记录
using Microsoft.Extensions.Logging;
// 在Main方法中
using var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
var logger = loggerFactory.CreateLogger<Program>();
logger.LogInformation("程序开始执行");
12. 学习资源和进阶建议
12.1 官方资源
- .NET官网:https://dotnet.microsoft.com/
 - C#文档:https://docs.microsoft.com/zh-cn/dotnet/csharp/
 - API参考:https://docs.microsoft.com/zh-cn/dotnet/api/
 - .NET教程:https://docs.microsoft.com/zh-cn/dotnet/core/tutorials/
 
12.2 学习路径
- C#基础语法:变量、类型、控制结构
 - 面向对象编程:类、继承、多态、接口
 - 集合和泛型:List、Dictionary、LINQ
 - 异步编程:async/await、Task
 - 文件和网络操作:I/O、HTTP客户端
 - 数据库访问:Entity Framework Core
 - Web开发:ASP.NET Core
 - 桌面应用:WPF、MAUI
 
12.3 实践项目建议
- 控制台计算器
 - 文件管理工具
 - Web API服务
 - 桌面应用程序
 - 数据库应用
 - 微服务架构
 
12.4 推荐书籍
- 《C# 10 in a Nutshell》
 - 《Pro C# 10 with .NET 6》
 - 《Clean Code in C#》
 - 《C#并发编程经典实例》
 
13. C# vs 其他语言对比
| 特性 | C# | Java | Python | Go | 
|---|---|---|---|---|
| 类型系统 | 静态强类型 | 静态强类型 | 动态类型 | 静态强类型 | 
| 内存管理 | GC | GC | GC | GC | 
| 跨平台 | 是(.NET Core+) | 是 | 是 | 是 | 
| 编译方式 | JIT/AOT | JIT | 解释 | 编译 | 
| 学习曲线 | 中等 | 中等 | 简单 | 简单 | 
| 生态系统 | 丰富 | 非常丰富 | 非常丰富 | 增长中 | 
| 企业应用 | 强 | 很强 | 中等 | 增长中 | 
14. 完整操作流程总结
# 1. 验证.NET安装
dotnet --version
# 2. 创建新项目
dotnet new console -n HelloWorld
cd HelloWorld
# 3. 编辑Program.cs文件
# 使用文本编辑器或IDE编辑代码
# 4. 运行程序
dotnet run
# 5. 编译程序
dotnet build
# 6. 发布程序
dotnet publish -c Release
# 7. 运行发布的程序
.\bin\Release\net8.0\HelloWorld.exe  # Windows
./bin/Release/net8.0/HelloWorld      # Linux/macOS
15. 故障排除清单
安装问题:
- [ ] 检查.NET SDK是否正确安装
 - [ ] 验证环境变量PATH配置
 - [ ] 确认防火墙和杀毒软件设置
 
编译问题:
- [ ] 检查项目文件(.csproj)语法
 - [ ] 验证目标框架版本
 - [ ] 清理并重新构建项目
 
运行问题:
- [ ] 确认运行时版本匹配
 - [ ] 检查依赖项是否完整
 - [ ] 验证文件权限设置
 
恭喜!您已经成功完成了C# Hello World程序的创建、编译和运行。C#作为一门现代化的面向对象编程语言,为您提供了强大的开发能力和丰富的生态系统。继续探索C#的更多特性,开始您的.NET开发之旅吧!
                    
                
                
            
        
浙公网安备 33010602011771号