asp.net - subir - publicar web visual studio 2017
Haga que MSDeploy(Visual Studio) no elimine la carpeta App_Data pero elimine todo lo demás (3)
Estoy usando el botón Publish
Visual Studio para implementar mi sitio web, y quiero una carpeta App_Data diferente en el servidor. Hay una casilla de verificación para Leave extra files on destination (do not delete)
que evita que mi carpeta App_Data se elimine, pero luego acumulará una gran cantidad de archivos vestigiales a medida que el sitio web cambie.
¿Hay alguna forma de excluir solo App_Data cuando elimina todo?
¿Ha mirado Paquete / Publicar web en la configuración del proyecto, porque puede indicarle que exluya archivos en la carpeta App_Data?
Desde mi experiencia, MsDeploySkipRules
solo se ejecutan cuando se despliegan desde la línea de comando.
Si publica desde Visual Studio a Azure (o utiliza otro método de Web Deploy), puede configurar lo siguiente al publicar.
- Eliminar archivos adicionales en el destino
- Excluir archivos de la carpeta App_Data
Cuando se selecciona "Eliminar archivos adicionales en el destino", hará una comparación entre los archivos y carpetas que está implementando y los que están en el servidor.
Tenga cuidado, puede tener problemas si tiene contenido generado por el usuario, por ejemplo, cargas. Pero esto podría solucionarse almacenando esas carpetas en una ubicación diferente, por ejemplo, almacenamiento S3 / Azure.
Se puede hacer cuando invocas msdeploy manualmente, solo agrega el siguiente parámetro:
-skip:Directory=//App_Data
Consulte Configuración de la operación de implementación web . La ruta es una expresión regular, por lo que es bastante flexible.
Si implementa usando 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).
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.
EDITAR:
Aprendí algunas cosas sobre MSDeploy desde que publiqué esta respuesta, así que pensé en actualizarla 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 omitir solo las eliminaciones (para mantener los archivos adicionales en el servidor de destino, pero agregue los nuevos y actualice los existentes):
-skip:skipaction=''Delete'',objectname=''filePath'',absolutepath=''//App_Data//.*'' -skip:skipaction=''Delete'',objectname=''dirPath'',absolutepath=''//App_Data//.*''
Esto omite las 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 guión .deploy.cmd
generado junto con el paquete. Esto hace que sea innecesario pasarlos al script a través de _MsDeployAdditionalFlags.
La regla de omisión anterior se agregará si se incluye lo siguiente en el archivo csproj
:
<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 arbitrarios; se supone que $(_Escaped_PackageTempDir)
posiblemente sean necesarios, pero en la práctica siempre lo he visto evaluar en una cadena vacía)
Consulte Implementación web: Personalización de un paquete de implementación y Cómo establecer la configuración de MSDeploy en el archivo .csproj para obtener más información.
Una advertencia: esto solo agrega esas reglas a la .deploy.cmd
comandos .deploy.cmd
, por lo que es inútil si desea usar el Administrador gráfico de IIS para la implementación de paquetes, ya que no utiliza esa secuencia de comandos (lo mismo se aplica a la implementación de VS , pero no lo he comprobado).