2009-05-02 14 views
15

Actualmente estoy en el proceso de eliminar, refactorizar y limpiar una solución de Visual Studio de tamaño medio (15 proyectos de is). La solución contiene proyectos tanto en C++ como en C#.Mover el directorio de intermedios en proyectos de C# en Visual Studio

Me gusta mantener las cosas lo más ordenadas posible en términos de salida, separando cualquier compilador creado a partir del código fuente, ya que ayuda a la subversión (está bien, puedo decir que ignore los archivos, pero aún siento que es complicado) de enloquecer.

La salida me gustaría conseguir es el siguiente:

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} 

Esto parece trivial con proyectos de C++ como se puede especificar tanto la salida y el directorio de productos intermedios. Sin embargo, con C#, al menos a través de la interfaz de usuario de Visual Studio 2008 parece imposible mover el directorio obj?

Después de hacer algo de investigación, he añadido

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

a la C# .csproj

Esto parece funcionar, algo así. Es cierto que los intermedios parecen terminar allí, pero un directorio 'obj' y debajo un directorio de configuración (por ejemplo, 'depuración') y luego un directorio 'TempPE' se crean en la ubicación anterior, todos los cuales están vacíos.

Esto no es realmente un gran problema, pero sería bueno saber la causa de este comportamiento y, si es posible, una forma de solucionarlo.

¡Gracias de antemano!

+6

Creo que * es * un gran problema, y ​​MS necesita arreglar esto. –

+0

posible duplicado de [¿Cómo configurar el directorio de salida intermedio en C#?] (Http://stackoverflow.com/questions/3311212/how-to-configure-intermediate-output-directory-in-c) –

Respuesta

2

He estado buscando una solución para este problema yo mismo, y se me ocurrió algo menos intrusivo.

Crear un archivo bat llamado "CleanSrcDir.bat" en algún lugar (i puse la mía en mi ruta del proyecto) con el siguiente contenido:

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

Después de esto, añadir algo similar a la posterior a la generación de eventos del # del proyecto C :

$(ProjectDir)CleanSrcDir.bat $(ProjectDir) 

(Esto asume que realizó su bat en el directorio del proyecto, por supuesto.) a continuación, cambiar la configuración posterior a la generación de "siempre", y ya está.

Es un poco hackish, pero seguro hace que el problema de control de versiones desaparezca.

1

Recomendaría agregar directorios que desea ignorar a una propiedad de ignorar SVN de un nivel arriba. Además, cuando realizas una confirmación inicial y no agregas directorios bin y obje, los clientes SVN no se verán afectados. En otra nota, considere colocar los archivos generados en el subdirectorio GeneratedFiles de su proyecto, y no verificar ese directorio en SVN.

+2

Todo esto son solo soluciones , pero puede encontrarlos útiles. – GregC

+0

Gracias - suficientemente útil para +1, no es suficiente para aceptar la respuesta, aún;) –

8

Si agrega las siguientes dos líneas a cada configuración de generación luego la carpeta "obj" no se crea de forma predeterminada y no hay necesidad de una acción posterior a la generación:

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

SVN/SCC ignorar las propiedades también son útiles si se desea

+0

¡Muy bien! Excepto ... VS2010 [seguirá recreando una carpeta TempPE no deseada] (http://connect.microsoft.com/VisualStudio/feedback/details/583689/temppe-folder-is-created-even-when-outputpath-intermediateoutputpath-and -baseintermediateoutputpath-are-set) ... –

+0

VS2012 no tiene este problema (creando carpeta TempPE no deseada). El único resultado es para la carpeta bin y obj especificada – flipchart

+0

Según la ayuda para "Propiedades comunes de proyecto de MSBuild" en MSDN "IntermediateOutputPath" ... "Si se invalida esta propiedad (_IntermediateOutputPath_), entonces establecer BaseIntermediateOutputPath no tiene ningún efecto ... ". De mi prueba en VS2010 esto parece ser cierto. http://msdn.microsoft.com/en-us/library/vstudio/bb629394(v=vs.110).aspx –

Cuestiones relacionadas