NAnt<msbuild> directorio de salida personalizado
(7)
Soy nuevo en NAnt y he podido crear un <target>
que
1) Elimina cualquier código de la carpeta actual
2) Exporta código nuevo desde SVN
3) Crea el código en el directorio predeterminado que es la carpeta PrecompiledWeb (es una aplicación web)
Aquí está:
<target name="export" description="export code from svn">
<delete dir="${Delete.Dir}"></delete>
<exec program="svn" commandline="export ${MySVN.Repos} ${MySVN.Dest}" />
<msbuild project="${Solution.Filename}">
<property name="Configuration" value="Release"/>
</msbuild>
</target>
Deseo especificar un directorio de salida personalizado (que no sea "PrecompiledWeb"). ¿Es esto posible y podría mostrarme la etiqueta / propiedad necesaria?
¡Gracias!
EDITAR
Gracias a Scott y Si, me estoy acercando a una solución, pero todavía no tengo nada que funcione. Sus comentarios me llevaron a este artículo sobre la propiedad de ruta de salida de MSBuild . Usando su código:
<?xml version="1.0"?>
<project name="test" default="build" basedir="." xmlns="http://nant.sf.net/schemas/nant-0.84.win32.net-1.0.xsd">
<target name="build">
<exec program="${framework::get-framework-directory(''net-3.5'')}/msbuild.exe">
<arg value="${Full.Path}/Code/MySolution.sln" />
<arg value="/p:OutputPath=${Full.Path}/Output/" />
</exec>
</target>
</project>
Esto se ejecutará con éxito; sin embargo, en mi solución, que contiene un sitio web y una biblioteca de clases, publica el dll de la biblioteca de clases en la ruta de salida especificada, pero aún publica el sitio web real en la carpeta PrecompiledWeb predeterminada.
¿Alguien tiene alguna sugerencia sobre cómo cambiar la ruta de la carpeta PrecompiledWeb de NAnt?
¡Gracias de nuevo a todos los que ayudaron!
Editar 2 solución final
Esto es lo que finalmente pude hacer funcionar (actualizado para .net 4):
<exec program="${framework::get-framework-directory(''net-4.0'')}/msbuild.exe">
<arg value="${Full.Path}/Code/MySolution.sln" />
<arg value="/t:Rebuild" />
<arg value="/t:ResolveReferences" />
<arg value="/t:_CopyWebApplication" />
<arg value="/p:OutDir=${Build.Output}bin/" />
<arg value="/p:WebProjectOutputDir=${Build.Output}" />
<arg value="/p:Configuration=Release" />
</exec>
Uno puede especificar y anular algunas de las propiedades de msbuild. Para especificar el directorio de salida, anule la propiedad OutputDir .
<target name="export" description="export code from svn">
<delete dir="${Delete.Dir}" />
<exec program="svn" commandline="export ${MySVN.Repos} ${MySVN.Dest}" />
<msbuild project="${Solution.Filename}">
<property name="Configuration" value="Release"/>
<property name="OutputDir" value="${Output.Dir}"/>
</msbuild>
</target>
Acabo de echar un vistazo rápido a un proyecto, ¿me ayuda OutputPath en lugar de OutputDir?
Otra opción podría ser un proyecto de implementación web, que me gusta porque llama a aspnet_compiler y al compilador de C #, por lo que detecta problemas que de otra forma se perderían hasta la implementación.
Una fuente de confusión es que estás mezclando dos sistemas de compilación distintos. Su objetivo NAnt está delegando todo el trabajo de averiguar cómo publicar su aplicación web en el archivo de solución, y por lo tanto, por extensión, a los archivos csproj a los que hace referencia.
Los archivos csproj son archivos MsBuild, por lo que probablemente deba buscar cómo dirigir la salida de su proyecto. Esta publicación de dave ^ 2 podría ser útil en ese tema.
Puede publicar su aplicación web donde desee con NAnt, siempre que esté publicando. Puedes hacer lo mismo con MsBuild. La causa de su dilema es que NAnt no está publicando en este caso, y está dejando que el archivo csproj determine la ubicación de su directorio web. O bien omite el archivo csproj y haga que NAnt (o MsBuild) publique el código; o modifique el archivo csproj para publicar la aplicación web donde desee; o cree una segunda ubicación para su aplicación web y publíquela allí también utilizando su herramienta de compilación.
AFAIK, esas opciones son exhaustivas.
Hmm, no sé cómo hacerlo con MSBuild en Nant, pero usando NAnt, lo he hecho previamente así:
<solution solutionfile="${build.dir}/solution.sln">
<webmap>
<map url="http://localhost/somdir/project.csproj"
path="c:/inetpub/wwwroot/somelocaldir" />
<webmap>
</solution>
Pero luego, estás usando la tarea de ''solución'' de NAnt en lugar de usar MSBuild directamente.
editar: también estoy viendo algunas opciones de msbuild; Si configura OutDir & OutputPath en el mismo valor, ¿qué ocurre?
Un script de construcción para uno de nuestros proyectos utiliza este comando para publicar una aplicación web:
msbuild.exe /t:_CopyWebApplication /p:Configuration=Release /p:OutDir=./../published/ /p:WebProjectOutputDir=./../published
(El directorio actual está configurado en el directorio de proyecto de la aplicación web en este punto, por lo que no se especifica ningún archivo .csproj. La solución completa ya se ha reconstruido anteriormente en el script).
Por el sonido de esto, WebProjectOutputDir podría ser la propiedad que necesita.
/ t: _CopyWebApplication también puede ser importante. No he usado NAnt, así que no sé si puede pasar este parámetro con la tarea msbuild. Es posible que necesite usar una tarea ejecutiva, como en este ejemplo: http://www.netomatix.com/development/wapwithnant.aspx . Este ejemplo parece reconstruir y copiar todo de una vez.
Al usar la tarea, el nombre de propiedad correcto es OutDir, no OutputDir:
<msbuild project="${Solution.Filename}">
<property name="Configuration" value="Release"/>
<property name="OutDir" value="${Output.Dir}"/>
</msbuild>
Pruebe algo como esto:
<property name="nant.settings.currentframework" value="net-3.5"/>
<msbuild project="${Solution.Filename}">
<property name="Configuration" value="Release"/>
<property name="OutDir" value="${Full.Path}/Output//"/>
<property name="WebProjectOutputDir" value="${Full.Path}/Output/Web//"/>
</msbuild>