Cela peut être fait lorsque vous invoquez msdeploy manuellement - ajoutez simplement le paramètre suivant :
-skip:Directory=\\App_Data
Voir Paramètres de l'opération Web Deploy . Le chemin est une expression régulière, il est donc assez flexible.
Si vous effectuez un déploiement à l'aide du script généré par VS, ProjectName.deploy.cmd, vous pouvez également passer ce paramètre dans la variable d'environnement _MsDeployAdditionalFlags (lors de l'exécution de ce script).
C'est ce que j'ai trouvé de mieux pour nos besoins (nous avons une situation similaire à la vôtre). Je n'ai pas essayé de l'intégrer avec le bouton Publish de VS, puisque nous déployons à partir de la ligne de commande.
EDITAR:
J'ai appris quelques choses sur MSDeploy depuis que j'ai posté cette réponse, alors j'ai pensé que je devais la mettre à jour maintenant.
Tout d'abord, la règle de saut ci-dessus saute toutes les opérations sur le chemin correspondant (App_Data). Si un contrôle plus granulaire est nécessaire, une syntaxe plus verbeuse est disponible. Par exemple, pour ignorer uniquement les suppressions (pour conserver tout fichier supplémentaire sur le serveur cible, mais ajouter tout nouveau fichier et mettre à jour les fichiers existants) :
-skip:skipaction='Delete',objectname='filePath',absolutepath='\\App_Data\\.*' -skip:skipaction='Delete',objectname='dirPath',absolutepath='\\App_Data\\.*'
Cela évite la suppression de tous les fichiers et de tous les sous-dossiers (avec tout leur contenu) dans App_Data, mais n'empêche pas les ajouts et les mises à jour.
Une autre chose utile est que les règles de saut peuvent être définies dans le fichier de projet ( .csproj
) afin qu'ils soient automatiquement inclus dans le .deploy.cmd
script généré avec le paquet. Il n'est donc pas nécessaire de les transmettre au script par le biais de _MsDeployAdditionalFlags.
La règle de saut ci-dessus sera ajoutée si l'élément suivant est inclus dans le fichier csproj
fichier :
<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>
(les noms AddCustomSkipRules
y SkipDeleteAppData
sont complètement arbitraires ; $(_Escaped_PackageTempDir)
est censé être éventuellement nécessaire, mais en pratique, j'ai toujours vu qu'il était évalué à une chaîne vide)
Voir Web Deploy : Personnalisation d'un paquet de déploiement y Comment définir les paramètres de MSDeploy dans le fichier .csproj ? pour plus d'informations.
Une mise en garde : cela n'ajoute que ces règles à la base de données de l .deploy.cmd
script, donc il est inutile si vous voulez utiliser le gestionnaire graphique IIS pour le déploiement de paquets, car il n'utilise pas ce script (il en va probablement de même pour le déploiement à partir de VS, mais je n'ai pas vérifié).