当前位置: 首页 > 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.lryc.cn/news/578884.html

相关文章:

  • day046-tomcat与部署war包、jar包
  • java实现日志记录-注解方式
  • 使用哪种语言的人更容易通过面试?
  • 【Web前端】优化轮播图展示(源代码)
  • (一)大语言模型的关键技术<-AI大模型构建
  • 360安全卫士占用5037端口(ADB端口)解决方案
  • Wps开放平台v5升级v7上传实体文件踩坑(Java使用restTemplate)
  • 基于开源链动2+1模式AI智能名片S2B2C商城小程序的场景零售创新研究
  • Mac电脑 卸载工具 App Cleaner
  • Java 大视界 -- Java 大数据在智能医疗健康管理中的慢性病风险预测与个性化干预(330)
  • 带GPU启动 Docker 容器
  • FAISS 简介及其与 GPT 的对接(RAG)
  • [CS创世SD NAND征文] 精准控制的坚固基石:CS创世SD NAND在华大HC32F4A0运动控制卡中的高可靠应用
  • 7月2日星期三今日早报简报微语报早读
  • Java AQS(AbstractQueuedSynchronizer)详解
  • 【前端】基础 - HTML基础标签和样式设置
  • Baumer工业相机堡盟工业相机如何实现高精度的硬件同步触发
  • 公用LCU屏的功能、应用场景
  • 微信小程序使用wx.chooseImage上传图片时进行压缩,并添加时间水印
  • 微信小程序入门实例_____打造你的专属单词速记小程序
  • PH热榜 | 2025-07-02
  • zabbix批量生成监控项教程!
  • Benchmarking in Go
  • 利器:NPM和YARN及其他
  • SQL Server 再进阶:类型多样性分析与时间维度扩展(第三课)
  • 解锁医疗AI密码:医疗人工智能专业大学四年学习路径
  • android核心技术摘要
  • 数论基础知识和模板
  • 香港券商交易系统开发与解决方案全景报告:云原生、跨境协同与高性能架构的创新实践
  • 【unitrix】 4.13 类型级加一计算(add1.rs)