¿Cómo puedo evitar esta estructura de carpetas de profundidad con MSDeploy al sistema de archivos utilizando MSBuild?

StackOverflow https://stackoverflow.com/questions/4193788

Pregunta

Estoy tirando de mi pelo hacia fuera sobre este tema MSBuild.

Estamos utilizando TeamCity para construir una solución con dos sitios web MVC en el mismo. Como parte de la construcción que estamos desplegando a una carpeta en el servidor de compilación. IIS puntos a esta carpeta para darnos una acumulación visible para la integración de gestión.

Aquí está el código del archivo de MSBuild que utiliza MSDeploy publicar un paquete - pero no como un archivo zip.

<Target Name="Deploy">
  <MSBuild 
    Projects="$(SolutionFile)"
    Properties="Platform=$(Platform);Configuration=$(Configuration);
    DeployOnBuild=true;
    DeployTarget=Package;
    PackageLocation=$(PackageLocation);
    PackageAsSingleFile=False;
    AutoParameterizationWebConfigConnectionStrings=False" />
</Target>

El problema aquí es que tenemos una estructura de carpetas muy profunda. He aquí un ejemplo ...

C: \ DEPLOY \ Archivos \ content \ ç_ç \ Users \ Edmond \ Documents \ Visual Studio 2008 \ CreatioGreen \ Creatio \ Código \ core \ trunk \ Sitio Web \ Sitio Web \ obj \ Release \ Package \ PackageTmp [archivos publicados]

Realmente quiero implementar en carpetas predecibles como ...

C: \ build \ [archivos publicados] sitio web C: \ [archivos publicados] construcción \ mobilewebsite

Ese es el fondo. Aquí están las preguntas específicas.

  1. ¿Estamos cometiendo un error tratar de utilizar MSDeploy a publicar en un sistema de ficheros local? Básicamente, necesitamos el equivalente de la VS2010 "publicar" característica, con transformaciones de configuración. No estamos tratando de desplegar a IIS remoto instancias o nada.

  2. ¿Hay alguna manera de hacer esto, pero especificando la carpetas publicar?

  3. He estado tratando de utilizar la tarea de MSBuild Copiar para copiar los archivos en carpetas más sensibles - pero no puedo encontrar la manera de utilizar comodines para especificar las carpetas que necesita tomar - se necesitaría algo así como ...

C:. \ FolderPackageEndsUpIn [ANYFOLDERS] \ página web [ANYFOLDERS] \ PackageTmp * *

Ayuda!

¿Fue útil?

Solución

Puede utilizar WebDeploy directamente para obtener un resultado más afinado. Por ejemplo, puede utilizar el siguiente comando para sincronización 2 carpetas directamente a la raíz de la raíz:

>"%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:dirPath=<SourceFolder> -dest:dirPath=<DestinationFolder>

O usted puede hacer WebDeploy incluye la configuración de IIS en el destino mediante el uso de proveedor de iisapp en lugar de DirPath:

>"%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:iisApp=<SourceFolderOrIISPath> -dest:iisApp=<DestinationFolderOrIISPath>

Por ejemplo, para sincronización de una carpeta simple a una nueva aplicación "newapp" bajo Sitio Web predeterminado, se llamará de esta manera:

>"%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:iisApp="d:\MyWebSite" -dest:iisApp="Default Web Site/NewApp"

A continuación, puede tener un archivo por lotes que realice sincronización / envasado llamando directamente WebDeploy y será ejecutar como un evento posterior a la generación.

Otros consejos

Si se agrega el parámetro _PackageTempDir a MSBuild se le dará el mismo resultado que haciendo publicar un local. por ejemplo.

msbuild C: \ PathToMyProj.csproj / p: Configuración = UAT; DeployOnBuild = true; PackageAsSingleFile = false; DeployTarget = paquete; _PackageTempDir = c: \ PathToMyDeploy \; AutoParameterizationWebConfigConnectionStrings = false

Este comando va a publicar todos mis archivos en c: \ PathToMyDeploy \ sin las subcarpetas locos

Hay una solución un poco escondido pero elegante.

Cuando se ejecuta una acumulación en el servidor IC compartida que podría ser difícil para empacar en el directorio c: root por razones de aislamiento. Uno podría, en última instancia prefieren para eliminar la ruta de profundidad en el propio envase.

Afortunadamente, existe una solución. Añadir una regla de sustitución en el archivo .pubxml! Lo encontré en el suplemento al interior de motor de generación ms, 2ª edición: https://www.microsoft.com/learning/en-us/book.aspx?ID=16854

También encontré en este blog: http://learnaspmvc.blogspot.se/2014/07/web-packaging-fixing-long-path-issue.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top