2009-05-02 6 views
15

Ich bin gerade dabei, eine mittelgroße (15 ish Projekte) Visual Studio-Lösung zu strippen, zu refactoring und zu bereinigen. Die Lösung enthält Projekte in C++ und C#.Verschieben Zwischenverzeichnis für C# -Projekte in Visual Studio

Ich bin bestrebt, die Dinge so sauber wie möglich in Bezug auf die Ausgabe zu halten - trennen alles Compiler aus dem Quellcode erstellt, wie es Subversion hilft (okay, ich kann es sagen, Dateien zu ignorieren, aber ich fühle es immer noch chaotisch) vor dem Ausrasten.

Der Ausgang Ich möchte zu erreichen ist wie folgt:

SolutionDir/ 
SolutionDir/src/project1/{ Code here } 
SolutionDir/int/project1/configuration/{.obj files and other misc compiler junk here} 
SolutionDir/bin/project1/configuration/{The fun stuff goes here} 

Dies scheint trivial mit C++ Projekte, wie Sie beide die Ausgabe und das Zwischenverzeichnis angeben können. Aber mit C#, zumindest über die Visual Studio 2008 Benutzeroberfläche, scheint es unmöglich, das Verzeichnis obj zu verschieben?

Nachdem einige graben tun, habe ich

<IntermediateOutputPath>..\..\int\ProjectName\Debug\</IntermediateOutputPath> 

zum C# CSPROJ

Dies erscheint, eine Art zu arbeiten. Es ist richtig, dass die Intermediates dort zu enden scheinen, aber ein Verzeichnis 'obj' und darunter ein Konfigurationsverzeichnis (z.B. 'debug') und dann ein 'TempPE'-Verzeichnis werden am alten Ort erstellt - alle sind leer.

Das ist nicht wirklich eine große Sache, aber es wäre nett, die Ursache dieses Verhaltens und wenn möglich einen Weg zu finden, es zu beheben.

Vielen Dank im Voraus!

+6

Ich denke, es ist * eine große Sache, und MS muss das beheben. –

+0

mögliche Duplikate von [So konfigurieren Sie Zwischenausgangsverzeichnis in C#?] (Http://stackoverflow.com/questions/3311212/how-to-configure-intermediate-output-directory-in-c) –

Antwort

2

Ich habe selbst nach einer Lösung für dieses Problem gesucht und etwas weniger aufdringlich gefunden.

Erstellen Sie eine BAT-Datei namens „CleanSrcDir.bat“ irgendwo (ich meine in meinem Projektpfad platziert) mit folgendem Inhalt:

rmdir /S /Q %1obj 
SET %ERRORLEVEL%=0 

Danach, fügen Sie etwas Ähnliches wie die C# Projekt Post-Build-Ereignisse :

$(ProjectDir)CleanSrcDir.bat $(ProjectDir) 

(Dies setzt voraus, Sie bat-Datei im Projektverzeichnis, natürlich platziert.) dann die Post-Build-Einstellungen ändern zu „Always“, und du bist fertig.

Es ist ein wenig hackish, aber sicher macht das Versionskontrollproblem weg.

1

Ich würde empfehlen, Verzeichnisse, die Sie ignorieren möchten, zu einer SVN-Ignoriereigenschaft auf einer Ebene hinzuzufügen. Wenn Sie ein initiales Commit durchführen und keine bin- und obje-Verzeichnisse hinzufügen, werden SVN-Clients nicht ausflippen. Bei einer weiteren Anmerkung sollten Sie in Erwägung ziehen, generierte Dateien in das GeneratedFiles-Unterverzeichnis Ihres Projekts zu platzieren und dieses Verzeichnis nicht in SVN zu überprüfen.

+2

All dies ist nur Umgehungslösungen , aber Sie können sie hilfreich finden. – GregC

+0

Danke - hilfreich genug, um +1, nicht genug, um die Antwort zu akzeptieren, noch;) –

8

Wenn Sie die beiden folgenden Zeilen zu jedem Build-Konfiguration hinzufügen, dann die „obj“ Ordner nicht standardmäßig erstellt wird, und es besteht keine Notwendigkeit für eine Post-Build-Aktion:

<IntermediateOutputPath>Assembly\obj\Debug\</IntermediateOutputPath> 
<BaseIntermediateOutputPath>Assembly\obj\Debug\</BaseIntermediateOutputPath> 

SVN/SCC ignorieren Eigenschaften sind auch nützlich, wenn gewünscht

+0

Sehr nett! Außer ... VS2010 [wird immer wieder einen Junk TempPE-Ordner erstellen] (http://connect.microsoft.com/VisualStudio/feedback/details/583689/temppe-folder-is-created-even-when-outputpath-intermediateoutputpath-and -base intermediateoutputpath-are-set ... –

+0

VS2012 hat dieses Problem nicht (Erstellen eines Junk-TempPE-Ordners). Die einzige Ausgabe ist in den bin und obj-Ordner angegeben – flipchart

+0

Entsprechend der Hilfe für "Common MSBuild Projekteigenschaften" auf MSDN "IntermediateOutputPath" ... "Wenn diese Eigenschaft (_IntermediateOutputPath_) überschrieben wird, hat die Einstellung BaseIntermediateOutputPath keine Auswirkungen ... ". Aus meinen Tests in VS2010 scheint das der Fall zu sein. http://msdn.microsoft.com/en-us/library/vstudio/bb629394(v=vs.110).aspx –

Verwandte Themen