当前位置: 首页 > news >正文

【.NET Framework 窗体应用程序项目结构介绍】

在使用 Visual Studio (VS) 开发 .NET Framework 窗体应用程序(Windows Forms App) 时,项目结构通常包含以下核心文件夹和文件。以下是详细介绍:


1. 项目根目录下的主要文件

(1) .csproj 文件

  • 作用:C# 项目文件,定义项目配置(如编译选项、引用库、目标框架等)。
  • 示例内容.NET Framework 4.8):
    <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><PropertyGroup><TargetFrameworkVersion>v4.8</TargetFrameworkVersion><OutputType>WinExe</OutputType> <!-- Windows 可执行文件 --></PropertyGroup><ItemGroup><Reference Include="System.Windows.Forms" /> <!-- 引用 Windows Forms 库 --></ItemGroup>
    </Project>
    
  • 关键点
    • .NET Framework 项目通常使用 v4.x 版本。
    • OutputType="WinExe" 表示这是一个 Windows 窗体应用程序。

(2) Program.cs

  • 作用:程序入口点,包含 Main 方法,启动主窗体。
  • 示例代码
    using System;
    using System.Windows.Forms;static class Program
    {[STAThread] // 单线程单元(STA)模式,Windows Forms 要求static void Main(){Application.EnableVisualStyles(); // 启用 Windows 主题样式Application.SetCompatibleTextRenderingDefault(false);Application.Run(new MainForm()); // 启动主窗体}
    }
    

(3) App.config

  • 作用:应用程序配置文件,存储连接字符串、应用设置等。
  • 示例内容
    <configuration><startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" /></startup><appSettings><add key="DatabaseConnection" value="Server=localhost;Database=TestDB;" /></appSettings>
    </configuration>
    
  • 关键点
    • 可通过 ConfigurationManager.AppSettings["DatabaseConnection"] 读取配置。

(4) Properties/ 文件夹

  • AssemblyInfo.cs
    • 作用:定义程序集元数据(如版本、版权信息)。
    • 示例内容
      [assembly: AssemblyTitle("MyWindowsFormsApp")]
      [assembly: AssemblyVersion("1.0.0.0")]
      
  • Resources.resx
    • 作用:存储应用程序资源(如图片、字符串、图标)。
    • 访问方式Properties.Resources.MyImage(自动生成强类型访问)。
  • Settings.settings
    • 作用:定义用户/应用设置(如窗体位置、默认值)。
    • 示例
      • 在 VS 设计器中设置 UserName(类型 string,作用域 User)。
      • 代码中访问:Properties.Settings.Default.UserName

2. 窗体相关文件

(1) 主窗体文件(如 MainForm.cs

  • 作用:定义主窗体逻辑(UI + 事件处理)。
  • 文件组成
    • MainForm.cs(代码逻辑)
    • MainForm.Designer.cs(自动生成的 UI 代码)
    • MainForm.resx(窗体资源,如图片)
MainForm.cs(手动编写部分)
using System;
using System.Windows.Forms;namespace MyWindowsFormsApp
{public partial class MainForm : Form{public MainForm(){InitializeComponent(); // 调用自动生成的初始化方法}private void button1_Click(object sender, EventArgs e){MessageBox.Show("Hello, Windows Forms!");}}
}
MainForm.Designer.cs(自动生成部分)
  • 作用:存储窗体控件的初始化和布局代码(不要手动修改)。
  • 示例片段
    private void InitializeComponent()
    {this.button1 = new System.Windows.Forms.Button();this.button1.Text = "Click Me";this.button1.Click += new System.EventHandler(this.button1_Click);this.Controls.Add(this.button1);
    }
    

(2) 其他窗体文件

  • 如果项目包含多个窗体(如 LoginForm.csSettingsForm.cs),每个窗体都会有类似的文件结构:
    • LoginForm.cs(逻辑)
    • LoginForm.Designer.cs(UI)
    • LoginForm.resx(资源)

3. 其他常见文件夹

(1) bin/obj/

  • bin/Debug/bin/Release/
    • 作用:存放编译后的可执行文件(.exe)和依赖库(.dll)。
  • obj/
    • 作用:临时编译文件(如中间代码、资源缓存)。

(2) References/(VS 中显示)

  • 作用:显示项目引用的程序集(如 System.DataSystem.Drawing)。
  • 手动添加引用:右键项目 → Add Reference → 选择 .NETCOM 库。

4. 完整项目结构示例

MyWindowsFormsApp/
├── MainForm.cs                # 主窗体逻辑
├── MainForm.Designer.cs       # 主窗体 UI(自动生成)
├── MainForm.resx              # 主窗体资源
├── Program.cs                 # 程序入口
├── App.config                 # 应用配置
├── Properties/
│   ├── AssemblyInfo.cs        # 程序集信息
│   ├── Resources.resx         # 全局资源
│   └── Settings.settings       # 应用设置
├── bin/                       # 编译输出
│   └── Debug/
│       └── MyWindowsFormsApp.exe
└── obj/                       # 临时文件

5. 关键注意事项

  1. 不要手动修改 .Designer.cs 文件:所有 UI 更改应在 VS 设计器中进行。
  2. 资源管理:使用 Properties.Resources 访问图片/字符串,Properties.Settings 访问配置。
  3. 调试 vs 发布
    • Debug 模式:包含调试符号(.pdb),适合开发。
    • Release 模式:优化代码,适合发布。
  4. .NET Framework vs .NET Core/5+
    • .NET Framework 项目使用 v4.x,而 .NET 5+ 使用 WinForms 的跨平台版本(需安装对应工作负载)。

总结

  • 核心文件.csprojProgram.csApp.configProperties/
  • 窗体文件:每个窗体对应 .cs + .Designer.cs + .resx
  • 资源与配置:通过 Properties.ResourcesProperties.Settings 管理。
  • 编译输出bin/ 目录存放最终 .exe 文件。

注:内容由AI生成

http://www.dtcms.com/a/264752.html

相关文章:

  • WHAT - React Native 中 Light and Dark mode 深色模式(黑暗模式)机制
  • 如何在Excel中每隔几行取一行
  • 【PMP】项目管理入门:从基础到环境的体系化拆解
  • 分布式定时任务:xxl-job
  • 苍穹外卖day12--Apache POI导出Excel报表
  • [MIA 2025]CLIP in medical imaging: A survey
  • 多云密钥统一管理实战:CKMS对接阿里云/华为云密钥服务
  • .npmrc和.yarnrc配置文件介绍:分别用于 Node.js 中的 npm(Node Package Manager)和 Yarn 包管理工具
  • oracle集合三嵌套表(Nested Table)学习
  • 【第三章:神经网络原理详解与Pytorch入门】01.神经网络算法理论详解与实践-(1)神经网络预备知识(线性代数、微积分、概率等)
  • 微控制器中的EXTI0(External Interrupt 0)中断是什么?
  • uniapp socket 封装 (可拿去直接用)
  • 可编辑33页PPT | 某材料制造企业工业互联网平台解决方案
  • 云原生环境下部署大语言模型服务:以 DeepSeek 为例的实战教程
  • 6种iOS开发中常用的设计模式
  • Qt designer坑-布局内子控件的顺序错乱
  • 量化交易学习之自动化交易策略 [freqtrade 框架学习] ,常见问题避坑指南!!!!
  • <u>#12288;#8203;</u> HTML5全角空格,自动换行,半角用#32;#8203;
  • Spring AI Advisor RAG使用指南
  • Android Auto即将带来变革
  • AI大模型:从编码助手到流程重构者——软件开发新范式解析
  • 【前端】1 小时实现 React 简历项目
  • 多种方法实现golang中实现对http的响应内容生成图片
  • MySQL间隙锁详解:解决幻读的「隐形守护者」
  • React 学习(2)
  • 03-JS资料
  • 企业需要什么样的远程桌面管理软件?
  • 不引入变量 异或交换的缺点
  • 替代进口SCA7606【智芯微】国产高精度电流传感器 工业新能源电网专用
  • openai-agents记忆持久化(neo4j)