จะล้างโฟลเดอร์ bin และ obj ภายใน Visual Studio ได้อย่างไร


96

หากคุณคลิกขวาที่โฟลเดอร์คุณจะเห็นรายการเมนู "Clean" ฉันคิดว่านี่จะเป็นการล้าง (ลบ) ไดเร็กทอรี obj และ bin อย่างไรก็ตามเท่าที่ฉันเห็นมันไม่ได้ทำอะไรเลย มีวิธีอื่นอีกไหม (โปรดอย่าบอกให้ฉันไปที่ Windows Explorer หรือ cmd.exe) ฉันต้องการลบโฟลเดอร์ obj และ bin ออกเพื่อที่ฉันจะได้ซิปไฟล์ทั้งหมดได้อย่างง่ายดาย


คำตอบ:


105

ตามที่คนอื่นตอบไปแล้ว Clean จะลบอาร์ติแฟกต์ทั้งหมดที่สร้างโดยบิลด์ แต่มันจะทิ้งทุกสิ่งทุกอย่างไว้เบื้องหลัง

หากคุณมีการปรับแต่งบางอย่างในโครงการ MSBuild ของคุณสิ่งนี้อาจสะกดปัญหาและทิ้งสิ่งที่คุณคิดว่าควรลบทิ้งไป

คุณสามารถหลีกเลี่ยงปัญหานี้ได้ด้วยการเปลี่ยนแปลงง่ายๆกับ. * proj ของคุณโดยเพิ่มสิ่งนี้ไว้ใกล้จุดสิ้นสุด:

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

ซึ่งจะลบทุกอย่างในโฟลเดอร์ bin ของคุณของแพลตฟอร์ม / การกำหนดค่าปัจจุบัน

------ แก้ไขวิวัฒนาการเล็กน้อยตามคำตอบของชาแมนด้านล่าง (แชร์โหวตและให้คะแนนเขาด้วย)

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

---- แก้ไขอีกครั้งด้วยชิ้นส่วนจากxDisruptorแต่ฉันลบการลบ. vs เพราะจะดีกว่าในรูปแบบ. gitignore (หรือเทียบเท่า)

อัปเดตสำหรับ VS 2015

<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
นี่เป็นทางออกที่ดีที่สุดใช้งานได้ไม่ต้องใช้เครื่องมือพิเศษและทำให้แน่ใจว่าสมาชิกในทีมทุกคนใช้วิธี "สะอาด" เหมือนกัน เหตุใด MS Visual Studio จึงไม่ทำความสะอาดอย่างถูกต้องจึงเป็นเรื่องลึกลับสำหรับฉัน
Rolf

1
นี่เป็นวิธีแก้ปัญหาที่ง่ายที่สุดในการนำไปใช้และทำให้งานสำเร็จโดยไม่ต้องใช้ปลั๊กอินภายนอก
tomoguisuru

ไม่แน่ใจว่าจะเปิดใช้งาน / เรียกเป้าหมายนี้อย่างไร เพียงแค่เลือก 'Clean' ดูเหมือนจะไม่ทำอะไรเลย แล้วฉันจะใช้มันได้อย่างไร?
aliceraunsbaek

ขออภัยตอนนี้เห็นความคิดเห็นของคุณ การระบุ AfterTargets = "Clean" จะเชื่อมโยงเป้าหมายกับเป้าหมายที่สะอาดภายในสำหรับ VisualStudio อย่างไรก็ตามเป้าหมายง่ายๆนี้ไม่ได้ให้ feedbaco ใด ๆ กับคอนโซลดังนั้นมันจะไม่ทำอะไรมากไปกว่าการล้าง $ (OUTDIR) ของคุณจากการมีอยู่ คุณสามารถเพิ่มการจัดการข้อผิดพลาดและข้อความและรับคำติชมที่ดีขึ้นได้
Newtopian

3
@Rolf Visual Studio ไม่ทำความสะอาด "อย่างถูกต้อง" ตามค่าเริ่มต้นเนื่องจาก MS ต้องรองรับกรณีการใช้งานที่ N โครงการที่แตกต่างกันออกไปยังไดเร็กทอรีเดียวกัน หากการทำความสะอาดโปรเจ็กต์รวมกลุ่มไดเร็กทอรีเอาต์พุตทั้งหมดตามค่าเริ่มต้นโครงการอาจทำให้ไฟล์ clobber ไม่เกี่ยวข้องกับโปรเจ็กต์นั้นโดยสิ้นเชิง ดังนั้นพฤติกรรมเริ่มต้นแทนคือการติดตามไฟล์ที่ส่งออกจริงโดยกระบวนการสร้างและลบเฉพาะไฟล์เหล่านั้นออกจากระบบทั้งหมด คลาสทั่วไปของการแตกหักในเวลาที่สะอาดเกิดจากการสร้างหรือคัดลอกไฟล์ระหว่างการสร้างโดยไม่บอกให้ MSBuild เพิ่มลงในรายการติดตาม
Timbo

45

หากคุณใช้คอมไพล์และมีความถูกต้อง.gitignoreในโครงการของคุณคุณสามารถทำได้

git clean -xdf --dry-run

เพื่อลบทุกไฟล์ใน.gitignoreรายการนั่นคือมันจะล้างobjและbinโฟลเดอร์ ( xทริกเกอร์พฤติกรรมนี้)


2
นี้ทำงานได้อย่างสวยงาม สะดวกมากเมื่อคุณต้องการทำโซลูชันกว้าง ๆ แทนที่จะเป็นโครงการ Visual Studio เพียงโครงการ
Ehtesh Choudhury

@JoeHealy แทนการทำความสะอาดก่อนแล้วจึงซิปการใช้ git-archiveเพื่อ zip โดยตรงจาก repo อาจจะง่ายกว่า
Reinier Torenbeek

ใช้งานได้เหมือนมีเสน่ห์! นี่คือคำตอบที่ดีที่สุด นอกจากนี้หากสมมติว่าโครงการไม่ได้ใช้การควบคุมแหล่งที่มาคำตอบนี้ยังคงใช้ได้: เพียงเพิ่มโครงการไปยังการควบคุมแหล่งที่มา (คลิกขวาที่ชื่อโซลูชัน) จากนั้นเรียกใช้คำสั่ง git ด้านบน Btw คุณใช้คำสั่ง git ใน Windows ได้อย่างไร? ฉันต้องใช้ Bash บน Ubuntu บน Windows
brett

@brett สนใจ;) โดยทั่วไปฉันใช้ GitHub สำหรับ Windows ในการปู (แม้ว่าฉันค่อนข้างมั่นใจว่า VS ติดตั้งอุปกรณ์ทำงานที่สามารถใช้งานได้จากพรอมต์คำสั่ง VS) - การตั้งค่าช่วยให้คุณเลือกการจัดเรียงเชลล์ (ซึ่งฉันเลือก PoshGit) . การใช้ WSL เป็นการศึกษามากที่สุดโทรดีมาก!
Ruben Bartelink

2
ตกลง. ตอนนี้ฉันเห็น; กุญแจสำคัญคือ--dry-runสิ่งนี้จะบอกคุณเฉพาะสิ่งที่จะถูกลบ ดี
mkb

42

สำหรับ 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 เป็นการใช้งานมากเกินไป ฉันเปิดใช้งานเพราะฉันสังเกตเห็นว่าในโครงการของบุคคลที่สามบางโครงการทำให้เกิดปัญหาเมื่อมีไฟล์ ala application.config อยู่ในโฟลเดอร์. vs

ภาคผนวก:

หากคุณต้องการเพิ่มประสิทธิภาพการบำรุงรักษาโซลูชันของคุณคุณอาจต้องการดำเนินการต่อไปอีกขั้นหนึ่งและวางข้อมูลโค้ดข้างต้นลงในไฟล์แยกกันดังนี้:

  <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 แต่ละไฟล์ด้วยตนเองทุกครั้งที่คุณต้องการปรับปรุง


มีวิธีใดที่ดีในการลบไฟล์ทั้งหมดในโฟลเดอร์ยกเว้นไฟล์ใดไฟล์หนึ่ง
progLearner

1
@progLearner ofcourse มีstackoverflow.com/a/10019708/863651
XDS

สุดยอด! ขอบคุณ!
progLearner

1
@progLearner เป็นคำถามที่ยุ่งยากในการตอบอย่างถูกต้อง ไฟล์บางไฟล์ดูเหมือนจะถูกล็อกหากเรายังคงมีอยู่ 2 หรือ 3 ครั้งไฟล์เหล่านั้นจะถูกลบ จากนั้นมีบางกรณีที่ไฟล์ถูกล็อคอย่างแท้จริงแล้วคุณก็โชคไม่ดีเพราะคุณไม่สามารถลบไฟล์เหล่านั้นได้เว้นแต่และจนกว่าคุณจะฆ่ากระบวนการที่ล็อกไฟล์เหล่านั้น หากคุณอยู่ในสถานการณ์ # 1 คุณสามารถลองใช้การดำเนินการลบไดเร็กทอรีจาก MSBuildCommunityTasks ล่าสุดซึ่งมีแฟล็กการลบแบบคงที่ (คุณสามารถอ่านเอกสารในเอกสารนี้ได้เนื่องจากอยู่นอกขอบเขตของเธรดนี้โดยเฉพาะ)
XDS

1
ฉันมีปัญหาที่คล้ายกัน มีกระบวนการทำงานอยู่เบื้องหลังที่เรียกว่า VSCompiler.exe หรือบางสิ่งบางอย่างเพื่อให้เกิดผลกระทบนั้น คุณสามารถลองฆ่ากระบวนการนี้ก่อนที่จะลบไดเร็กทอรีและดูว่าได้ผลหรือไม่ (ฉันคิดว่ามันจะ) ขอให้โชคดี!
XDS

31

ในการลบ bin และ obj ก่อนสร้างเพิ่มในไฟล์โครงการ:

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

นี่คือบทความ: วิธีลบ bin และ / หรือโฟลเดอร์ obj ก่อนสร้างหรือปรับใช้


3
ฉันชอบแนวคิดในการลบตัวกลางเช่นกันอย่างไรก็ตามมีผลข้างเคียงที่สำคัญในการเชื่อมต่อที่ BeforeBuild เนื่องจากจะล้างความเป็นไปได้ทั้งหมดในการสร้างส่วนเพิ่ม ในโครงการที่ต้องใช้เวลามากในการสร้างสิ่งนี้คือตัวกั้นการแสดง นอกจากนี้การล้าง dir เอาต์พุตฐานออกคุณอาจรบกวนเครื่องมือที่อาจต้องการสร้างแบบหลายเป้าหมาย / การกำหนดค่าและรวบรวมผลลัพธ์ก่อนที่จะบรรจุหีบห่อเพื่อปรับใช้ที่นี่มีเพียงบิวด์สุดท้ายที่ดำเนินการเท่านั้นที่จะอยู่รอดได้
Newtopian

22

ไซต์นี้: https://sachabarbs.wordpress.com/2014/10/24/powershell-to-clean-visual-studio-binobj-folders/ใช้คำสั่ง powershell ของ William Kempf เพื่อลบ bin และโฟลเดอร์ obj ออกจากไดเร็กทอรีปัจจุบันและ ไดเรกทอรีย่อย ควรจะเป็นไปได้ที่จะเรียกใช้จากรากของไดรฟ์

นี่คือเวอร์ชันของวิลเลียม

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

ในคำพูดของวิลเลียม:

ซึ่งจะลบไดเร็กทอรี "bin" และ "obj" ทั้งหมดในไดเร็กทอรีปัจจุบันและทุกไดเร็กทอรีย่อย มีประโยชน์อย่างยิ่งในการเรียกใช้ในไดเร็กทอรีพื้นที่ทำงานของคุณเพื่อเข้าสู่สถานะ "สะอาด" โดยเฉพาะอย่างยิ่งเมื่อมีคนทำเลอะเทอะและมีบางอย่างที่ Clean หรือสร้างใหม่ภายใน IDE ไม่สามารถตรวจจับได้

สำหรับผู้ที่คุณอ่านที่อาจไม่ทราบ PowerShell รองรับนามแฝงคำสั่งที่นี่จะถูกเขียนใหม่อีกครั้งโดยไม่ใช้นามแฝง

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

หมายเหตุ: คุณควรเก็บสิ่งนี้ไว้ในไฟล์ PowerShell และวางไฟล์นั้นไว้ที่รูทของโซลูชันของคุณ (โดยที่ไฟล์. sln อยู่) จากนั้นเรียกใช้เมื่อคุณต้องการทำความสะอาดที่เหมาะสม (ไม่ใช่เมาส์มิกกี้ที่ VisualStudio ทำ และรายงานความสำเร็จด้วย)


โปรดทราบว่าหากคุณใช้ระบบควบคุมเวอร์ชันเช่น mercurial และอยู่ในระดับไดเร็กทอรีเดียวกันกับสคริปต์นี้สคริปต์นี้จะทำให้ที่เก็บของคุณเสียหายหากคุณเก็บสิ่งใดไว้ในโฟลเดอร์ "bin" ... มิฉะนั้นจะเป็น สคริปต์ที่มีประโยชน์!
Loudenvier


4

คุณสามารถค้นหาและลบโฟลเดอร์binและobjได้อย่างง่ายดายใน Far Manager

  1. ไปที่โซลูชันของคุณแล้วกดAlt + F7
  2. ในกล่องโต้ตอบการตั้งค่าการค้นหา:

    • พิมพ์ "bin, obj"ในช่อง "A file mask or many file masks"
    • ตรวจสอบตัวเลือก "ค้นหาโฟลเดอร์"
    • กดปุ่มตกลง
  3. หลังจากการค้นหาจะทำสลับมุมมองในการ "Panel"

  4. เลือกไฟล์ทั้งหมด (ด้วย Ctrl + A) และลบโฟลเดอร์ (กด "Shift + Del")

หวังว่ามันจะช่วยใครบางคน


1
googled คำถามนี้โดยมองหาวิธีแก้ปัญหาอัตโนมัติโดยเฉพาะเพื่อหยุดทำด้วยตนเองใน FAR Manager lol
Vlad

3

ใน windows เพียงแค่เปิด explorer ไปที่โฟลเดอร์ SLN ของคุณคลิกในช่องค้นหาและพิมพ์kind: = folder; obj -> สำหรับโฟลเดอร์ obj ให้ใช้ CTRL + A และลบ 'em - เหมือนกันสำหรับ bin Done

ไม่จำเป็นต้องใช้เครื่องมือหรือซอฟต์แวร์เพิ่มเติมใด ๆ ;)


2

ไม่ได้ลบโฟลเดอร์ แต่จะลบผลพลอยได้จากการสร้าง มีเหตุผลใดที่คุณต้องการให้ลบโฟลเดอร์บิลด์จริง?


ฉันต้องการลบทุกสิ่งที่ไม่จำเป็นในการรวบรวมเพื่อที่ฉันจะได้ซิปและส่ง การมี. exes ในไฟล์ zip อาจเป็นปัญหาในการต่อต้านไวรัส
tom7

ใช่. แต่อย่างที่บอกไปว่าการสร้างผลิตภัณฑ์จะถูกลบออก นั่นหมายถึงไฟล์. obj และ. exe ไม่ใช่โฟลเดอร์จริง
Christopher

หากการอ้างอิงบางส่วนถูกลบ / ย้ายและ dll ไม่ได้ถูกอ้างอิงในโค้ดจะไม่ถูกสร้างไว้ในโฟลเดอร์ bin อีกต่อไปอย่างไรก็ตามจะไม่ได้รับการทำความสะอาด สิ่งนี้จะลงเอยด้วยโลคัลเทียบกับแอปพลิเคชันของคุณที่สร้างขึ้น แต่ล้มเหลวในทุกที่
Oli4

2

Clean จะลบไฟล์ระดับกลางและไฟล์สุดท้ายทั้งหมดที่สร้างโดยกระบวนการสร้างเช่นไฟล์. obj และไฟล์. exe หรือ. dll

อย่างไรก็ตามจะไม่ลบไดเร็กทอรีที่สร้างไฟล์เหล่านั้น ฉันไม่เห็นเหตุผลที่น่าสนใจว่าทำไมคุณต้องลบไดเรกทอรี ช่วยอธิบายเพิ่มเติมได้ไหม

หากคุณดูในไดเรกทอรีเหล่านี้ก่อนและหลัง "Clean" คุณจะเห็นผลลัพธ์ที่คอมไพล์ของคุณได้รับการล้างข้อมูล


ฉันต้องการลบไดเร็กทอรี bin และ obj เพื่อซิปทุกอย่าง
tom7

5
"Clean" ไม่ได้ลบ. exe
tom7

เพิ่งลองกับ Visual Studio 2005 ของฉันและฉันสามารถตรวจสอบได้ว่า "Clean" ได้ลบ. exe (และไฟล์อื่น ๆ ทั้งหมด)
abelenky

4
ใน Visual Studio 2010 อาจจะ ตอนนี้ฉันสามารถยืนยันได้ว่า "Clean Solution" ไม่ได้ลบ dlls ออกจากโฟลเดอร์ Debug / bin
Keith Hoffman

4
Clean จะไม่ลบไฟล์หากไม่ได้คำนวณโดยบิลด์ หากไฟล์บางไฟล์เดินทางไปยัง outdir โดยลัทธิ mecanism อื่น ๆ การล้างจะไม่ลบออก กล่าวอีกนัยหนึ่งคือเมื่อสวมหมวกของผู้จัดการฝ่ายสร้างความสะอาดจะสมบูรณ์และไร้ประโยชน์อย่างที่สุดแม้กระทั่งอันตราย
Newtopian

2

ฉันยังไม่สามารถเพิ่มความคิดเห็นได้ (ไม่มีชื่อเสียงน้อยที่สุด)
ดังนั้นฉันจึงปล่อยให้คำตอบนี้เพื่อขีดเส้นใต้ว่า:

การดำเนินการ "BeforeBuild" กับ <RemoveDir Directories="$(BaseIntermediateOutputPath)" />นั้นยอดเยี่ยม แต่สำหรับฉันแล้วมันขัดแย้งกับแบบจำลอง Entity Framework ที่รวมอยู่ในโครงการเดียวกัน

ข้อผิดพลาดที่ฉันได้รับคือ:

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

ฉันคิดว่า "edmxResourcesToembed" ถูกสร้างขึ้นก่อนที่จะดำเนินการตามเป้าหมาย "BeforeBuild"


2

จากคำตอบของ Joe ฉันได้แปลงรหัส 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

ฉันใช้VisualStudioCleanซึ่งเข้าใจง่ายและคาดเดาได้ การรู้ว่ามันทำงานอย่างไรและไฟล์อะไรที่จะลบทำให้ฉันรู้สึกโล่งใจ

ก่อนหน้านี้ฉันลองใช้VSClean (หมายเหตุ VisualStudioClean ไม่ใช่ VSClean) VSClean เป็นขั้นสูงกว่ามีการกำหนดค่ามากมายที่บางครั้งทำให้ฉันสงสัยว่าจะลบไฟล์อะไร? การกำหนดค่าผิดพลาดเพียงครั้งเดียวจะทำให้ซอร์สโค้ดของฉันสูญหาย การทดสอบว่าการกำหนดค่าจะทำงานอย่างไรจำเป็นต้องสำรองข้อมูลโครงการทั้งหมดของฉันซึ่งใช้เวลานานมากในท้ายที่สุดฉันจึงเลือก VisualStudioClean แทน

สรุป: VisualStudioClean หากคุณต้องการทำความสะอาดพื้นฐาน VSClean สำหรับสถานการณ์ที่ซับซ้อนมากขึ้น


1

นี่คือวิธีที่ฉันใช้กับไฟล์แบตช์เพื่อลบโฟลเดอร์ BIN และ OBJ ทั้งหมดแบบวนซ้ำ

  • สร้างไฟล์ว่างและตั้งชื่อว่า DeleteBinObjFolders.bat
  • คัดลอกโค้ดวางโค้ดด้านล่างลงใน DeleteBinObjFolders.bat
  • ย้ายไฟล์ DeleteBinObjFolders.bat ในโฟลเดอร์เดียวกันกับไฟล์โซลูชัน (* .sln) ของคุณ
@echo off
@echo Deleting all BIN and OBJ folders...
for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"
@echo BIN and OBJ folders successfully deleted :) Close the window.
pause > nul

0

ฉันจัดเก็บโครงการ VS ที่เสร็จแล้วโดยบันทึกเฉพาะซอร์สโค้ดเท่านั้น

ฉันลบโฟลเดอร์ BIN, DEBUG, RELEASE, OBJ, ARM และ. vs ออกจากโปรเจ็กต์ทั้งหมด

ซึ่งจะช่วยลดขนาดของโครงการได้มาก โครงการ

ต้องสร้างใหม่เมื่อดึงออกจากที่จัดเก็บ


0

เป็นเพียงภาคผนวกของคำตอบที่ดีทั้งหมดข้างต้นในกรณีที่มีคนไม่ทราบว่า VB / C # นั้นง่ายเพียงใดในการทำให้กระบวนการทั้งหมดลงไปที่ไฟล์ zip โดยอัตโนมัติ

ดังนั้นคุณเพียงแค่คว้าแอป Forms ง่ายๆจากเทมเพลต (หากคุณยังไม่มีแอปทำความสะอาด) และเพิ่มปุ่มลงไปจากนั้นคลิกเมื่อติดตั้งลงในเดสก์ท็อปของคุณโดยไม่ต้องกังวลกับการตั้งค่าพิเศษหรืออะไรมากมาย นี่คือรหัสทั้งหมดที่คุณต้องแนบไปกับปุ่ม:

Imports System.IO.Compression

Private Sub btnArchive_Click(sender As Object, e As EventArgs) Handles btnArchive.Click
    Dim src As String = "C:\Project"
    Dim dest As String = Path.Combine("D:\Archive", "Stub" & Now.ToString("yyyyMMddHHmmss") & ".zip")
    If IsProjectOpen() Then 'You don't want Visual Studio holding a lock on anything while you're deleting folders
        MsgBox("Close projects first, (expletive deleted)", vbOKOnly)
        Exit Sub
    End If
    If MsgBox("Are you sure you want to delete bin and obj folders?", vbOKCancel) = DialogResult.Cancel Then Exit Sub
    If ClearBinAndObj(src) Then ZipFile.CreateFromDirectory(src, dest)
End Sub

Public Function ClearBinAndObj(targetDir As String) As Boolean
    Dim dirstodelete As New List(Of String)
    For Each d As String In My.Computer.FileSystem.GetDirectories(targetDir, FileIO.SearchOption.SearchAllSubDirectories, "bin")
        dirstodelete.Add(d)
    Next
    For Each d As String In My.Computer.FileSystem.GetDirectories(targetDir, FileIO.SearchOption.SearchAllSubDirectories, "obj")
        dirstodelete.Add(d)
    Next
    For Each d In dirstodelete
        Try
            Directory.Delete(d, True)
        Catch ex As Exception
            If MsgBox("Error: " & ex.Message & " - OK to continue?", vbOKCancel) = MsgBoxResult.Cancel Then Return False
        End Try
    Next
    Return True
End Function

Public Function IsProjectOpen()
    For Each clsProcess As Process In Process.GetProcesses()
        If clsProcess.ProcessName.Equals("devenv") Then Return True
    Next
    Return False
End Function

สิ่งหนึ่งที่ต้องจำไว้คือการลบระบบไฟล์อาจผิดพลาดได้ง่าย รายการโปรดอย่างหนึ่งของฉันคือเมื่อฉันรู้ว่าฉันไม่สามารถลบโฟลเดอร์ได้เนื่องจากมีรายการที่สร้างโดย Visual Studio ในขณะที่เรียกใช้ด้วยสิทธิ์ระดับสูง (เพื่อที่ฉันจะได้แก้ไขข้อบกพร่องของบริการ)

ฉันจำเป็นต้องให้สิทธิ์ด้วยตนเองหรือฉันคิดว่าเรียกใช้แอพด้วยสิทธิ์ที่สูงขึ้นด้วย ไม่ว่าจะด้วยวิธีใดฉันคิดว่ามีคุณค่าบางอย่างในการใช้วิธีการที่ใช้ GUI แบบโต้ตอบผ่านสคริปต์โดยเฉพาะอย่างยิ่งเนื่องจากสิ่งนี้น่าจะเป็นสิ่งที่เสร็จสิ้นเมื่อสิ้นสุดวันอันยาวนานและคุณไม่ต้องการทราบในภายหลังว่าการสำรองข้อมูลของคุณ ไม่มีอยู่จริง ...


0

อัปเดต: Visual Studio 2019 (ล้าง [bin] และ [obj] ก่อนวางจำหน่าย) อย่างไรก็ตามฉันไม่แน่ใจว่าจำเป็นต้องลบ [obj] หรือไม่ โปรดทราบว่ามีการกำหนดค่าแพ็คเกจ nuget ไว้ด้วย คุณสามารถลบบรรทัดที่สองได้หากคุณคิดเช่นนั้น

<Target Name="PreBuild" BeforeTargets="PreBuildEvent" Condition="'$(Configuration)' == 'Release'">
  <!--remove bin-->
  <Exec Command="rd /s /q &quot;$(ProjectDir)$(BaseOutputPath)&quot; &amp;&amp; ^" />
  <!--remove obj-->
  <Exec Command="rd /s /q &quot;$(BaseIntermediateOutputPath)Release&quot;" />
</Target>

0

คำตอบนี้ดีมากฉันแค่ต้องการแสดงความคิดเห็นในส่วนสุดท้ายของคำตอบ

หมายเหตุ: คุณควรเก็บสิ่งนี้ไว้ในไฟล์ PowerShell และวางไฟล์นั้นไว้ที่รูทของโซลูชันของคุณ (โดยที่ไฟล์. sln อยู่) จากนั้นเรียกใช้เมื่อคุณต้องการทำความสะอาดที่เหมาะสม (ไม่ใช่เมาส์มิกกี้ที่ VisualStudio ทำ และรายงานความสำเร็จด้วย)

หรือคุณสามารถเพิ่มสิ่งต่อไปนี้ใน profile.ps1 ของคุณ

function CleanSolution {
    Get-ChildItem -inc bin,obj -rec | Remove-Item -rec -force
}

Set-Alias cs CleanSolution 

จากนั้นคุณสามารถใช้CleanSolutionหรือcsเพื่อเรียกใช้ ด้วยวิธีนี้คุณสามารถใช้กับโปรเจ็กต์ใดก็ได้และไม่มี. /คำนำหน้าของชื่อไฟล์


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.