Wie bereinige ich bin- und obj-Ordner in Visual Studio vollständig?

90

Wenn Sie mit der rechten Maustaste auf einen Ordner klicken, wird der Menüpunkt "Reinigen" angezeigt. Ich nahm an, dass dies das Verzeichnis obj und bin bereinigen (entfernen) würde. Soweit ich sehen kann, tut es jedoch nichts. Gibt es eine andere Art und Weise? (Bitte sagen Sie mir nicht, dass ich zum Windows Explorer oder zur cmd.exe gehen soll.) Ich möchte den Ordner obj und bin entfernen, damit ich das Ganze einfach komprimieren kann.

tom7
quelle

Antworten:

100

Da andere bereits geantwortet haben, entfernt Clean alle Artefakte, die vom Build generiert werden. Aber es wird alles andere zurücklassen.

Wenn Sie einige Anpassungen in Ihrem MSBuild-Projekt vorgenommen haben, kann dies zu Problemen führen und Dinge hinterlassen, von denen Sie denken, dass sie gelöscht werden sollten.

Sie können dieses Problem mit einer einfachen Änderung an Ihrem. * Proj umgehen, indem Sie dies irgendwo gegen Ende hinzufügen:

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

Dadurch wird alles in Ihrem bin-Ordner der aktuellen Plattform / Konfiguration entfernt.

------ Bearbeiten Sie die leichte Entwicklung basierend auf der Antwort von Shaman unten (teilen Sie die Stimmen und geben Sie ihm auch einige)

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

---- Bearbeiten Sie erneut mit Teilen von xDisruptor, aber ich habe die .vs-Löschung entfernt, da dies besser in einem .gitignore (oder einem gleichwertigen) bereitgestellt werden würde.

Aktualisiert für 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>

Er bietet auch einen guten Vorschlag, wie Sie die Bereitstellung und Wartung der Aufgabe vereinfachen können, wenn Sie mehrere Projekte haben, in die Sie diese Aufgabe übernehmen können.

Wenn Sie diese Antwort wählen, stimmen Sie auch beide ab.

Newtopian
quelle
16
Dies ist die beste Lösung, funktioniert, erfordert keine speziellen Werkzeuge und stellt sicher, dass jedes Teammitglied dieselbe "saubere" Methode verwendet. Warum MS Visual Studio nicht richtig bereinigt, ist mir ein Rätsel.
Rolf
1
Dies ist bei weitem die einfachste Lösung zu implementieren und erledigt die Arbeit ohne externe Plugins
Tomoguisuru
Ich bin mir nicht sicher, wie ich dieses Ziel aktivieren / aufrufen soll. Die bloße Auswahl von "Reinigen" scheint nichts zu bewirken. Wie benutze ich es?
Aliceraunsbaek
Entschuldigung, habe gerade Ihren Kommentar gesehen. Wenn Sie AfterTargets = "Clean" angeben, wird das Ziel mit dem internen Clean-Ziel für VisualStudio verknüpft. Dieses einfache Ziel stellt jedoch keinen Feedbaco für die Konsole bereit, sodass es nicht viel anderes tut, als Ihr $ (OUTDIR) aus der Existenz zu streichen. Sie können Fehlerverwaltung und Meldungen hinzufügen und ein besseres Feedback erhalten.
Newtopian
2
@Rolf Visual Studio bereinigt standardmäßig nicht "richtig", da MS den Anwendungsfall unterstützen muss, in dem N verschiedene Projekte in dasselbe Verzeichnis ausgegeben werden. Wenn das Bereinigen eines Projekts standardmäßig sein gesamtes Ausgabeverzeichnis überlastet, kann es Dateien überfallen, die in keiner Beziehung zu diesem Projekt stehen. Das Standardverhalten besteht also darin, die Dateien zu verfolgen, die tatsächlich vom Erstellungsprozess ausgegeben werden, und nur die Dateien zu löschen, die bereinigt wurden. Eine häufige Klasse von Unterbrechungen zur Bereinigungszeit wird durch das Erstellen oder Kopieren einer Datei während des Builds verursacht, ohne MSBuild anzuweisen, sie der Tracking-Liste hinzuzufügen.
Timbo
43

Wenn Sie git verwenden und ein korrektes .gitignorein Ihrem Projekt haben, können Sie

git clean -xdf --dry-run

um absolut jede Datei in der .gitignoreListe zu entfernen , dh sie wird bereinigt objund binOrdner (das xlöst dieses Verhalten aus)

Ruben Bartelink
quelle
2
Das funktioniert wunderbar. Sehr praktisch, wenn Sie
lösungsweit
@JoeHealy Anstatt zuerst zu reinigen und dann zu komprimieren, ist es möglicherweise einfacher, das Git-Archiv zu verwenden, um direkt aus dem Repo zu komprimieren.
Reinier Torenbeek
Klappt wunderbar! Dies ist die beste Antwort. Auch wenn das Projekt beispielsweise keine Quellcodeverwaltung verwendet, gilt diese Antwort weiterhin: Fügen Sie das Projekt einfach zur Quellcodeverwaltung hinzu (klicken Sie mit der rechten Maustaste auf den Lösungsnamen), und führen Sie dann den obigen Befehl git aus. Übrigens, wie benutzt man Git-Befehle in Windows? Ich musste Bash unter Ubuntu unter Windows verwenden.
Brett
@brett Interessant;) Normalerweise verwende ich GitHub für Windows zum Pflastern (obwohl ich mir ziemlich sicher bin, dass VS ein funktionierendes Rig installiert, das über die VS-Eingabeaufforderung verwendet werden kann) - mit den Einstellungen können Sie eine Shell-Anordnung auswählen (aus der ich PoshGit auswähle). . Die Verwendung von WSL ist am lehrreichsten, also ein guter Anruf!
Ruben Bartelink
2
OK. jetzt sehe ich; Der Schlüssel ist --dry-run, dies sagt Ihnen nur, was gelöscht werden soll. nice
mkb
41

Für Visual Studio 2015 haben sich die MSBuild-Variablen etwas geändert:

  <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>

Beachten Sie, dass dieses Snippet auch den Ordner .vs aus dem Stammverzeichnis Ihrer Lösung löscht. Möglicherweise möchten Sie die zugehörige Zeile auskommentieren, wenn Sie der Meinung sind, dass das Entfernen des .vs-Ordners ein Overkill ist. Ich habe es aktiviert, weil ich festgestellt habe, dass es in einigen Projekten von Drittanbietern Probleme verursacht, wenn Dateien ala application.config im Ordner .vs vorhanden sind.

Nachtrag:

Wenn Sie die Wartbarkeit Ihrer Lösungen optimieren möchten, möchten Sie möglicherweise noch einen Schritt weiter gehen und das obige Snippet wie folgt in eine separate Datei einfügen:

  <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>

Fügen Sie diese Datei dann ganz am Ende jeder Ihrer * .csproj-Dateien ein:

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

Auf diese Weise können Sie Ihre zusätzliche Bereinigungslogik zentral an einem Ort anreichern oder optimieren, ohne sich die Mühe machen zu müssen, jede einzelne * .csproj-Datei jedes Mal manuell zu bearbeiten, wenn Sie eine Verbesserung vornehmen möchten.

XDS
quelle
Gibt es eine gute Möglichkeit, alle Dateien in einem Ordner außer einem bestimmten zu löschen?
progLearner
1
@progLearner natürlich gibt es stackoverflow.com/a/10019708/863651
XDS
Genial! Vielen Dank!
progLearner
1
@progLearner Es ist eine schwierige Frage, richtig zu beantworten. Einige Dateien scheinen noch gesperrt zu sein. Wenn wir sie zwei- oder dreimal beibehalten, werden sie gelöscht. Dann gibt es Fälle, in denen Dateien tatsächlich gesperrt sind und Sie dann Pech haben, weil Sie sie erst löschen können, wenn Sie die Prozesse beenden, die sie sperren. Wenn Sie sich in Szenario 1 befinden, können Sie die Aktion zum Löschen des Verzeichnisses aus den neuesten MSBuildCommunityTasks ausführen, die über ein Flag zum dauerhaften Löschen verfügt (Sie können die Dokumente in diesem Fall lesen, da sie außerhalb des Bereichs dieses bestimmten Threads liegen)
XDS
1
Ich hatte ein ähnliches Problem. Im Hintergrund läuft ein Prozess namens VSCompiler.exe oder etwas in diesem Sinne. Sie können versuchen, diesen Prozess zuerst zu beenden, bevor Sie das Verzeichnis löschen und prüfen, ob es funktioniert (ich denke, es wird). Viel Glück, Junge!
XDS
31

So löschen Sie bin und obj vor dem Erstellen zur Projektdatei:

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

Hier ist ein Artikel: So entfernen Sie den Ordner bin und / oder obj vor dem Erstellen oder Bereitstellen

Schamane
quelle
3
Ich mag die Idee, auch die Intermediäre zu entfernen, aber das Einbinden bei BeforeBuild hat erhebliche Nebenwirkungen, da dadurch alle Möglichkeiten zur Durchführung inkrementeller Builds zunichte gemacht werden. In Projekten, deren Erstellung viel Zeit in Anspruch nimmt, ist dies ein Show-Stopper. Wenn Sie das Basisausgabeverzeichnis löschen, können Sie auch Tools stören, die Builds mit mehreren Zielen / Konfigurationen ausführen und die Ergebnisse kumulieren möchten, bevor Sie sie für die Bereitstellung verpacken. Hier bleibt nur der zuletzt durchgeführte Build erhalten.
Newtopian
20

Diese Site: https://sachabarbs.wordpress.com/2014/10/24/powershell-to-clean-visual-studio-binobj-folders/ verwendet die Powershell-Befehle von William Kempf, um alle Ordner bin und obj aus dem aktuellen Verzeichnis und zu entfernen Unterverzeichnisse. Es sollte möglich sein, es vom Stammverzeichnis des Laufwerks aus auszuführen.

Hier ist Williams Version

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

In Williams eigenen Worten:

Dadurch werden alle Verzeichnisse "bin" und "obj" im aktuellen Verzeichnis und in jedem Unterverzeichnis gelöscht. Super nützlich, um in Ihrem Arbeitsbereichsverzeichnis ausgeführt zu werden, um in einen "sauberen" Zustand zu gelangen, insbesondere wenn jemand Fehler macht und es etwas gibt, das ein Clean oder Rebuild in der IDE nicht abfängt.

Für diejenigen unter Ihnen, die dies möglicherweise nicht wissen, unterstützt PowerShell Befehls-Aliase. Hier wird es erneut geschrieben, ohne die Aliase zu verwenden

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

ANMERKUNG: Sie sollten dies in einer PowerShell-Datei speichern und diese Datei im Stammverzeichnis Ihrer Lösung ablegen (wo sich die SLN-Datei befindet). Führen Sie sie dann aus, wenn Sie eine ordnungsgemäße Bereinigung wünschen (nicht die von VisualStudio durchgeführte micky Maus). und meldet auch Erfolg).

Aran Mulholland
quelle
Beachten Sie, dass wenn Sie ein Versionskontrollsystem wie mercurial verwenden und es sich auf derselben Verzeichnisebene wie dieses Skript befindet, dieses Skript Ihr Repository beschädigt, wenn Sie etwas darauf in einem "bin" -Ordner speichern ... andernfalls ist dies ein sehr nützliches Skript!
Loudenvier
12

Schauen Sie sich Ron Jacobs fantastisches Open Source CleanProject an. Wenn Sie möchten , kümmert es sich sogar um das Zippen.

Hier ist der CodePlex- Link

Stuart
quelle
4

Sie können bin- und obj- Ordner in Far Manager leicht finden und entfernen .

  1. Navigieren Sie zu Ihrer Lösung und drücken Sie Alt + F7
  2. Im Sucheinstellungsdialog:

    • Geben Sie "bin, obj" in das Feld "Eine Dateimaske oder mehrere Dateimasken " ein.
    • Aktivieren Sie die Option "Nach Ordnern suchen".
    • Drücken Sie Enter
  3. Wechseln Sie nach Abschluss der Suche die Ansicht zu "Panel" .

  4. Wählen Sie alle Dateien aus (mit Strg + A) und löschen Sie Ordner (drücken Sie "Umschalt + Entf").

Hoffe es hilft jemandem.

Fragment
quelle
1
googelte diese Frage auf der Suche nach einer automatischen Lösung speziell, um die manuelle Ausführung in FAR Manager zu stoppen lol
Vlad
3

Öffnen Sie in Windows einfach den Explorer, navigieren Sie zu Ihrem SLN-Ordner, klicken Sie in das Suchfeld und geben Sie kind: = Ordner; obj -> für obj-Ordner STRG + A ein und löschen Sie sie - dasselbe für bin Done

Kein Werkzeug oder zusätzliche Software erforderlich;)

Al CoPaine
quelle
2

Die Ordner werden nicht entfernt, aber die erstellten Nebenprodukte werden entfernt. Gibt es einen Grund, warum Sie die eigentlichen Build- Ordner entfernen möchten ?

Christopher
quelle
Ich möchte alles entfernen, was für die Kompilierung nicht erforderlich ist, damit ich es komprimieren und senden kann. Das Vorhandensein von EXE-Dateien in ZIP-Dateien kann ein Problem für Antivirenprogramme sein.
Tom7
Ja. Aber wie gesagt, die Build- Produkte werden entfernt. Das heißt, die .obj- und .exe-Dateien. Nur nicht die eigentlichen Ordner.
Christopher
Wenn einige der Referenzen entfernt / verschoben wurden und die DLLs nicht im Code referenziert wurden, werden sie nicht mehr in die Bin-Ordner integriert, jedoch auch nicht bereinigt. Dies führt zu einem lokalen Vergleich Ihrer Anwendung, die erstellt wird, aber überall fehlschlägt.
Oli4
2

Clean entfernt alle Zwischen- und Enddateien, die durch den Erstellungsprozess erstellt wurden, z. B. OBJ-Dateien und EXE- oder DLL-Dateien.

Die Verzeichnisse, in denen diese Dateien erstellt werden, werden jedoch nicht entfernt. Ich sehe keinen zwingenden Grund, warum Sie die Verzeichnisse entfernen müssen. Kannst du es weiter erklären?

Wenn Sie vor und nach einem "Clean" in diese Verzeichnisse schauen, sollten Sie sehen, dass Ihre kompilierte Ausgabe bereinigt wird.

abelenky
quelle
Ich möchte die Verzeichnisse bin und obj entfernen, um alles zu komprimieren.
Tom7
5
"Clean" entfernt die EXE-Datei nicht.
Tom7
Ich habe es gerade mit meinem Visual Studio 2005 versucht und kann überprüfen, ob "Clean" die EXE-Datei (und alle anderen Dateien) entfernt hat.
Abelenky
4
In Visual Studio 2010 vielleicht. Im Moment kann ich bestätigen, dass eine "Clean Solution" keine DLLs aus den Debug / Bin-Ordnern entfernt.
Keith Hoffman
4
Clean löscht keine Dateien, wenn sie nicht vom Build berechnet wurden. Wenn einige Dateien durch einen anderen Mechanismus ins Outdir gelangen, werden sie durch Clean nicht gelöscht. Mit anderen Worten, wenn Sie den Hut eines Build-Managers tragen, ist sauber völlig nutzlos und sogar gefährlich.
Newtopian
2

Ich kann noch keinen Kommentar hinzufügen (kein minimaler Ruf erreicht),
daher hinterlasse ich diese Antwort, um Folgendes zu unterstreichen:

Die Aktion "BeforeBuild" mit <RemoveDir Directories="$(BaseIntermediateOutputPath)" />ist großartig, steht jedoch für mich im Widerspruch zu einem Entity Framework-Modell, das im selben Projekt enthalten ist.

Der Fehler, den ich erhalte, ist:

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

Ich nehme an, das "edmxResourcesToembed" wird erstellt, bevor die Zielaktion "BeforeBuild" ausgeführt wird.

Luca Ritossa
quelle
2

Basierend auf der Antwort von Joe habe ich den VB-Code in C # konvertiert:

/// <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);
            }
        }
    }
}
eka808
quelle
1

Ich verwende VisualStudioClean, das leicht zu verstehen und vorhersehbar ist. Zu wissen, wie es funktioniert und welche Dateien es löschen wird, erleichtert mich.

Zuvor habe ich VSClean ausprobiert (Hinweis: VisualStudioClean ist nicht VSClean). VSClean ist fortgeschrittener. Es gibt viele Konfigurationen, bei denen ich mich manchmal frage, welche Dateien gelöscht werden sollen. Eine Fehlkonfiguration führt zum Verlust meiner Quellcodes. Um zu testen, wie die Konfiguration funktioniert, müssen alle meine Projekte gesichert werden, was sehr oft dauert. Am Ende wähle ich stattdessen VisualStudioClean.

Fazit: VisualStudioClean, wenn Sie eine Grundreinigung wünschen, VSClean für ein komplexeres Szenario.

ComputerMan
quelle
1

So mache ich es mit einer Batch-Datei, um alle BIN- und OBJ-Ordner rekursiv zu löschen.

  • Erstellen Sie eine leere Datei und nennen Sie sie DeleteBinObjFolders.bat
  • Kopieren Sie den folgenden Code und fügen Sie ihn in die Datei DeleteBinObjFolders.bat ein
  • Verschieben Sie die Datei DeleteBinObjFolders.bat in denselben Ordner wie Ihre Lösungsdatei (* .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
Alper Ebicoglu
quelle
0

Ich speichere meine fertigen VS-Projekte, indem ich nur den Quellcode speichere.

Ich lösche die Ordner BIN, DEBUG, RELEASE, OBJ, ARM und .vs aus allen Projekten.

Dies reduziert die Größe des Projekts erheblich. Das Projekt

muss beim Herausziehen aus dem Lager wieder aufgebaut werden.

Pollaris
quelle
0

Nur ein Nachtrag zu allen oben genannten Antworten, falls jemand nicht weiß, wie einfach es in VB / C # ist, den gesamten Prozess bis zum Zip-Archiv zu automatisieren.

Nehmen Sie einfach eine einfache Forms-App aus den Vorlagen (falls Sie noch keine Housekeeping-App haben), fügen Sie eine Schaltfläche hinzu und installieren Sie sie mit ClickOnce auf Ihrem Desktop, ohne sich um spezielle Einstellungen oder vieles andere kümmern zu müssen. Dies ist der gesamte Code, den Sie an die Schaltfläche anhängen müssen:

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

Beachten Sie, dass das Löschen von Dateisystemen leicht schief gehen kann. Einer meiner Favoriten war, als ich feststellte, dass ich einen Ordner nicht löschen konnte, da er Elemente enthielt, die von Visual Studio erstellt wurden, während ich mit erhöhten Berechtigungen ausgeführt wurde (damit ich einen Dienst debuggen konnte).

Ich musste die Erlaubnis manuell erteilen oder die App vermutlich auch mit erhöhten Rechten ausführen. In beiden Fällen ist es meiner Meinung nach sinnvoll, einen interaktiven GUI-basierten Ansatz für ein Skript zu verwenden, zumal dies wahrscheinlich am Ende eines langen Tages erfolgt und Sie später nicht herausfinden möchten, dass Ihr Backup erstellt wurde existiert eigentlich nicht ...

saminpa
quelle
0

Update: Visual Studio 2019 (Bereinigen Sie [bin] und [obj] vor der Veröffentlichung). Ich bin mir jedoch nicht sicher, ob [obj] gelöscht werden muss. Beachten Sie, dass auch eine Nuget-Paketkonfiguration vorhanden ist. Sie können die zweite Zeile entfernen, wenn Sie dies glauben.

<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>
EINGESTEHEN
quelle