2009-07-06 136 views
45

如果右鍵單擊某個文件夾,您將看到一個「Clean」菜單項。我認爲這將清理(刪除)obj和bin目錄。然而,據我所知,它什麼都不做。 還有別的辦法嗎? (請不要告訴我去Windows資源管理器或cmd.exe) 我想刪除obj和bin文件夾,以便我可以輕鬆地壓縮整個事情。如何清潔Visual Studio bin和obj文件夾

+1

[我想刪除所有bin和obj文件夾以強制所有項目重建所有內容](https://stackoverflow.com/questions/755382/i-want-to-delete-all-bin-and -obj-folders-to-force-all-projects-to-rebuild-everyt) – 2017-07-23 06:35:07

回答

2

它不會刪除文件夾,但它會刪除構建的副產品。是否有任何理由想要刪除實際構建的文件夾

+0

我想刪除所有不需要編譯的東西,以便壓縮併發送它。在zip文件中插入可能會成爲反病毒的問題。 – tom7 2009-07-06 18:45:49

+0

是的。但正如我所說,構建_products_被刪除。這意味着.obj和.exe文件。只是不是實際的文件夾。 – Christopher 2009-07-06 19:29:15

+0

如果某些引用已被移除/移動,並且代碼中未引用dll,則不會將它們內置到bin文件夾中,但它們也不會被清理。這最終會在您的應用程序的本地版本中生成,但在其他任何地方都會失敗。 – Oli4 2018-01-30 06:13:42

4

這個little utility可能是你想要的。

它還會刪除名爲.suo * *和文件。用戶併產生不能以任何理由刪除的所有文件和文件夾的報告

+0

這聽起來像它會做的伎倆。 – RichardOD 2009-07-06 18:51:20

+7

鏈接已損壞。 – Matt 2011-07-15 22:42:39

+0

http://web.archive.org/web/20080516034020/http://www.dotnet2themax.com/blogs/fbalena/PermaLink,guid,4f594446-332a-4c97-a8c0-b66e66f649b3.aspx – 2012-02-07 18:58:11

3

清理將刪除由構建創建的所有中間和最終文件進程,如.obj文件和.exe或.dll文件。

但是,它不會刪除這些文件構建的目錄。 我沒有看到一個令人信服的理由,爲什麼你需要刪除目錄。 你能解釋一下嗎?

如果你在「Clean」之前和之後看這些目錄,你應該看到你的編譯輸出被清除。

11

看看羅恩雅各布神奇的開源CleanProject它甚至照顧的壓縮,如果你喜歡。

這裏是CodePlex上link

56

正如其他人已經作出了迴應清理將刪除由構建生成的所有工件。但它會留下一切。

如果你在你的MSBuild項目中有一些自定義項,這可能會給你帶來麻煩並留下你認爲應該刪除的東西。

你可以用一個簡單的改變你解決這個問題*凸出加入這個地方接近尾聲。

<Target Name="SpicNSpan" 
     AfterTargets="Clean"> 
    <RemoveDir Directories="$(OUTDIR)"/> 
</Target> 

將在當前平臺/配置你的bin文件夾中刪除所有內容。

------編輯 輕微變化基於以下Shaman's answer(共享票,給他一些太)

<Target Name="SpicNSpan" AfterTargets="Clean"> 
    <!-- Remove obj folder --> 
    <RemoveDir Directories="$(BaseIntermediateOutputPath)" /> 
    <!-- Remove bin folder --> 
    <RemoveDir Directories="$(BaseOutputPath)" /> 
</Target> 

----從xDisruptor部分再次編輯,但我刪除了。 VS刪除,因爲這會在的.gitignore得到更好的服務(或同等學歷)

更新了2015年VS

<Target Name="SpicNSpan" AfterTargets="Clean"> <!-- common vars https://msdn.microsoft.com/en-us/library/c02as0cs.aspx?f=255&MSPPError=-2147217396 --> 
    <RemoveDir Directories="$(TargetDir)" /> <!-- bin --> 
    <RemoveDir Directories="$(ProjectDir)$(BaseIntermediateOutputPath)" /> <!-- obj --> 
</Target> 

他還提供了股份公司如果你有多個項目推動這個任務,那麼建議讓任務更易於部署和維護。

如果您對此答案投票,一定要爲他們投票。

17

要刪除bin和OBJ構建之前添加到項目文件:

<Target Name="BeforeBuild"> 
    <!-- Remove obj folder --> 
    <RemoveDir Directories="$(BaseIntermediateOutputPath)" /> 
    <!-- Remove bin folder --> 
    <RemoveDir Directories="$(BaseOutputPath)" /> 
</Target> 

下面是文章:How to remove bin and/or obj folder before the build or deploy

1

根據喬的回答,我已經轉換VB代碼到C#:

/// <summary> 
/// Based on code of VSProjCleaner tool (C) 2005 Francesco Balena, Code Archirects 
/// </summary> 
static class VisualStudioCleaner 
{ 
    public static void Process(string rootDir) 
    { 
     // Read all the folder names in the specified directory tree 
     string[] dirNames = Directory.GetDirectories(rootDir, "*.*", SearchOption.AllDirectories); 
     List<string> errorsList = new List<string>(); 

     // delete any .suo and csproj.user file 
     foreach (string dir in dirNames) { 
      var files = new List<string>(); 
      files.AddRange(Directory.GetFiles(dir, "*.suo")); 
      files.AddRange(Directory.GetFiles(dir, "*.user")); 
      foreach (string fileName in files) { 
       try { 
        Console.Write("Deleting {0} ...", fileName); 
        File.Delete(fileName); 
        Console.WriteLine("DONE"); 
       } catch (Exception ex) { 
        Console.WriteLine(); 
        Console.WriteLine(" ERROR: {0}", ex.Message); 
        errorsList.Add(fileName + ": " + ex.Message); 
       } 
      } 
     } 

     // Delete all the BIN and OBJ subdirectories 
     foreach (string dir in dirNames) { 
      string dirName = Path.GetFileName(dir).ToLower(); 
      if (dirName == "bin" || dirName == "obj") { 
       try { 
        Console.Write("Deleting {0} ...", dir); 
        Directory.Delete(dir, true); 
        Console.WriteLine("DONE"); 
       } catch (Exception ex) { 
        Console.WriteLine(); 
        Console.WriteLine(" ERROR: {0}", ex.Message); 
        errorsList.Add(dir + ": " + ex.Message); 
       } 
      } 
     } 
     Console.WriteLine(new string('-', 60)); 
     if (errorsList.Count == 0) { 
      Console.WriteLine("All directories and files were removed successfully"); 
     } else { 
      Console.WriteLine("{0} directories or directories couldn't be removed", errorsList.Count); 
      Console.WriteLine(new string('-', 60)); 
      foreach (string msg in errorsList) { 
       Console.WriteLine(msg); 
      } 
     } 
    } 
} 
1

您可以輕鬆地找到並刪除和遠東OBJ文件夾經理。

  1. 導航到你的解決方案,然後按Alt + F7
  2. 在搜索設置對話框:

    • 類型 「斌,目標文件」 在外地「文件掩碼或幾個文件掩碼
    • 檢查選項」搜索文件夾「
    • Press En之三
  3. 搜索完成後,切換視圖 「面板」

  4. 選擇所有文件(用Ctrl + A)和刪除文件夾(按下 「Shift +刪除」)

希望它可以幫助別人。

10

如果您正在使用Git和項目中有一個正確的.gitignore,您可以

git clean -xdf --dry-run 

.gitignore名單上刪除絕對的每一個文件,也就是說,它會清除objbin文件夾(在x觸發器這種行爲)

18

對於Visual Studio 2015的MSBuild變量已經改變了一點:

<Target Name="SpicNSpan" AfterTargets="Clean"> <!-- common vars https://msdn.microsoft.com/en-us/library/c02as0cs.aspx?f=255&MSPPError=-2147217396 --> 
     <RemoveDir Directories="$(TargetDir)" /> <!-- bin --> 
     <RemoveDir Directories="$(SolutionDir).vs" /> <!-- .vs --> 
     <RemoveDir Directories="$(ProjectDir)$(BaseIntermediateOutputPath)" /> <!-- obj --> 
    </Target> 

請注意,此代碼段也會從解決方案的根目錄中清除.vs文件夾。如果您覺得刪除.vs文件夾是一種矯枉過正的行爲,您可能需要將相關行註釋掉。我已啓用它,因爲我注意到,在某些第三方項目中,當.vs文件夾中存在文件ala application.config時,會導致問題。

附錄:

如果你到優化解決方案的可維護性,你可能要考慮的事情之一一步,把上面的代碼到一個單獨的文件,像這樣:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
     <Target Name="SpicNSpan" AfterTargets="Clean"> <!-- common vars https://msdn.microsoft.com/en-us/library/c02as0cs.aspx?f=255&MSPPError=-2147217396 --> 
      <RemoveDir Directories="$(TargetDir)" /> <!-- bin --> 
      <RemoveDir Directories="$(SolutionDir).vs" /> <!-- .vs --> 
      <RemoveDir Directories="$(ProjectDir)$(BaseIntermediateOutputPath)" /> <!-- obj --> 
     </Target> 
    </Project> 

然後將這個文件包含在每個*的最後。的csproj文件,像這樣:

 [...] 
    <Import Project="..\..\Tools\ExtraCleanup.targets"/> 
    </Project> 

這樣你就可以不必通過手動手工編輯每一個每一個* .csproj的文件中的痛苦去充實或微調額外清理邏輯集中在一個地方你想要改進的時候。

1

我用VisualStudioClean這很容易理解和預測。知道它是如何工作的以及它將要刪除的文件讓我感到舒服。

以前我試過VSClean(注意VisualStudioClean不VSClean),VSClean更先進,它有很多的配置,有時讓我想知道哪些文件是要刪除?一個錯誤配置會導致我的源代碼丟失。測試配置的工作方式需要備份需要花費很多時間的所有項目,所以最終我選擇了VisualStudioClean。

結論:VisualStudioClean如果你想基本清理VSClean更復雜的場景。

2

我不能添加評論,但(沒有最小的聲譽達到)
所以我離開這個答覆強調:

<RemoveDir Directories="$(BaseIntermediateOutputPath)" />的「BeforeBuild」行動是偉大的,但對我來說,是相互衝突包含在同一個項目中的實體框架模型。

我收到的錯誤是:

Error reading resource '{mymodel}.csdl' -- 'Could not find a part of the path '{myprojectpath}\obj\Release\edmxResourcesToEmbed\{mymodel}.csdl 

我想,在「edmxResourcesToembed」執行「BeforeBuild」目標行動之前被創建。

6

此站點:https://sachabarbs.wordpress.com/2014/10/24/powershell-to-clean-visual-studio-binobj-folders/使用powershell從當前目錄和子目錄中刪除任何bin和obj文件夾。它應該可以從驅動器的根目錄運行它下面是文章報價:

這是威廉姆斯版本

gci -inc bin,obj -rec | rm -rec -force 

在威廉姆斯自己的話說

,即刪除所有的當前目錄和每個子目錄中的「bin」和「obj」目錄。對於在工作空間目錄中運行以達到「乾淨」狀態非常有用,特別是當有人混淆並且IDE內部的Clean或Rebuild無法捕捉時。

對於那些讀取可能不知道,PowerShell支持命令別名,這裏再次改寫不使用別名

Get-ChildItem -inc bin,obj -rec | Remove-Item -rec -force 

注意:你應該有這個存儲在PowerShell中的文件,並將該文件(您的.sln文件所在的位置),然後在想要正確清理時運行它(而不是VisualStudio所做的那個micky鼠標,並且也報告成功)。

相關問題