Visual Studio三大编译操作详解:生成/重新生成/清理解决方案的正确打开方式

初识C语言—VS2022如何创建编译C语言 初识C语言,如何用VS2022编译C语言 阅读详情
AI摘要

本文详细介绍了Visual Studio中生成、重新生成和清理解决方案这三大编译操作。阐述了各操作的基本功、对比差异,还指出实战中的常见误区及解决办法。此外,介绍了命令行操作、自定义编译事件等高阶玩法,最后给出开发者自查清单。

(前排提示:文末附开发者实战经验总结表格,建议收藏备用!)

每次点击Visual Studio工具栏那个绿色三角时,你是否有注意到旁边还有三个"神秘按钮"?今天我们就来解密这三个让新手开发者摸不着头脑的"三兄弟"——生成解决方案、重新生成解决方案和清理解决方案。

一、编译三剑客的基本功

1.1 生成解决方案(Build Solution)

这是最常用的编译方式(按F7快捷键真香!)。当你修改了某个C#文件后:

// 修改前
public class Calculator{
    public int Add(int a, int b){
        return a + b;
    }
}

// 修改后
public class Calculator{
    public int Add(int a, int b){
        return a + b + 1; // 手滑多加了个1
}

VS会智能识别到Calculator.cs被修改,只会重新编译这个文件及其依赖项。编译后的中间文件会存放在项目的obj\Debug目录下(注意这里不是最终的输出目录哦!)

1.2 重新生成解决方案(Rebuild Solution)

这个操作相当于"格式化重装"(重要的事情说三遍:会删中间文件!会删中间文件!会删中间文件!)。它会:

  1. 删除所有中间文件(.obj/.pch等)
  2. 重新编译所有源代码
  3. 重新链接生成最终程序

去年我在处理一个Unity项目时遇到灵异事件:明明修改了脚本但运行效果不变。最后用重新生成才解决——原来是中间文件缓存导致的问题!

1.3 清理解决方案(Clean Solution)

这个操作就像大扫除(但可能比你想象的更"狠"):

  • 删除所有中间文件
  • 清空bin和obj目录
  • 但保留.suo用户选项文件(你的窗口布局设置还在)

(血泪教训:千万别在清理后直接关闭VS,否则下次打开项目要重新编译所有文件!)

二、三兄弟的武林秘籍对比表

操作类型影响范围执行时间适用场景危险指数
生成解决方案增量编译短日常开发⭐
重新生成解决方案全量编译长项目结构变更/依赖更新⭐⭐
清理解决方案仅删除生成文件中发布前清理/磁盘空间不足⭐⭐⭐

(注意:危险指数主要指误操作可能导致的时间损失)

三、实战中的常见误区

3.1 “我明明点了生成,怎么代码没生效?”

这种情况多半是遇到以下场景:

  • 修改了项目属性(如目标框架)
  • 更改了程序集名称
  • 调整了预处理器指令

这时候必须祭出重新生成大法!因为VS的智能编译系统无法检测这些"元数据"级别的变更。

3.2 “清理后项目跑不起来了!”

别慌!这是正常现象。清理操作会删除所有生成文件,包括:

  • 编译后的DLL
  • 程序配置文件
  • NuGet包缓存

解决方案很简单:重新生成即可(但大项目可能要喝杯咖啡等编译完成)。

3.3 版本控制中的坑

.gitignore标准配置中通常会忽略bin和obj目录。但如果你:

  1. 修改了项目输出路径
  2. 自定义了中间目录
  3. 使用非标编译流程

记得更新.gitignore文件!否则可能把编译产物提交到仓库(别问我怎么知道的…)

四、高阶玩家的骚操作

4.1 命令行版三兄弟

在CI/CD流水线中,我们可以用MSBuild命令实现相同功能:

# 生成
msbuild MySolution.sln /t:Build

# 重新生成
msbuild MySolution.sln /t:Rebuild

# 清理
msbuild MySolution.sln /t:Clean

4.2 自定义编译事件

在项目属性->生成事件中,可以添加预处理和后处理脚本:

# 预生成事件:检查代码规范
if (Test-Path ".\stylecop.json") {
    & "C:\Tools\StyleCop\SC.exe" /project:$ProjectDir
}

# 生成后事件:自动复制DLL到插件目录
xcopy /Y "$(TargetPath)" "D:\Game\Mods\$(TargetName)\"

4.3 多项目解决方案的编译策略

当解决方案包含数十个项目时,可以:

  1. 设置生成顺序(项目依赖)
  2. 配置并行编译(最大CPU核心数)
  3. 选择性编译(右键解决方案->配置管理器)

(实测:开启并行编译后,大型C++项目的编译时间从15分钟缩短到4分钟!)

五、开发者必备自查清单

遇到编译问题时,请依次检查:

  1. 错误列表中的真实错误(别被第一个错误误导!)
  2. 项目目标平台是否匹配(x86 vs x64)
  3. NuGet包版本是否一致
  4. 系统环境变量是否被修改
  5. 杀毒软件是否拦截了编译进程

(终极杀招:关闭VS,删除.vs隐藏文件夹,然后重新生成)

附:老司机经验速查表

症状首选操作备选方案
修改代码后未生效重新生成解决方案清理+生成
出现元数据错误清理解决方案重启VS
编译时间异常增长检查项目依赖开启并行编译
生成成功但运行崩溃检查运行时依赖使用Dependency Walker
版本冲突更新NuGet包手动绑定重定向

记住:好的编译习惯能节省50%的调试时间!下次遇到奇怪问题时,不妨先想想这三个按钮的正确用法。你在编译过程中还遇到过哪些玄学问题?欢迎在评论区分享你的"战痘"经历!

c++程序编译过程及相关概念 编译 把源文件中的源代码翻译成机器语言,保存到目标文件中。如果编译通过,就会把CPP转换成OBJ文件。 编译单元: 每个cpp就是一个编译单元,每个编译单元相互之间是独立且相互不知的。一个编译单元(Translation Unit)是指一个.cpp文件以及这所include的所有.h文件,.h文件里面的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一个.obj文件,后者拥有... 阅读详情

相关推荐

在Visual Studio中配置x64编译环境以及编译代码时遇到的若干问题

本文根据近期将32位程序升级到64位的项目实践,大概地总结了一些配置x64编译环境的方法,以及一些编译问题的解决办法,希望能给大家提供一个借鉴或参考。

dvlinker的技术专栏 1万+

最完整介绍Visual C++ 6.0和Visual Studio 2022中的编译、生成和运行(CTRL+F7、F7、CTRL+F5)

最完整介绍Visual C++ 6.0和Visual Studio 2022中的编译、生成和运行(CTRL+F7、F7、CTRL+F5)

荔园微风的博客 3万+

眼动数据分析基础_AOI分析动态刺激物

如果您正在研究人们对如视频、动画等动态刺激物的视觉行为,动态AOI工具可为您提供类似静态AOI工具对于图片及其他静止刺激物分析的同样功能。创建和编辑动态AOI的过程和静态AOI相似。 关于动态AOI工具的使用,有几点非常重要: 多个看到相同线性动态刺激物的用户的眼动数据叠加是有价值的; 动态AOI不能用于非线性动态记录的分析; 动态AOI不能用于静态刺激物,如图片的分析; 动态AOI可以被开启、关闭、移动、调整大小及跟踪相关分析对象 首先,我们来定义两种不同的动态刺激物:线性动态刺激物(LDS),是指固

Kobe123brant的博客 3501

【C语言】如何使用 Visual studio 2019 编写,并编译和运行C代码?

如何使用 Visual studio 2019 编写,并编译和运行C代码?

qq_48163964的博客 5万+

Simulink中为Scope模块添加图例的方法

比如我要在Scope模块输出三轴加速度的数据,但三轴数据波形混杂在一起不太好看,此时就需要在Scope模块中添加图例来使波形看起来更加清晰明了。 注:我这里使用的Matlab版本为2019a 1.首先在simulink中打开,需要添加图例的Scope,如图示: 2.在Matlab,command窗口输入: >> set(0,'ShowHiddenHandles','On'); >> set(gcf,'menubar','figure'); 此时你会发现Scope窗口菜单栏多了好几

Kunfly的博客 1万+

在带有Intel Arc GPU的Windows上安装IPEX-LLM

本文将介绍在 Intel Arc GPU 环境下安装 IPEX-LLM。

wux_labs的博客 1634

Visual Studio三大编译操作详解:生成/重新生成/清理解决方案的区别与妙用

生成成功后自动拷贝dll到指定目录 xcopy " $( TargetPath) " "D: \ Output \ " /Y$(# 生成成功后自动拷贝dll到指定目录 xcopy " $( TargetPath) " "D: \ Output \ " /Y记住这三个操作的黄金法则:✅ 日常开发用生成(F7)✅ 改底层用重新生成✅ 清缓存用清理方案下次再遇到VS抽风时,先别急着砸键盘,试试这三板斧,说不定就能柳暗花明!如果你还有更多VS使用技巧,欢迎在评论区交流分享~(比心❤)

ByteBeacon的博客 2070

线程池详解(通俗易懂超级好)

目标 【理解】线程池基本概念 【理解】线程池工作原理 【掌握】自定义线程池 【应用】java内置线程池 【应用】使用java内置线程池完成综合案例 线程池 线程池基础 线程池使用 线程池综合案例 4.学员练习 5.线程池总结 概念介绍 1:什么是线程池 2:为什么使用线程池 3:线程池有哪些优势 什么是池 什么是线程池 线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务就是我们前面学过的实现了Runna.

拉格朗日的学习笔记 12万+

Visual Studio编译三剑客:生成/重新生成/清理解决方案完全指南

生成前执行批处理生成后复制文件到指定目录(危险操作)曾经有个同事在生成后事件里写了个rm -rf,结果…(此处省略500字)日常开发用生成(F6),就像每天用筷子吃饭遇到灵异问题先Rebuild,就像电脑卡顿时先重启定期Clean,就像大扫除保持环境整洁超大项目要学会拆分生成,就像搬家要分批运输重要发布前一定要Clean+Rebuild,就像考试前要检查文具(终极建议)给你的解决方案买个SSD吧!编译速度提升立竿见影,比任何优化技巧都管用~

digitalpath的博客 1万+

手把手完整实现STM32+NB-IoT+MQTT+ThingsCloud云平台+手机APP(Android或iOS)及微信小程序及Web app 应用

本教程以远程温湿度显示及点灯作为示例。最终效果实现本地OLED显示屏、云平台和手机APP、微信小程序和Web App可远程查看温湿度数据,并可远程控制LED灯亮灭。以此完成基于MQTT协议的NB-IoT远程发布订阅数据,以此在本教程基础上可扩展开发更多的功能。

嵌入式阿齐Archie 2万+

基于多模态融合的反无人机视觉跟踪算法研究

本研究提出了一种基于多模态融合的反无人机视觉跟踪算法,通过整合可见光、红外、深度等多种视觉信息源,提高了对无人机的跟踪精度和可靠性。设计并实现了多模态特征提取方法,针对不同模态图像的特点提取了有效的特征信息,为多模态融合提供了基础。研究了多种多模态融合策略,包括特征级融合、决策级融合和混合融合,并通过实验对比分析了它们的优缺点,确定了适合反无人机视觉跟踪的融合方法。选择并改进了跟踪算法,将多模态融合信息融入到跟踪过程中,提高了算法对复杂环境和无人机运动变化的适应性。

AI的内部世界的博客 1350

Visual Studio三大编译操作详解:生成/重新生成/清理解决方案的实战指南

生成后自动复制DLL到指定目录 xcopy /y " $( TargetPath) " "D: \ SharedLib \ "$(# 生成后自动复制DLL到指定目录 xcopy /y " $( TargetPath) " "D: \ SharedLib \ "日常开发用生成(Build)配置变更用重建(Rebuild)发布清理用清场(Clean)下次遇到编译问题时,先别急着砸键盘(虽然我懂你的心情),冷静分析问题类型,选择正确的编译操作。

matrixmind1的博客 1364

PowerDesigner 数据库建模使用详解

PowerDesigner 数据库建模使用详解

congge 7081

Visual Studio三大法宝:生成/重新生成/清理解决方案的正确打开方式

举个栗子🌰:假设你的解决方案里有10个项目,你只改了第5个项目的代码。这时候点击生成,VS只会重新编译第5个项目及其依赖的下游项目,其他项目直接使用上次编译的缓存结果。它只会扫描有变化的项目文件(比如你刚修改过的C#类文件),把需要重新编译的部分打包成最新的程序集。后来发现是旧编译残留的元数据在作妖。实际上解决方案文件(.sln)和项目文件(.csproj)的大小并不会改变,清理的只是编译生成的临时文件。(最后的小贴士)在团队开发中,如果发现持续集成服务器(CI)的构建结果和本地不一致,记得先在本地执行。

zenithdev1的博客 2061

UEFI 基础教程 (零) - 目录

UEFI 基础教程 (十八) — UEFI Build Process简单分析。UEFI 基础教程 (十五) — 获取UEFI MemoryMap。UEFI 基础教程 (六)   —  PROTOCOL 简单使用。UEFI 基础教程 (十)   —  FileIO 简单使用。UEFI 基础教程 (一)   —  搭建UEFI开发环境。UEFI 基础教程 (九)   —  EVENT 简单使用。UEFI 基础教程 (七)   —  HOB 简单使用。UEFI 基础教程 (八)   —  PCD 简单使用。..

技术联盟 1534

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Visual Studio构建命令完全指南:生成/重新生成/清理解决方案的正确打开方式!!!

作为.NET开发者最熟悉的IDE(没有之一),Visual Studio的构建菜单里藏着三个"孪生兄弟"——生成解决方案、重新生成解决方案和清理解决方案。举个栗子🌰:当你修改了某个类的ToString()方法,生成解决方案只会重新编译这个类所在的程序集,其他没改动的DLL都不动。"掌握这三个构建命令的正确用法,绝对能让你的调试效率提升200%!真实案例📖:某次项目突然报"类型不存在"错误,明明代码是对的!,这就像用核弹打蚊子——效果有了,代价太大!:只编译有改动的文件(增量编译)(特别是自定义编译脚本)

matrixmind1的博客 4687

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Visual Studio三大编译操作解密:生成/重新生成/清理解决方案的终极指南

举个栗子🌰:假设你有100个.cs文件,只改了其中1个,生成操作就只会编译这个文件+相关的引用文件,整个过程可能只需要2秒!(效果实测)在32核服务器上编译ASP.NET Core项目,编译时间从3分20秒降到2分45秒!勾选"最大并行项目生成数",根据CPU核心数设置(比如8核机器设置6个,留2个给其他程序)(真实案例)上周同事提交代码后,我拉取代码始终编译失败,清理后再生成直接搞定!路径:工具 -> 选项 -> 项目和解决方案 -> 生成并运行。处方:立即重新生成解决方案(接口变动必须全量编译!

webwizardry的博客 1221

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Visual Studio编译三剑客:生成/重新生成/清理解决方案到底怎么选?

预生成事件(如版本号自动生成)后期生成事件(如自动复制dll到指定目录)

agilearchitect的博客 3623

Visual Studio三大编译操作详解:生成/重新生成/清理解决方案的终极指南

每次看到Visual Studio里这仨按钮是不是都懵圈?今天咱们用最接地气的方式把这三个操作掰开了揉碎了讲清楚!保证你看完再也不会手滑点错按钮了~先来看张图感受一下它们的排位(虽然咱们不能放图,但可以脑补):在VS的生成菜单里,这三个选项就像亲兄弟一样排排坐。不过他们的脾气可大不一样!(别问我是怎么知道的 T_T)(实测编译速度提升30%!

matrixcode1的博客 1253

Visual Studio三大神操作:生成/重新生成/清理解决方案详解(附真实场景分析)

日常开发用生成玄学问题先重装(指重新生成)清理就像大扫除(做完要复原)最后送大家一张决策流程图👇开始│├─ 需要快速验证 → 生成解决方案│├─ 遇到奇怪错误 → 重新生成解决方案│└─ 要瘦身项目 → 清理解决方案 → 必须重新生成!下次遇到编译问题时,不妨先想想这三个操作的区别,别再像我当年一样,只会无脑点重新生成等到天荒地老啦!

2501_90837832的博客 3687

Visual Studio三大编译操作深度解析:生成/重新生成/清理的正确打开方式

这时候你会发现,Visual Studio的三个按钮正在向你发出嘲讽的微笑:生成解决方案、重新生成解决方案、清理解决方案。“编译就像煮咖啡,豆子(代码)质量决定最终味道,但研磨(编译)方式同样重要。某次开发时遇到诡异现象:明明删除了某个类,编译时却提示类已存在。一个包含200+项目的解决方案,生成需要15分钟,改用重新生成后耗时骤增到1小时。这三个看似简单的按钮,实际隐藏着VS编译系统的核心机密。下次遇到编译灵异事件时,记得先深呼吸,然后优雅地点下正确的按钮~(示意图:编译器只处理修改过的文件)

techvoyager123的博客 1008

Visual Studio构建三剑客:生成/重新生成/清理解决方案的正确打开方式

在解决方案右键 → 项目生成顺序,可以设置编译优先级(处理复杂依赖的神器!

fluxcode的博客 1297

Visual Studio编译三剑客:生成/重新生成/清理解决方案全解析

(最后的小彩蛋)按住Shift点击生成按钮,可以跳过编译直接启动调试!你确定要这么玩火吗?)为什么有时候生成不管用必须重新生成?按住Ctrl点击生成按钮,可以单独生成当前项目(适合多项目解决方案)项目越大,编译时间差异越明显。[生成解决方案按钮位置示意图]:增量编译(只打有变化的靶子):能用生成就别用重新生成!项目文件/NuGet修改。

javajenius的博客 1206

Visual Studio三大构建操作完全指南:生成/重新生成/清理解决方案的正确打开方式!!!

最后分享个冷知识:Visual Studio的编译系统其实是个状态机,那些obj文件夹里的".cache"文件就是它的记忆载体。(血泪教训)上次我遇到一个诡异bug:项目引用的NuGet包明明升级了,但运行时还是旧版本。举个栗子🌰:假设你的解决方案有10个项目,其中只有Project5的某个类文件被修改过。(实测数据)在一个包含20个项目的企业级解决方案中,首次生成需要3分钟,后续生成可能只需10秒!)可以看到重新生成解决方案的耗时是稳定的,而普通生成在无修改时几乎秒过!A:先清理解决方案,再重新生成!

networknomad的博客 1220

Visual Studio构建三剑客:生成/重新生成/清理解决方案深度解析

开始│├─ 日常修改 → 生成解决方案│├─ 添加新功能 → 生成→测试→提交│├─ 遇到灵异bug → 清理→重新生成│└─ 发布版本 → 清理→重新生成→打包每天第一次打开项目:清理→重新生成每次拉取代码后:建议重新生成提交代码前:必须重新生成验证每月大扫除:清理所有解决方案。

fluxcode的博客 1427
上一篇: 彻底搞定HTTP 403错误!程序员必会的8种解决方案(附实战场景)
「已注销」
博客等级 码龄2年 86粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值