2011-04-22 15 views
6

Problema: Quiero publicar elegantemente un sitio web de MVC con NAnt.NAnt MVC publica el sitio web

¿Simple, no? Incorrecto ... Estos son algunos de los recursos de stackoverflow que he visto. Cada uno de ellos tiene un problema ...

Stackoverflow 1: Publish WebApplication using NAnt

El resultado de éste fue que el web.config no estaba siendo transformada y archivos adicionales estaban mostrando en la papelera que se suponía que no les gustaría el entity.dll.config de todas las cosas!

Stackoverflow 2: Replicate VS2008 "Publish Web Site" from command line

Ésta va a hacer lo mismo que la solución anterior, excepto que es aún peor ... se copia todo lo de mi proyecto y lo descarga en la carpeta de publicar ... sin ¡broma!

Stackoverflow 3: MSBuild Script and VS2010 publish apply Web.config Transform

La solución aceptada se basa en la parte superior de Stackoverflow 1, pero es pura xml MSBUILD y no de NAnt XML. También solo corrige el Webconfig y aún deja esos archivos aleatorios que aparecen. También hay otra solución (no aceptada) que da pattersonc, que está muy, pero muy cerca de ser correcta pero las cadenas de conexión en el web.config están en un estado de limbo falso, dejándolo con otro web.config malo

Huelga decir que han pasado 3-4 días, más de 10 respuestas diferentes de StackOverFlow y ninguna bala de plata ... ¿No hay una solución fácil? ¿Debo cometer un pecado capital y crear una secuencia de comandos NAnt horriblemente desordenada para lograr los resultados de publicación correctos que VS2010 ofrece tan bien?

Respuesta

6

bien lo he descubierto después de casualidad en este blog, http://blogs.msdn.com/b/webdevtools/archive/2009/05/04/web-deployment-web-config-transformation.aspx

En el paso 4 en sacar arg línea de comandos que no he visto antes, /t: TransformWebConfig

Desafortunadamente, esto por sí solo no resuelve el problema Realiza la transformación, pero la transformación se encuentra en obj/Release/TransformWebConfig/transform/Web.config (obj/Release u obj/Debug u obj/YourTranformName).

Para finalmente obtener una solución decente, esto es lo que tenía que hacer.

<exec program="${exec.msbuild}" failonerror="true"> 
    <arg value="${path.sourceCode}/ProjectFolder/Project.csproj" /> 
    <arg value="/p:Configuration=Release" /> 
    <arg value="/t:ResolveReferences" /> 
    <arg value="/t:_CopyWebApplication" /> 
    <arg value="/t:TransformWebConfig" /> 
    <arg value="/p:OutDir=${path.buildFromProject}/temp/" /> 
    <arg value="/p:WebProjectOutputDir=${path.buildFromProject}/ProjectBuild/" /> 
</exec> 

<delete dir="${path.build}/temp" failonerror="true"/> 
<delete file="${path.build}/ProjectBuild/Web.config" failonerror="true"/> 
<delete file="${path.build}/ProjectBuild/Web.Debug.config" failonerror="true"/> 
<delete file="${path.build}/ProjectBuild/Web.Release.config" failonerror="true"/> 
<copy file="${path.sourceCode}/ProjectFolder/obj/Release/TransformWebConfig/transformed/Web.config" tofile="${path.build}/ProjectBuild/Web.config" /> 

en cuenta que la OutDir no es el mismo que el WebProjectOutputDir. Esta es la razón por la cual:

  • OutDir le da todo en la "solución" proyecto.
  • WebProjectOutputDir le ofrece el mínimo para el "proyecto" web (es decir, no toda la solución).

Mucho más equipaje provenía de otros proyectos en la solución que usaba OutDir que no queríamos, así que simplemente enviamos OutDir a una carpeta temporal y lo eliminamos como puede ver en los pasos anteriores. OutDir es absolutamente necesario por cierto. La construcción no funcionará si la quitas. Parece que WebProjectOutputDir funciona fuera de OutDir.

Solo hay un pequeño error con esta configuración completa. Una gran cantidad de archivos pdb faltan en la biblioteca bin. El único pdb copiado fue el del proyecto web.

Si alguien encuentra una solución de un paso con MSBuild para esto, publíquelo: P Aunque esta es una buena solución, sigue siendo 99.9999% perfecta y muy parecida a las enumeradas anteriormente. Estoy seguro de que va a haber algún pequeño matiz o paso perdido.

3

Después de comprobar su solución me encontré con otra solución https://stackoverflow.com/a/2953376/662853

revisé su respuesta a usar el objetivo _WPPCopyWebApplication lugar:

<exec program="${exec.msbuild}" failonerror="true"> 
    <arg value="${path.sourceCode}/ProjectFolder/Project.csproj" /> 
    <arg value="/p:Configuration=Release" /> 
    <arg value="/t:ResolveReferences" /> 
    <arg value="/t:_WPPCopyWebApplication" /> 
    <arg value="/t:TransformWebConfig" /> 
    <arg value="/p:OutDir=${path.buildFromProject}/temp/" /> 
    <arg value="/p:WebProjectOutputDir=${path.buildFromProject}/ProjectBuild/" /> 
</exec> 

Después de la prueba ya no necesitaba eliminar las configuraciones y copiar el archivos transformados.

+0

wow gracias por esto! Lo verificaré para ver si soluciona mi problema y tomaré su solución como respuesta si lo hace. Tenga paciencia, sin embargo, tengo alrededor de mil cosas que hacer, así que probablemente llegue a esto en 3 semanas: P – Thirlan

+0

esto funciona muy bien para mí – AaronHS

Cuestiones relacionadas