Comment Publier Web avec msbuild?
Visual Studio 2010 a une Publier de commande qui vous permet de publier votre Projet d'Application Web à un emplacement du système de fichiers. J'aimerais faire cela sur mon TeamCity serveur de build, donc j'ai besoin de le faire avec la solution coureur ou msbuild. J'ai essayé d'utiliser le Publier cible, mais je pense que cela pourrait être pour de ClickOnce:
msbuild Project.csproj /t:Publish /p:Configuration=Deploy
En gros, je veux faire exactement ce qu'est un projet de déploiement web, mais sans le complément. J'en ai besoin pour compiler le WAP, supprimer les fichiers inutiles pour l'exécution, d'effectuer toute web.config transformations, et copie le résultat dans un emplacement spécifié.
Ma Solution, basé sur Jeff Siver la réponse de
<Target Name="Deploy">
<MSBuild Projects="$(SolutionFile)"
Properties="Configuration=$(Configuration);DeployOnBuild=true;DeployTarget=Package"
ContinueOnError="false" />
<Exec Command=""$(ProjectPath)\obj$(Configuration)\Package$(ProjectName).deploy.cmd" /y /m:$(DeployServer) -enableRule:DoNotDeleteRule"
ContinueOnError="false" />
</Target>
- double possible: stackoverflow.com/questions/1162253/...
- Je suis actuellement à l'aide de Web des Projets de Déploiement dans VS 2008 (comme je l'ai mentionné dans ma réponse à cette question), mais je voudrais essayer de l'automatisation de la fonctionnalité de publication de VS 2010 à la place.
- Cette question semble utile stackoverflow.com/questions/1983575/...
- Juste une petite modification à votre script: vous êtes en utilisant $(Dossier) pour le script de déploiement, mais que vous voulez vraiment est $(ProjectDir) sinon vous vous retrouvez avec .csproj\obj
- Chasse Dossier est en fait une variable dans mon script qui contient le chemin relatif du dossier de projet, mais ProjectDir devrait également fonctionner.
- Pour info Web Déploiement Projectd sont juste MSBuild fichiers, de façon à ce que le même comportement et de ne pas les utiliser signifie simplement que vous devrez écrire le MSBuild vous-même. Si vous ne voulez pas voir en VS, puis, après que vous l'ajouter, il suffit de le retirer. PDEO prend en charge ASP.NET Compiler/Fusion laquelle je ne vois aucune mention d'une quelconque réponse ici.
- Départ avec VS2012, c'est beaucoup plus facile: stackoverflow.com/a/13947667/270348
Vous devez vous connecter pour publier un commentaire.
Je l'ai eu pour la plupart à travailler sans un custom script msbuild. Voici les TeamCity construire des paramètres de configuration:
Cette compile, l'ensemble (avec web.config de transformation), et d'enregistrer le résultat en tant qu'objets. La seule chose qui manque est la copie de la sortie vers un emplacement spécifié, mais qui pourrait être fait soit dans un autre TeamCity de configuration de la compilation avec un artefact de dépendance ou avec un script msbuild.
Mise à jour
Voici un msbuild script de compilation, l'ensemble (avec web.config de transformation), et de copier la sortie de mon serveur de test
Vous pouvez également supprimer le SolutionName et ProjectName propriétés de la PropertyGroup balise et de les transmettre à msbuild.
Mise à jour 2
Depuis que cette question n'en est toujours une bonne affaire de trafic, j'ai pensé qu'il valait la mise à jour de ma réponse avec mon script qui utilise Web Deploy (aussi connu comme MSDeploy).
Dans TeamCity, j'ai les paramètres nommés
env.Configuration
,env.ProjectName
etenv.DeployServiceUrl
. MSBuild coureur a le bâtir chemin d'accès au fichier et les paramètres sont transmis automatiquement (vous n'avez pas à spécifier dans les paramètres de ligne de Commande).Vous pouvez également l'exécuter à partir de la ligne de commande:
Package
cible dépend WebDeploy, trop:error : Package/Publish task Microsoft.Web.Publishing.Tasks.IsCleanMSDeployPackageNeeded failed to load Web Deploy assemblies. Microsoft Web Deploy is not correctly installed on this machine.
(le Mentionner puisque vous écrivez que votre deuxième mise à jour utilise WebDeploy, qui pourrait impliquer que la première serait de ne pas utiliser WebDeploy encore).En utilisant les profils de déploiement introduit dans VS 2012, vous pouvez publier avec la ligne de commande suivante:
Pour plus d'informations sur les paramètres voir ce.
Je suis venu avec une telle solution, fonctionne très bien pour moi:
Le secret de la sauce est _WPPCopyWebApplication cible.
error MSB4057: The target "_WPPCopyWebApplication" does not exist in the project
. Prendre que la partie conduit à un déploiement sans déployer tout point de vueMSBuild.exe C:\BuildAgent\work\4c7b8ac8bc7d723e\WebService.sln /p:Configuration=Release /p:OutputPath=bin /p:DeployOnBuild=True /p:DeployTarget=MSDeployPublish /p:MsDeployServiceUrl=https://204.158.674.5/msdeploy.axd /p:username=Admin /p:password=Password#321 /p:AllowUntrustedCertificate=True /p:DeployIisAppPath=Default WebSite/New /p:MSDeployPublishMethod=WMSVC
. Il me donne une erreurMSBUILD : error MSB1008: Only one project can be specified. Switch: WebSite/New
. Est-il une solution pour cela?Je ne sais pas TeamCity donc j'espère que cela peut fonctionner pour vous.
Le meilleur moyen que j'ai trouvé à faire, c'est avec MSDeploy.exe. C'est une partie de la WebDeploy projet géré par Microsoft. Vous pouvez télécharger les bits ici.
Avec WebDeploy, vous exécutez la ligne de commande
Cela fait la même chose que le VS commande Publier, copier seulement ce qui est nécessaire pour le dossier de déploiement.
Avec VisualStudio 2012 il y a un moyen de gérer objet sans publier les profils. Vous pouvez transmettre le dossier de sortie à l'aide de paramètres. Il fonctionne à la fois absolue et relative chemin dans 'publishUrl paramètre. Vous pouvez utiliser VS100COMNTOOLS, cependant, vous devez remplacer VisualStudioVersion pour utiliser l'objectif 'WebPublish" de
%ProgramFiles%\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets
. Avec VisualStudioVersion 10.0 ce script va réussir avec pas de sorties 🙂Mise à jour: j'ai réussi à utiliser cette méthode sur un serveur de build avec juste Windows SDK 7.1 installé (pas de Visual Studio 2010 et 2012 sur une machine). Mais j'ai dû suivre ces étapes pour le faire fonctionner:
Script:
trouvé deux solutions différentes qui ont travaillé de façon légèrement différente:
1. Cette solution est inspirée par la réponse du alexanderb [lien]. Malheureusement, il n'a pas de travail pour nous - certaines dll n'a pas été copié à la OutDir. Nous avons constaté que le remplacement de
ResolveReferences
avecBuild
cible résout le problème, maintenant tous les fichiers nécessaires sont copiés dans le OutDir emplacement.Inconvénient de cette solution est le fait que OutDir ne contenait pas seulement des fichiers pour les publier.
2. La première solution fonctionne bien, mais pas comme nous l'espérions. Nous avons souhaité le publier fonctionnalités qu'il est dans l'IDE de Visual Studio - c'est à dire uniquement les fichiers qui devrait être publié sera copié dans le répertoire de Sortie. Comme il a déjà été mentionné pour la première fois la solution des copies de beaucoup plus de fichiers dans le OutDir - le site pour publier est ensuite stockée dans
_PublishedWebsites/{ProjectName}
sous-dossier. La commande suivante permet de résoudre ce - que les fichiers pour publier sera copié dans un dossier. Alors maintenant, vous avez un répertoire qui peut être directement publié en comparaison avec la première solution vous permettra d'économiser de l'espace sur le disque dur.AutoParameterizationWebConfigConnectionStrings=false
paramètre permettra de garantir que les chaînes de connexion ne seront pas traitées comme des artefacts spéciaux et sera correctement généré pour plus d'informations, voir lien.Vous devez définir vos environnements
de référence et de mon blog.(désolé le post est coréen)
http://blog.naver.com/PostSearchList.nhn?SearchText=webdeploy&blogId=xyz37&x=25&y=7
Ce mon fichier de commandes
c'est mon travail de lot
publier mon site web.chauve-souris
Noter que j'ai installé Visual Studio sur le serveur pour être en mesure d'exécuter
MsBuild.exe
parce que leMsBuild.exe
dans .Net Framework dossiers ne fonctionnent pas.Pour la génération de la publier la sortie de fournir un paramètre plus.
msbuild exemple.la sln /p:publishprofile=profilename /p:deployonbuild=true /p:configuration=debug/or tout