MSDeploy sauter des règles lors de l'utilisation de MSBuild PublishProfile avec Visual Studio 2012
Je suis en train d'utiliser WebDeploy de publier un site web à l'aide personnalisée MSDeploy sauter des règles et un profil de publication enregistrées dans Visual Studio 2012.
J'ai le profil de publication de travailler à partir de la ligne de commande, mais le saut de la règle de sauter la suppression d'un dossier n'est pas de travail.
J'ai un ErrorLog
sous-dossier dans mon application web avec un web.config
fichier à l'intérieur pour régler correctement les autorisations de dossier. Sans ignorer les règles, les ErrorLog
dossier et web.config
fichier sont publiés normalement, mais tous les fichiers journaux des erreurs dans le dossier sur le serveur sont supprimés sur publier.
Erreur avec <SkipAction>Delete</SkipAction>
Quand j'ai ajouter un saut de règle à mon wpp.targets
fichier, le saut de la règle est de ne plus accepter une valeur pour le <SkipAction>
élément. Si j'ai mis <SkipAction>Delete</SkipAction>
, j'obtiens l'erreur suivante:
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.targets(4377,5): error : Web deployment task failed. (Unrecognized skip directive 'skipaction'. Must be one of the following: "objectName," "keyAttribute," "absolutePath," "xPath," "attributes.<name>.") [C:\inetpub\wwwroot\My.Website\My.Website\My.Website.csproj]
Si j'ai tout simplement omettre le <SkipAction>
élément, le ErrorLog
dossier est supprimé quand il devrait normalement être publié.
Si j'ai mis <SkipAction></SkipAction>
, encore une fois, la ErrorLog
dossier est supprimé sur publier.
Si j'ai mis <KeyAttribute>Delete</KeyAttribute>
, puis ErrorLog
et la web.config
fichier sont publiés normalement.
Ma compréhension est que pour une utilisation personnalisée sauter des règles, vous devez appeler MSBuild à partir de la ligne de commande au lieu de la publication de l'intérieur VS 2012. Je voudrais encore utiliser ma sauvé la publication de profils, cependant, et je comprends que c'est maintenant possible de VS 2012.
Mon MSBuild ligne de commande:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe My.Website.sln /p:Configuration=Release;DeployOnBuild=true;PublishProfile="Test Server - Web Deploy"
Mon.Site web.wpp.objectifs:
<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<AfterAddIisSettingAndFileContentsToSourceManifest>AddCustomSkipRules</AfterAddIisSettingAndFileContentsToSourceManifest>
</PropertyGroup>
<Target Name="AddCustomSkipRules">
<Message Text="Adding Custom Skip Rules" />
<ItemGroup>
<MsDeploySkipRules Include="SkipErrorLogFolder1">
<SkipAction></SkipAction>
<KeyAttribute>Delete</KeyAttribute>
<ObjectName>dirPath</ObjectName>
<AbsolutePath>$(_Escaped_WPPAllFilesInSingleFolder)\\ErrorLog$</AbsolutePath>
<XPath></XPath>
</MsDeploySkipRules>
</ItemGroup>
</Target>
</Project>
Ma sortie MSBuild montrant la coutume ignorer la règle, mais encore de supprimer les fichiers:
GenerateMsdeployManifestFiles:
Generate source manifest file for Web Deploy package/publish ...
AddCustomSkipRules:
Adding Custom Skip Rules
MSDeployPublish:
Start Web Deploy Publish the Application/package to http://testserver.domain.com/MSDEPLOYAGENTSERVICE ...
Starting Web deployment task from source: manifest(C:\inetpub\wwwroot\My.Website\My.Website\obj\Release\Package\My.Website.SourceManifest.xml) to Destination: auto().
Deleting filePath (MyWeb/ErrorLog\test.txt).
Updating setAcl (MyWeb/).
Updating setAcl (MyWeb/).
Updating filePath (MyWeb/ErrorLog\Web.config).
Updating filePath (MyWeb/Web.config).
Updating setAcl (MyWeb/).
Updating setAcl (MyWeb/).
Successfully executed Web deployment task.
Publish is successfully deployed.
Vous devez vous connecter pour publier un commentaire.
Edit: Il s'avère que vous avez raison: le skip est ignorée lorsqu'il est exécuté à partir de Visual Studio.
Heureusement, il existe une solution de contournement.
Ce que vous voulez, c'est ceci:
En outre, vous devez empêcher les VS de l'aide de l'INTERFACE utilisateur-tâche (ce qui semble contenir un bug concernant le saut de règles). Vous pouvez le faire en déclarant ce qui suit dans votre wpp.des cibles ou des pubxml:
J'ai testé en local et je peux confirmer qu'il fonctionne comme vous le souhaitez: le fichier supplémentaire est mis à jour mais pas de fichiers dans le répertoire sont supprimés.
SkipAction
valeur et pasKeyAttribute
élément, il ne sautez la suppression de fichiers dans laErrorLog
dossier --- c'est bon --- mais aussi saute la publication de laErrorLog\web.config
fichier --- pas bon. Pourquoi ne puis-je pas utiliser<SkipAction>Delete</SkipAction>
, comme tous les exemples sur le web show (y compris votre lien Technet)? Btw, j'ai l'impression de sauter des règles de travail seulement lors de la construction avec MSBuild.exe (a) Un test précédemment dans VS 2010, et (B) ce post<SkipAction>Delete</SkipAction>
. Et si vous spécifiez<SkipAction></SkipAction>
avec un élément vide, leErrorLog\web.config
n'est pas publié.UseMsDeployExe
avec différentsSkipAction
,ObjectName
, etAbsolutePath
valeurs, mais je n'étais pas en mesure d'atterrir sur le combo que vous avez posté. En dépit d'essayer d'imiter les autres règles d'utilisation des expressions régulières dans de Microsoft .objectifs de fichiers, il ne semble pas fonctionner avec tous les regex dans leAbsolutePath
valeur. Seulement "ErrorLog
" exactement qui semble fonctionner. Peu importe, c'est de travailler pour mon scénario.Pour référence, voici ma
.wpp.targets
fichier de travail ignorer la règle de sauter la suppression de laErrorLog
dossier et personnalisé Acl pour faire de laErrorLog
dossier accessible en écriture sur le serveur.Que de VS 2012 mise à Jour 3, cela ne fonctionne que lors de la publication avec MSBuild à partir de la ligne de commande avec le
DeployOnBuild=true;PublishProfile="Test Server - Web Deploy"
options passées à MSBuild. Cette ne de travail lors de la publication de l'intérieur VS.Une autre approche est d'éviter la
SkipAction
tag, j'ai utilisé avec succès ce programme d'installation directement à partir de VS 2013:Seul inconvénient à ce que je peux dire, c'est que, il ignore à la fois la mise à jour, supprimer et ajouter des opérations.
Après de nombreuses heures de recherche à travers le net. j'ai créé ce fichier en tant que {myprojectname}.wpp.des cibles sous le dossier racine du site. il fonctionne lors de la publication avec visual studio. les médias le dossier est ignoré. je suis avec VS 2010.
Je pense que le problème est incorrect de Cheminabsolu. Il doit être une expression régulière correspondant de fichier ou de dossier. il devrait donc être échappées. Ci-dessous est l'exemple de ce qui a fonctionné pour moi (je voulais sauter le retrait de app_offline.htm pour faire partie de livraison de déploiement plus large)
AbsolutePath
:$(_Escaped_WPPAllFilesInSingleFolder)\\ErrorLog$
, ce qui n'est pas la question. Vous avez un autreApply
valeur, qui peut être la clé, je ne sais pas, sans revenir pour tester.Fonctionne pour moi: Mon prepprod.pubxml fichier dans mon App_Data/PublishProfiles dossier dans ma solution web. Le déploiement Web ne supprime plus les fichiers de la cachefiles dossier sur webdeploy VS 2015. La première PropertyGroup a été auto-généré à l'aide de la publication web gui dans Visual Studio. J'ai ajouté la deuxième PropertyGroup, et la section Cible de commentaires précédents.
Cela a fonctionné pour moi dans vs 2015, projet de site web type: