【手把手实战教学】基于C#和.NET Framework的WinForms开发教程系列(1)Visual Studio 2026 中创建、运行、发布应用

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

前言

最近需要开发一个小工具,选择了基于 c# 的 WinForms,简单记录一下

【技术变迁脉络】2026最新桌面应用开发技术汇总

【保姆级喂饭教程】Visual Studio 2026 企业版安装教程

一、创建项目

双击Visual Studio 2026图标
在这里插入图片描述
创建新项目
在这里插入图片描述
上面筛选框分别选择:C#、Windows、桌面,这样找的快一点
下面选择Windows 窗体应用(.NET Framework),
前一个是.net core项目,创建后适用于.net 6/8/10,如果需要支持win7的话就只能用.NET Framework,如果只支持win10/11的话就可以用这个,打包单exe安装包更方便,语法更丰富
点击下一步
在这里插入图片描述
修改项目名称,选择项目位置,修改解决方案名称
这里注意,解决方案是项目名称的上级,看下面创建路径就可以看出来
测试项目,工具项目可以勾选将解决方案和项目放在同一目录中
框架原来是4.7.2,给他改成4.x下最高版本4.8
点击创建
在这里插入图片描述
创建完成后如下,左边是窗体效果,右边是文件目录

  • Properties:存储项目的程序集元数据、静态资源和自定义配置项的核心文件夹。
  • 引用:管理项目运行所需的所有外部程序集、系统库或第三方依赖项的节点。
  • App.config:以XML格式存储应用程序运行时可修改的配置项(如数据库连接字符串)的配置文件。
  • Form1.cs:承载Form1窗体相关代码的主文件,包含开发者编写的业务逻辑与事件处理。
    • Form1:Form1.cs对应的窗体类(分部类),是可视化设计和逻辑编写的核心载体。
    • Form1.Designer.cs:由VS设计器自动生成,用于定义Form1窗体及控件外观、布局的代码文件。
  • Program.cs:包含程序入口方法Main(),负责启动应用程序并加载主窗体的核心文件。

在这里插入图片描述


二、创建应用程序

WinForms通过拖拽式创建元件,目前没有工具箱,点击视图,选择工具箱,快捷键Ctrl+Alt+X
在这里插入图片描述
先点击右上角的图钉固定到界面,然后打开公共控件选择一个按钮,这块汉化做的不是很完全
在这里插入图片描述
放置一个按钮,有三种方式:
双击Button:默认放在左上角
单机Button拾取,点击空白窗体放置
按住Button拖动到空白窗体
在这里插入图片描述
点击视图,选择属性窗口,快捷键F4
在这里插入图片描述
点击button2,属性窗口就会变成对应元件的,修改Text文本,原来式button2,改成点击,然后回车确定
在这里插入图片描述
往上找到设计部分,修改name属性为button2Click,改了明确一点
在这里插入图片描述
拖动一个label用于接收文本,在属性窗口找到设计,把name改为label1HelloWorld
在这里插入图片描述
双击之前修改过的点击按钮
在这里插入图片描述
会自动创建一个button2Click_Click方法,写入label1HelloWorld.Text = "Hello World!";
在这里插入图片描述
还有重要的,点击周围的定位点可以改变拖动大小,点击元件拖动可以改变位置
在这里插入图片描述


三、运行应用程序

点击上方的启动
在这里插入图片描述
界面如下,点击点击按钮
在这里插入图片描述
Hello World!
在这里插入图片描述
关掉窗体和点击停止都可以结束调试
在这里插入图片描述


四、发布应用程序

1. 仅生成可执行文件(适用于本机运行或简单分发)

首先右键项目,选择属性
在这里插入图片描述
确认一下输出类型是Windows应用程序,一般默认就是这个
在这里插入图片描述
然后点击生成,选择生成解决方案
在这里插入图片描述
下面提示生成成功
在这里插入图片描述
生成到了这里,工作目录/解决方案目录/项目目录/bin/Debug
在这里插入图片描述
双击运行一下,ok
在这里插入图片描述
正式生成的时候这里改成Release
在这里插入图片描述
再生成一个,只是最后的生成目录不同
在这里插入图片描述

2. 生成独立单文件 .exe(Costura.Fody)

在开发中需要用到各种各样的包,.net生态中的包管理工具是NuGet,类似于Java生态中的maven,不过NuGet只管理包,不涉及编译构建等。

使用第一种方式生成可执行文件后,安装的包会单独生成dll,自己测试没问题,给别人发送的时候需要一起发送配置文件和dll文件
例如我使用了Newtonsoft包,使用第一种方式生成结果如下
在这里插入图片描述
此时只把exe发送给别人,打开会提示
在这里插入图片描述

所以我们需要通过发布生成一个包含所有依赖的独立 .exe 文件,这就用到了Costura.Fody包

2.1 Costura.Fody介绍

1. 什么是 Costura.Fody?
Costura.Fody 是 .NET 生态中一款极具人气的开源 NuGet 包,隶属于 Fody 工具集。它专门用于处理 .NET 应用程序的依赖项嵌入问题。对于 WPF、WinForms 或控制台应用程序,Costura.Fody 能够将项目引用的所有第三方 DLL 文件作为资源文件,直接嵌入到生成的 EXE 程序集中,从而实现“单文件”运行的效果。

2. 核心技术原理
Costura.Fody 的核心技术在于 IL Weaving(中间语言织入)。

  • 编译时处理: 当开发者编译项目时,Costura 会拦截构建过程,读取项目的引用列表。
  • 资源嵌入: 它会将所有标记为“复制本地”的 DLL 文件转换为字节数组,并作为非托管资源嵌入到 EXE 文件的内部。
  • 运行时加载: 程序运行时,Costura 会挂载到 AppDomain.AssemblyResolve 事件上。当系统试图加载某个 DLL 但在磁盘上找不到时,Costura 会自动从内存资源中读取并加载该程序集。

3. 为什么要使用它?(应用场景)
在以下场景中,Costura.Fody 是 WPF 和 WinForms 开发者的得力助手:

  • 绿色便携软件: 希望用户下载后仅通过一个 EXE 文件即可运行,无需安装或解压,避免“DLL 地狱”。
  • 插件化开发: 防止用户误删核心 DLL 导致程序崩溃,确保程序完整性。
  • 代码保护: 相比于直接暴露在文件夹下的 DLL,嵌入到 EXE 内部的依赖项在一定程度上增加了反编译的难度(虽然不能完全替代混淆工具)。

4. 软件特点

  • 配置简单: 安装 NuGet 包后,通常会自动生成 FodyWeavers.xml 配置文件,开箱即用,绝大多数情况下无需额外配置。
  • 无运行时损耗: 依赖项嵌入是在编译时完成的,运行时的内存加载机制经过优化,对程序启动速度影响极小。
  • 兼容性强: 支持 .NET Framework 4.0+ 及 .NET Core/.NET 5+,完美兼容 WPF 和 WinForms 项目。
  • 灵活性: 支持通过配置文件排除特定的 DLL(如某些不需要嵌入的原生库),或控制非托管 DLL 的加载方式。

2.2 使用教程

先切换到release模式,不知道为什么切换按钮没有了
在这里插入图片描述
我们点击工具栏最后面的三个点,选择添加或移除按钮,重置工具栏
在这里插入图片描述
切换到release
在这里插入图片描述
接下来安装Costura.FodyFody
右键项目,选择管理NuGet包
在这里插入图片描述
搜索costura,选择第一个,安装
在这里插入图片描述
会同时安装Costura.FodyFody,点击应用
在这里插入图片描述
点击我接受
在这里插入图片描述
安装完成
在这里插入图片描述

此时再次选择生成解决方案,注意前面已经修改成了release
在这里插入图片描述
但是还是多个文件
在这里插入图片描述
提示警告,说是找不到FodyWeavers.xml这个配置文件

1>MSBUILD : warning : Fody: Could not find a FodyWeavers.xml file at the project level (D:\Data\WorkSpace\Visual Studio\***\Stock\***). A default file has been created. Please review the file and add it to your project.

在资源管理器点一下刷新可以看到是有的
在这里插入图片描述
重新生成一下,虽然dll还是单独的,但是通过文件大小可以看出已经打包进去了
在这里插入图片描述
由89kb变成了361kb
在这里插入图片描述

3. 打包为安装程序

3.1 ClickOnce

点击菜单栏的生成,这次选择发布
在这里插入图片描述
选择一个发布路径,下一步
在这里插入图片描述
默认就是
在这里插入图片描述

总结(后续补充实际执行)

在 Visual Studio(VS)中将项目生成 .exe 可执行文件,主要分为两类需求:仅生成可执行文件 和 打包为安装程序(含 .exe 安装包)。根据当前时间(2026年3月)和主流开发环境(如 VS2022),推荐以下方法:

一、仅生成可执行文件(适用于本机运行或简单分发)

适用于在自己电脑上运行,或复制到其他电脑测试(前提是目标电脑已安装对应运行时)。

  • 步骤:
    1. 打开项目,在顶部工具栏将 “解决方案配置” 从 Debug 改为 Release
    2. 点击菜单栏 生成 → 生成解决方案(或按 Ctrl+Shift+B)。
    3. 编译成功后,.exe 文件位于:
      • C/ WPF / WinForms 项目:项目路径\bin\Release\net6.0-windows\win-x64\(若使用 .NET 6+)
      • C++ 项目:项目路径\Release\
    4. 直接运行该 .exe 文件即可。

✅ 优点:快速、无需额外工具
⚠️ 注意:若目标电脑未安装 .NET 运行时,可能无法运行(除非启用“自包含发布”,见下文)


二、生成独立单文件 .exe(无需安装运行时)

适用于分发给无 .NET 环境的用户,生成一个包含所有依赖的独立 .exe 文件。

  • 前提:项目需使用 .NET 6 或更高版本(如 .NET 8)。
  • 配置方法:
    1. 右键项目 → 属性 → 应用程序 → 确保目标框架为 .NET 6.0 或更高。
    2. 切换到 生成 选项卡 → 设置 运行时标识符(RID) 为 win-x64win-x86
    3. 编辑 .csproj 文件,在 <PropertyGroup> 中添加:
      <PublishSingleFile>true</PublishSingleFile>
      <PublishTrimmed>true</PublishTrimmed>
      <SelfContained>true</SelfContained>
      
    4. 右键项目 → 发布 → 选择 文件夹 → 发布到本地路径(如 Publish 文件夹)。
    5. 发布完成后,在输出目录中找到 单个 .exe 文件,可直接分发。

✅ 优点:单文件、无需安装 .NET、跨机器运行
🔗 官方文档:.NET 单文件发布


三、打包为安装程序(生成 .exe + .msi 安装包)

适用于正式发布给用户,提供安装向导、快捷方式、卸载功能等。

  • 步骤:
    1. 安装扩展:
      VS → 扩展 → 管理扩展 → 搜索 “Microsoft Visual Studio Installer Projects” → 安装 → 重启 VS。
    2. 添加 Setup 项目:
      右键解决方案 → 添加 → 新建项目 → 搜索 “Setup Project” → 创建。
    3. 配置安装内容:
      • 在 Setup 项目中,右键 Application Folder → Add → Project Output → 选择主项目 → Primary Output。
      • 右键 Primary Output → Create Shortcut → 将快捷方式拖到 User’s Desktop 和 User’s Programs Menu。
    4. 生成安装包:
      右键 Setup 项目 → 生成 → 安装包(.exe.msi)生成于 Setup 项目的 Release 目录。

✅ 优点:专业分发、支持自动安装/卸载
⚠️ 注意:该扩展在 VS2022 中需手动安装,官方下载地址


四、常见问题提醒

  • 找不到 .exe 文件:检查是否在 Release 模式下生成,路径通常是 bin\Release\
  • 生成失败:确保项目能正常编译,先在 Debug 模式下测试运行。
  • 依赖缺失:若使用第三方库(如 Qt、OpenCV),需将对应 .dll.exe 放在同一目录,或使用工具(如 windeployqt)自动收集。

如需进一步操作指导,可参考以下资源:

参考文献

教程:使用 C# 在 Visual Studio 中创建 Windows 窗体应用
【WPF】使用Costura.Fody将工程打包为单个EXE文件


喜欢的点个关注吧><!祝你永无bug~

/*
                   _ooOoo_
                  o8888888o
                  88" . "88
                  (| -_- |)
                  O\  =  /O
               ____/`---'\____
             .'  \\|     |//  `.
            /  \\|||  :  |||//  \
           /  _||||| -:- |||||-  \
           |   | \\\  -  /// |   |
           | \_|  ''\---/''  |   |
           \  .-\__  `-`  ___/-. /
         ___`. .'  /--.--\  `. . __
      ."" '<  `.___\_<|>_/___.'  >'"".
     | | :  `- \`.;`\ _ /`;.`/ - ` : | |
     \  \ `-.   \_ __\ /__ _/   .-` /  /
======`-.____`-.___\_____/___.-`____.-'======
                   `=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            佛祖保佑       永无BUG
*/

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝吻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值