2009-09-29 8 views
10

En VS 2008, ¿hay alguna manera de establecer el directorio intermedio (donde van los archivos .obj, no los objetivos finales) en un proyecto de C#?Establecer directorio intermedio en C# Project

+0

+1 para una buena pregunta. Intenté hacer lo mismo por las mismas razones (no contaminar el directorio de origen con el resultado del compilador) y fallé (sin un cuadro de diálogo de advertencia de seguridad, pero eso no es aceptable para mí). –

+0

¿Alguien sabe si esta situación cambió en Visual Studio 2010/.NET4 ...? –

Respuesta

0

No lo creo. Sin embargo, puede copiar sus ejecutables, dlls, lo que sea, a otra carpeta en un evento posterior a la construcción. (Pestaña Crear eventos en Propiedades del proyecto)

6

Debe sobrescribir BaseIntermediateOutputPath msbuild var, más información al respecto here.

+1

Eso funciona en su mayor parte, pero estaba buscando una manera de configurarlo en cada proyecto, por lo que construir desde el IDE no contaminaría la carpeta de origen. Sin embargo, establecer BaseIntermediateOutputPath en el proyecto desencadena una advertencia de seguridad. Por desgracia, esto no parece posible. suspiro... –

+0

La advertencia de seguridad está allí para notificarle que ha sucedido algo fuera de lo común, puede silenciar la advertencia y no volverá a verla hasta que no cambie otra cosa. –

+2

no hay nada fuera de lo común en personalizar la ubicación de salida intermedia. Visual Studio acepta felizmente los proyectos de C++ que personalizan la ubicación de los archivos intermedios (a través de la propiedad IntDir) sin un cuadro de diálogo de advertencia de seguridad, pero hace una rabieta cuando se hace lo mismo en el proyecto de C#. –

1

Encontré una solución a esto usando Visual Studio Express 2013; Olvidé qué versión de VS presentó MSBuild, y no puedo decir con certeza si funcionará para cualquier otra versión. Pero aquí va:

En C:\Windows\Microsoft.NET\Framework hay subdirectorios correspondientes a las versiones .NET; Con VSX2013 en mi sistema, la carpeta de interés es v4.0.30319. (Esa es la versión de .NET utilizada por MSBuild, no la que estoy apuntando). Dentro de esta carpeta están los archivos .targets, que son colecciones de reglas de MSBuild.

Cerca del comienzo de Microsoft.CSharp.targets hay algunas reglas que importarán más archivos de reglas. La tercera de estas instrucciones de importación importa desde el archivo nombrado por la variable de compilación CustomBeforeMicrosoftCSharpTargets. Usted puede ser capaz de averiguar el nombre de esta leyendo las reglas, pero es más fácil añadir un paso de generación de

echo $(CustomBeforeMicrosoftCSharpTargets) 

Construir y mirar a la salida. En mi caso, la ruta completa fue

C:\Program Files (x86)\MSBuild\v12.0\Custom.Before.Microsoft.CSharp.targets 

NOTA: en mi caso, hay ya una carpeta C:\Program Files (x86)\MSBuild\12.0 pero no era v12.0.

Así (como administrador) he creado la carpeta y se coloca un archivo Custom.Before.Microsoft.CSharp.targets que tiene este aspecto:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <BaseIntermediateOutputPath>$(SolutionDir)\Build\$(MSBuildProjectName)</BaseIntermediateOutputPath> 
    </PropertyGroup> 
</Project> 

NOTA: $(ProjectName) no funciona, utilice $(MSBuildProjectName).

Cuando construí, los OBJ fueron puestos bajo un directorio de construcción en virtud de la solución, no el marco del proyecto, en un subdirectorio con la convención de nomenclatura típica: Debug o Release o x86\Debug o x64\Release.

Esto no funcionó exactamente como se deseaba: realmente quería colocar estos en %TEMP% pero la variable no se expandió, así que terminé con una carpeta de compilación en el proyecto llamado %TEMP%. Colocar la ruta expandida en la regla funcionaba bien, pero otras subcarpetas de %APPDATA% fallaron debido a problemas de permisos.

Supongo que esto se puede utilizar para configurar cualquiera de esas variables; leer los archivos predeterminados .TARGETS es una tarea ardua, pero contiene algunos comentarios útiles.

+0

Una nota más: el enfoque anterior funciona para VS CE 2017. 'CustomBeforeMicrosoftCSharpTargets' tiene un valor de' C: \ Archivos de programa (x86) \ Microsoft Visual Studio \ 2017 \ Community \ MSBuild \ v15.0', y de nuevo tuvo que crear la carpeta 'v15.0'; no se requieren cambios en el XML. –

Cuestiones relacionadas