2009-05-02 15 views
15

Attualmente sono in fase di rimozione, refactoring e pulizia di una soluzione di Visual Studio di medie dimensioni (15 progetti ish). La soluzione contiene progetti sia in C++ che in C#.Spostare la directory intermedia su progetti C# in Visual Studio

Sono ansioso di mantenere le cose il più pulite possibile in termini di output, separando qualsiasi compilatore creato dal codice sorgente, in quanto aiuta la sovversione (ok, posso dire di ignorare i file, ma sento ancora che è disordinato) dall'impazzire.

L'uscita vorrei ottenere è la seguente:

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} 

Questo sembra banale con progetti C++, come si può specificare sia l'output e la directory intermedi. Tuttavia con C#, almeno attraverso l'interfaccia utente di Visual Studio 2008, sembra impossibile spostare la directory obj?

Dopo aver fatto qualche scavo, ho aggiunto

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

al C# .csproj

Questo sembra funzionare, più o meno. È vero che gli intermedi sembrano finire lì, ma una directory 'obj' e sotto una directory di configurazione (ad esempio 'debug') e quindi una directory 'TempPE' vengono creati nella vecchia posizione - che sono tutti vuoti.

Questo non è davvero un grosso problema, ma sarebbe bello sapere la causa di questo comportamento e, se possibile, un modo per risolverlo.

Grazie in anticipo!

+6

Penso che * sia * un grosso problema, e MS ha bisogno di risolvere questo problema. –

+0

possibile duplicato di [Come configurare la directory di output intermedio in C#?] (Http://stackoverflow.com/questions/3311212/how-to-configure-intermediate-output-directory-in-c) –

risposta

2

Ho cercato personalmente una soluzione per questo problema e ho trovato qualcosa di meno invadente.

Creare un file bat denominato "CleanSrcDir.bat" da qualche parte (ho messo il mio nel mio percorso del progetto) con il seguente contenuto:

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

Dopo questo, aggiungere qualcosa di simile al post-generazione eventi del C# del progetto :

$(ProjectDir)CleanSrcDir.bat $(ProjectDir) 

(Questo presuppone è posizionato il file bat nella directory del progetto, naturalmente.) quindi modificare le impostazioni di post-generazione "sempre", e il gioco è fatto.

È un po 'hacker, ma sicuramente fa andare via il problema del controllo della versione.

1

Si consiglia di aggiungere le directory che si desidera ignorare a una proprietà ignora SVN a un livello. Inoltre, quando si esegue un commit iniziale e non si aggiungono le directory bin e obje, i client SVN non saranno assurdi. In un'altra nota, considera la possibilità di collocare i file generati nella sottodirectory GeneratedFiles del tuo progetto e non di controllarla in SVN.

+2

Tutto questo è solo soluzioni alternative , ma potresti trovarli utili. – GregC

+0

Grazie - abbastanza utile per fare +1, non abbastanza per accettare la risposta, ancora;) –

8

Se si aggiungono entrambe le seguenti righe ad ogni configurazione di generazione, quindi la cartella "obj" non viene creato per impostazione predefinita e non c'è necessità di un'azione di post-generazione:

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

SVN/SCC ignore le proprietà sono anche utili se lo si desidera

+0

Molto bello! Tranne ... VS2010 [continuerà a ricreare una cartella TempPE spazzatura] (http://connect.microsoft.com/VisualStudio/feedback/details/583689/temppe-folder-is-created-even-when-outputpath-intermediateoutputpath-and -baseintermediateoutputpath-are-set) ... –

+0

VS2012 non presenta questo problema (creazione della cartella TempPE indesiderata). L'unica uscita è nella cartella bin e obj specificata – flipchart

+0

In base alla guida per "Proprietà progetto MSBuild comuni" in MSDN "IntermediateOutputPath" ... "Se questa proprietà (_IntermediateOutputPath_) viene sovrascritta, l'impostazione di BaseIntermediateOutputPath non ha alcun effetto ... ". Dai miei test su VS2010 questo sembra essere vero. http://msdn.microsoft.com/en-us/library/vstudio/bb629394(v=vs.110).aspx –

Problemi correlati