Se puede hacer cuando se invoca manualmente MSDeploy - sólo tiene que añadir el siguiente parámetro:
-skip:Directory=\\App_Data
Ver Web Deploy Operation Settings. La ruta es una expresión regular, por lo que es bastante flexible.
Si despliega utilizando el script ProjectName.deploy.cmd generado por VS, también puede pasar este parámetro en la variable de entorno _MsDeployAdditionalFlags (cuando se ejecuta ese script).
Esto es lo mejor que he encontrado para nuestras necesidades (tenemos una situación similar a la suya). No intenté integrarlo con el botón Publicar de VS, ya que lo implementamos desde la línea de comandos.
EDIT:
he aprendido algunas cosas sobre MSDeploy ya he publicado esta respuesta, por lo que pensé en actualizar ahora.
En primer lugar, la regla de omisión anterior omite cualquier operación en la ruta coincidente (App_Data). Si se necesita un control más granular, está disponible una sintaxis más detallada. Por ejemplo, para saltar sólo elimina (para mantener los archivos adicionales en el servidor de destino, además de añadir otros nuevos y actualizar los ya existentes):
-skip:skipaction='Delete',objectname='filePath',absolutepath='\\App_Data\\.*' -skip:skipaction='Delete',objectname='dirPath',absolutepath='\\App_Data\\.*'
Esto salta eliminaciones de todos los archivos y todas las subcarpetas (con todo su contenido) en App_Data, pero no evita las adiciones y actualizaciones.
Otra cosa útil es que las reglas de omisión se pueden definir en el archivo de proyecto (.csproj
) para que se incluyan automáticamente en el script .deploy.cmd
generado junto con el paquete. Esto hace que sea innecesario pasarlos al script a través de _MsDeployAdditionalFlags.
Se añadirá la regla de salto por encima de si la siguiente se incluye en csproj
archivo:
<PropertyGroup>
<OnBeforePackageUsingManifest>AddCustomSkipRules</OnBeforePackageUsingManifest>
</PropertyGroup>
<Target Name="AddCustomSkipRules">
<ItemGroup>
<MsDeploySkipRules Include="SkipDeleteAppData">
<SkipAction>Delete</SkipAction>
<ObjectName>filePath</ObjectName>
<AbsolutePath>$(_Escaped_PackageTempDir)\\App_Data\\.*</AbsolutePath>
<XPath>
</XPath>
</MsDeploySkipRules>
<MsDeploySkipRules Include="SkipDeleteAppData">
<SkipAction>Delete</SkipAction>
<ObjectName>dirPath</ObjectName>
<AbsolutePath>$(_Escaped_PackageTempDir)\\App_Data\\.*</AbsolutePath>
<XPath>
</XPath>
</MsDeploySkipRules>
</ItemGroup>
</Target>
(los nombres AddCustomSkipRules
y SkipDeleteAppData
son completamente arbitraria; $(_Escaped_PackageTempDir)
se supone que es posiblemente es necesario, pero en la práctica Siempre lo he visto evaluar en una cadena vacía)
Consulte Web Deploy: Customizing a deployment package y How to set MSDeploy settings in .csproj file para obtener más información.
Una advertencia: esto solo agrega esas reglas al script .deploy.cmd
, por lo que es inútil si desea usar el Administrador gráfico de IIS para la distribución de paquetes, ya que no usa ese script (lo mismo se aplica a la implementación desde VS, pero no lo he comprobado).
Bien, gracias por eso. –
¡Impresionante! Incluso había estado en esa página de MS y no la había encontrado. –
Para que funcione durante la implementación a través de la función "Publicar" de Visual Studio, se debe usar 'AfterAddIisSettingAndFileContentsToSourceManifest' en lugar de' OnBeforePackageUsingManifest'. Ver comentario http://blog.alanta.nl/2011/02/web-deploy-customizing-deployment.html?showComment=1314013105475#c1406362862563428999 –