Si vous faites un clic droit sur un dossier, vous verrez un élément de menu "Nettoyer". J'ai supposé que cela effacerait les répertoires obj et bin… .. Cependant, à ma connaissance, cela ne fait rien. Y a-t-il un autre moyen? la totalité.
Comme d'autres ont déjà répondu, Nettoyer supprimera tous les artefacts générés par la construction. Mais cela laissera tout le reste.
Si vous avez des personnalisations dans votre projet MSBuild, cela pourrait causer des problèmes et laisser derrière vous des éléments que vous penseriez devoir supprimer.
Vous pouvez contourner ce problème avec une simple modification de votre. * Proj en ajoutant ceci quelque part vers la fin:
<Target Name="SpicNSpan"
AfterTargets="Clean">
<RemoveDir Directories="$(OUTDIR)"/>
</Target>
Ce qui supprimera tout ce qui se trouve dans votre dossier bin de la plate-forme/configuration actuelle.
------ Edit Légère évolution basée sur Réponse de Shaman ci-dessous (partagez les votes et donnez-en-en aussi)
<Target Name="SpicNSpan" AfterTargets="Clean">
<!-- Remove obj folder -->
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
<!-- Remove bin folder -->
<RemoveDir Directories="$(BaseOutputPath)" />
</Target>
---- Modifier à nouveau avec des parties de xDisruptor mais j'ai supprimé la suppression .vs car cela serait mieux servi dans un .gitignore (ou équivalent)
Mise à jour pour 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>
Il vous suggère également de rendre la tâche plus facile à déployer et à gérer si vous avez plusieurs projets à intégrer.
Si vous votez cette réponse, assurez-vous de voter également pour les deux.
Pour Visual Studio 2015, les variables MSBuild ont un peu changé:
<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>
Notez que cet extrait supprime également le dossier .vs du répertoire racine de votre solution. Vous souhaiterez peut-être commenter la ligne associée si vous estimez que la suppression du dossier .vs est excessive. Je l'ai activé parce que j'ai remarqué que dans certains projets tiers, cela posait des problèmes lorsque des fichiers en tant qu'application.config existaient dans le dossier .vs.
Addenda:
Si vous souhaitez optimiser la maintenabilité de vos solutions, vous voudrez peut-être aller plus loin et placer l'extrait de code ci-dessus dans un fichier séparé, comme suit:
<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>
Et ensuite, incluez ce fichier à la fin de chacun de vos fichiers * .csproj comme suit:
[...]
<Import Project="..\..\Tools\ExtraCleanup.targets"/>
</Project>
De cette façon, vous pouvez enrichir ou affiner votre logique de nettoyage supplémentaire de manière centralisée, au même endroit, sans avoir à modifier manuellement chaque fichier * .csproj à chaque fois que vous souhaitez apporter une amélioration.
Pour supprimer bin et obj avant la construction, ajoutez-le au fichier de projet:
<Target Name="BeforeBuild">
<!-- Remove obj folder -->
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
<!-- Remove bin folder -->
<RemoveDir Directories="$(BaseOutputPath)" />
</Target>
Voici l'article: Comment supprimer le dossier bin et/ou obj avant la compilation ou le déploiement
Si vous utilisez git et que vous avez un .gitignore
correct dans votre projet, vous pouvez
git clean -xdf --dry-run
supprimer absolument tous les fichiers de la liste .gitignore
, c’est-à-dire qu’il va nettoyer les dossiers obj
et bin
(la x
déclenche ce comportement)
Découvrez le fantastique open source de Ron Jacobs CleanProject Il s’occupe même de la compression si vous le souhaitez.
Voici le CodePlex link
Ce site: https://sachabarbs.wordpress.com/2014/10/24/powershell-to-clean-visual-studio-binobj-folders/ utilise powershell pour supprimer tous les dossiers bin et obj du répertoire en cours et sous répertoires. Il devrait être possible de l'exécuter à partir de la racine du lecteur. Voici des citations de l'article:
Voici la version de Williams
gci -inc bin,obj -rec | rm -rec -force
En propres mots de Williams
Cela efface tous les répertoires «bin» et «obj» du répertoire courant et de chaque sous-répertoire. Super utile de s’exécuter dans votre répertoire d’espace de travail pour obtenir un état «propre», en particulier lorsque quelqu'un gâche et qu’il ya quelque chose qu’un nettoyage ou une reconstruction dans IDE ne détecte pas.
Pour ceux d'entre vous qui lisez et qui ne le savent peut-être pas, PowerShell prend en charge les alias de commande. Ici, il est réécrit de nouveau sans utiliser les alias.
Get-ChildItem -inc bin,obj -rec | Remove-Item -rec -force
REMARQUE: vous devriez l'avoir stockée dans un fichier PowerShell et placer ce fichier à la racine de votre solution (où réside le fichier .sln), puis l'exécuter lorsque vous souhaitez effectuer un nettoyage correct et signale le succès aussi).
Clean supprimera tous les fichiers intermédiaires et finaux créés par le processus de génération, tels que les fichiers .obj et les fichiers .exe ou .dll.
Cependant, il ne supprime pas les répertoires dans lesquels ces fichiers sont construits ... Je ne vois pas de raison impérieuse de vouloir supprimer les répertoires .. .. Pouvez-vous expliquer davantage?
Si vous regardez à l'intérieur de ces répertoires avant et après un "nettoyage", vous devriez voir votre sortie compilée être nettoyée.
Il ne supprime pas les dossiers, mais supprime les sous-produits de construction. Y a-t-il une raison pour laquelle vous voulez que la construction réelle dossiers soit supprimée?
Je ne peux pas encore ajouter de commentaire (pas de réputation minimale atteinte)
Je laisse donc cette réponse pour souligner que:
l'action "BeforeBuild" avec <RemoveDir Directories="$(BaseIntermediateOutputPath)" />
est excellente, mais pour moi, est en conflit avec un modèle Entity Framework inclus dans le même projet.
L'erreur que je reçois est:
Error reading resource '{mymodel}.csdl' -- 'Could not find a part of the path '{myprojectpath}\obj\Release\edmxResourcesToEmbed\{mymodel}.csdl
Je suppose que "edmxResourcesToembed" est créé avant que l'action cible "BeforeBuild" soit exécutée.
Vous pouvez facilement trouver et supprimer les dossiers bin et obj dans le gestionnaire Far.
Dans le dialogue de réglage de la recherche:
Une fois la recherche terminée, basculez l’affichage sur "Panneau" .
J'espère que ça aide quelqu'un.
Voici comment je fais avec un fichier de commandes pour supprimer tous les dossiers BIN et OBJ de manière récursive.
@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
Basé sur la réponse de Joe, j'ai converti le code VB en 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);
}
}
}
}
J'utilise VisualStudioClean qui est facile à comprendre et prévisible. Savoir comment cela fonctionne et quels fichiers il va supprimer me soulage.
Auparavant j'avais essayé VSClean (notez que VisualStudioClean n'est pas VSClean), VSClean est plus avancé, il comporte de nombreuses configurations qui me font parfois me demander quels fichiers il va supprimer? Une mauvaise configuration entraînera la perte de mes codes sources. Pour tester le fonctionnement de la configuration, il est nécessaire de sauvegarder tous mes projets, ce qui prend beaucoup de temps. J'ai donc choisi VisualStudioClean.
Conclusion: VisualStudioClean si vous souhaitez un nettoyage de base, VSClean pour un scénario plus complexe.
Je stocke mes projets VS finis en enregistrant uniquement le code source.
Je supprime les dossiers BIN, DEBUG, RELEASE, OBJ, ARM et .vs de tous les projets.
Cela réduit considérablement la taille du projet. Le projet
doit être reconstruit lorsqu'il est sorti du stockage.
Juste un addendum à toutes les bonnes réponses ci-dessus au cas où quelqu'un ne réaliserait pas à quel point il est facile en VB/C # d'automatiser l'intégralité du processus jusqu'à l'archive Zip.
Il vous suffit donc de saisir une application de formulaire simple à partir des modèles (si vous ne possédez pas déjà d'application de maintenance) et de lui ajouter un bouton, puis de l'installer sur votre bureau sans vous soucier des paramètres spéciaux. C'est tout le code que vous devez attacher au bouton:
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
Une chose à garder à l'esprit est que les suppressions de système de fichiers peuvent mal tourner. L'un de mes favoris a été lorsque j'ai réalisé que je ne pouvais pas supprimer un dossier car il contenait des éléments créés par Visual Studio lors de l'exécution avec des privilèges élevés (pour pouvoir déboguer un service).
Je devais donner la permission manuellement ou, je suppose, exécuter l'application avec des privilèges élevés également. Quoi qu’il en soit, je pense que l’utilisation d’une approche interactive basée sur une interface graphique sur un script présente un intérêt particulier, d’autant plus que c’est quelque chose qui se fait à la fin d’une longue journée et que vous ne voulez pas savoir plus tard que votre sauvegarde est efficace. n'existe pas réellement ...