在Visual Studio中,“清理”命令有什么作用?


Answers:


77

输出目录-删除先前构建的代码。

它不会删除bin / obj目录本身(或它们下面的Debug / Release目录),而不会删除实际的.exe,.dll等文件。不幸的是,这使它对我通常用于清理输出目录的用处不大:当我想压缩源代码时。由于Clean操作不会执行此操作,因此我通常只直接删除bin和obj目录。


1
关于不完全删除目录的好处。这对我来说几乎没有意义,因为Subversion的导出命令运行良好(至少在没有将bin,obj,*。suo,*。user等文件添加到存储库中的情况下)。但是,是的,很高兴看到该功能。
布赖恩·吉迪恩

2
有趣的是,在VS 2013中,“清洁解决方案”命令仅会影响当前活动的配置(例如:如果您的解决方案设置为“调试”配置,则“清洁解决方案”将不会对“发布”文件夹中的文件执行任何操作)。
Oran D. Lord

有一个名为CleanProject的扩展,它使您可以进行完全清理(删除bin,obj,...):visualstudiogallery.msdn.microsoft.com/…–
Robin

请注意,“清理”操作不会删除CopyLocal设置为True的引用程序集。您可以编辑项目文件以添加“ AfterClean” MSBuild目标,该目标可以进行其他清理。
yoyo

我在某处读到它仅影响构建输出文件,不包括其他工具或自定义构建事件创建的文件。那是对的吗?
Dercsár

30

为什么不找自己呢?打开Microsoft.Common.Targets(位于%windir%\ Microsoft.NET下),您将看到如下部分:

<!--
============================================================
                                    Clean

Delete all intermediate and final build outputs.
============================================================
-->
<PropertyGroup>
    <CleanDependsOn>
        BeforeClean;
        CleanReferencedProjects;
        UnmanagedUnregistration;
        CoreClean;
        CleanPublishFolder;
        AfterClean
    </CleanDependsOn>
</PropertyGroup>
<Target
    Name="Clean"
    Condition=" '$(_InvalidConfigurationWarning)' != 'true' "
    DependsOnTargets="$(CleanDependsOn)" />

继续阅读以准确了解每个子目标的功能。(当然,有些只是存根供用户覆盖)。

就个人而言,我喜欢看花哨的IDE背后有什么诡计。为此,我建议增加写入“输出”窗口的信息量。工具->选项->项目和解决方案->生成并运行-> MSBuild详细程度->从“最小”更改为“正常”或“详细”。

再次尝试执行Clean操作并立即查看输出!将您看到的与* .targets文件相关联是开始学习MSBuild的好方法。


15

它遍历您的输出目录,并删除其中的任何与构建相关的文件。

我认为您也可以通过转到以下项目的属性来配置它

配置属性->常规,在“清理扩展名”下


我很确定我知道这一点。只是找不到合适的用例,因此-忘记了。无法理解如何正确向Google提出要求。
2009年

1
一个很好的用例是,您想压缩项目并通过电子邮件将其发送给另一位程序员。它可以减小文件大小并删除可执行文件,而电子邮件系统对此不太喜欢。
rbwhitaker 2012年

仅在c ++项目属性中找到“在清理时删除的扩展名”,在托管项目中找不到。
亚当·卡维尼斯


4

人们使用“干净”来强制从源头进行完整的重建。如果未更改,则编译器不会每次都重建每个文件。


3
首先要澄清这一点,打扫不做任何建筑。如果您使用VS中的'build'选项进行后续构建,则清理将确保完整构建。如果您在Visual Studio中“重建”,那么所有内容都会被重建,因为无论如何这都是干净的。我个人总是进行重建,以避免潜在的问题。
克里斯·哈克罗

1
应该接受这作为答案,因为它给出了实际的原因
蓝图
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.