Visual Studio 2010 dispose d'une commande Publier qui vous permet de publier votre projet d'application Web dans un emplacement de système de fichiers. Je voudrais le faire sur mon serveur de build TeamCity, donc je dois le faire avec le solution runner ou msbuild. J'ai essayé d'utiliser la cible de publication, mais je pense que cela pourrait être pour ClickOnce:
msbuild Project.csproj /t:Publish /p:Configuration=Deploy
Je veux essentiellement faire exactement ce que fait un projet de déploiement Web, mais sans le complément. J'en ai besoin pour compiler le WAP, supprimer tous les fichiers inutiles pour l'exécution, effectuer toutes les transformations web.config et copier la sortie vers un emplacement spécifié.
Ma solution , basée sur la réponse de Jeff Siver
<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>
Réponses:
Je l'ai fait fonctionner principalement sans script msbuild personnalisé. Voici les paramètres de configuration de build TeamCity pertinents:
Cela compilera, conditionnera (avec la transformation web.config) et enregistrera la sortie sous forme d'artefacts. La seule chose qui manque est de copier la sortie vers un emplacement spécifié, mais cela pourrait être fait dans une autre configuration de build TeamCity avec une dépendance d'artefact ou avec un script msbuild.
Mettre à jour
Voici un script msbuild qui va compiler, empaqueter (avec la transformation web.config) et copier la sortie sur mon serveur intermédiaire
Vous pouvez également supprimer les propriétés SolutionName et ProjectName de la balise PropertyGroup et les transmettre à msbuild.
Update 2
Étant donné que cette question reçoit toujours beaucoup de trafic, j'ai pensé qu'il valait la peine de mettre à jour ma réponse avec mon script actuel qui utilise Web Deploy (également connu sous le nom de MSDeploy).
Dans TeamCity, j'ai des paramètres nommés
env.Configuration
,env.ProjectName
etenv.DeployServiceUrl
. Le runner MSBuild a le chemin du fichier de construction et les paramètres sont passés automatiquement (vous n'avez pas besoin de les spécifier dans les paramètres de ligne de commande).Vous pouvez également l'exécuter à partir de la ligne de commande:
la source
Package
cible dépende également de WebDeploy: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.
(en le mentionnant puisque vous écrivez que votre deuxième mise à jour utilise WebDeploy, ce qui pourrait impliquer que la première n'utilise pas encore WebDeploy.)À l'aide des profils de déploiement introduits dans VS 2012, vous pouvez publier avec la ligne de commande suivante:
Pour plus d'informations sur les paramètres, voir ceci .
Les valeurs du
/p:VisualStudioVersion
paramètre dépendent de votre version de Visual Studio. Wikipedia a un tableau des versions de Visual Studio et de leurs versions .la source
/p:VisualStudioVersion=?
pour VS 2017?msbuild test.sln /p:DeployOnBuild=True /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl=.\build_output1\pub /p:PublishProfile=FolderProfile /p:VisualStudioVersion=11.0 /p:outdir=.\build_output1
...... Mais toujours obtenir uniquement les DLL pas tous les fichiers comme dans le dossier de publication: (`/p:VisualStudioVersion=15
. Je ne sais pas si cela est lié à votre problème de copie de fichiers.J'ai trouvé une telle solution, fonctionne très bien pour moi:
La sauce secrète est la cible _WPPCopyWebApplication.
la source
error MSB4057: The target "_WPPCopyWebApplication" does not exist in the project
. Retirer cette partie a conduit à un déploiement sans déployer de vuesMSBuild.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
. Cela me donne une erreurMSBUILD : error MSB1008: Only one project can be specified. Switch: WebSite/New
. Y a-t-il une solution à cela?Je ne connais pas TeamCity, donc j'espère que cela peut fonctionner pour vous.
La meilleure façon que j'ai trouvée pour le faire est avec MSDeploy.exe. Cela fait partie du projet WebDeploy exécuté par Microsoft. Vous pouvez télécharger les morceaux ici .
Avec WebDeploy, vous exécutez la ligne de commande
Cela fait la même chose que la commande VS Publish, en copiant uniquement les bits nécessaires dans le dossier de déploiement.
la source
Avec VisualStudio 2012, il existe un moyen de gérer subj sans publier de profils. Vous pouvez passer le dossier de sortie à l'aide de paramètres. Il fonctionne à la fois avec un chemin absolu et relatif dans le paramètre 'publishUrl'. Vous pouvez utiliser VS100COMNTOOLS, mais vous devez remplacer VisualStudioVersion pour utiliser la cible 'WebPublish' de
%ProgramFiles%\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets
. Avec VisualStudioVersion 10.0, ce script réussira sans sortie :)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:
Scénario:
la source
trouvé deux solutions différentes qui fonctionnaient de manière légèrement différente:
1. Cette solution est inspirée de la réponse d'alexanderb [link] . Malheureusement, cela n'a pas fonctionné pour nous - certaines DLL n'ont pas été copiées dans l'OutDir. Nous avons découvert que le remplacement
L'inconvénient de cette solution était le fait que OutDir ne contenait pas seulement des fichiers à publier.ResolveReferences
par laBuild
cible résout le problème - maintenant tous les fichiers nécessaires sont copiés dans l'emplacement OutDir.2. La première solution fonctionne bien mais pas comme prévu. Nous voulions avoir la fonctionnalité de publication telle qu'elle est dans Visual Studio IDE - c'est-à-dire que seuls les fichiers qui devraient être publiés seront copiés dans le répertoire de sortie. Comme cela a déjà été mentionné, la première solution copie beaucoup plus de fichiers dans OutDir - le site Web à publier est ensuite stocké dans un
_PublishedWebsites/{ProjectName}
sous-dossier. La commande suivante résout ce problème: seuls les fichiers à publier seront copiés dans le dossier souhaité. Alors maintenant, vous avez un répertoire qui peut être publié directement - en comparaison avec la première solution, vous économiserez de l'espace sur le disque dur.AutoParameterizationWebConfigConnectionStrings=false
garantira que les chaînes de connexion ne seront pas traitées comme des artefacts spéciaux et seront générées correctement - pour plus d'informations, voir le lien .la source
Vous devez définir vos environnements
et référence mon blog.
http://blog.naver.com/PostSearchList.nhn?SearchText=webdeploy&blogId=xyz37&x=25&y=7
la source
C'est mon fichier batch
la source
c'est mon lot de travail
publish-my-website.bat
Notez que j'ai installé Visual Studio sur le serveur pour pouvoir exécuter
MsBuild.exe
car lesMsBuild.exe
dossiers dans .Net Framework ne fonctionnent pas.la source
msbuild test.sln /p:DeployOnBuild=True /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl=.\build_output1\pub /p:PublishProfile=FolderProfile /p:VisualStudioVersion=11.0 /p:outdir=.\build_output1
...... Mais je n'obtiens toujours que des DLL, pas la structure de fichiers que je veux. Qu'est ce qui ne va pas avec ça? :(Vous pouvez publier la solution avec le chemin souhaité par le code ci-dessous, ici PublishInDFolder est le nom qui a le chemin où nous devons publier (nous devons le créer dans l'image ci-dessous)
Vous pouvez créer un fichier de publication comme celui-ci
Ajoutez ci-dessous 2 lignes de code dans un fichier batch (.bat)
la source
Pour générer la sortie de publication, fournissez un paramètre supplémentaire. msbuild example.sln / p: publishprofile = profilename / p: deployonbuild = true / p: configuration = debug / ou any
la source