36 votes

Reproduire VS2008 "Publier le site Web" à partir de la ligne de commande

J'essaie de reproduire la fonctionnalité exacte de ce dialogue dans Visual Studio 2008 dans un build script : alt text

Il s'agit d'un site Web ASP.NET site pas un web application .

J'ai fait des recherches sur Google et j'ai trouvé pas mal de choses impliquant MSBuild, mais tout cela semble concerner des solutions présentées comme des applications Web ASP.NET :

http://www.driebier.net/post/Using-MSBuild-to-deploy-visual-studio-2005-web-applications.aspx http://blog.donnfelker.com/post/TFS-Build-Not-Publishing-Web-Applications.aspx

Cet article semble s'appliquer aux sites Web ASP.NET, mais je constate que je reçois une erreur lorsque j'essaie de construire en utilisant ces suggestions :

C:\\dev\\T&A>msbuild /t:\_CopyWebApplication /property:OutDir=c:\\temp\\taweb\\ /prope
rty:WebProjectOutputDir=c:\\temp\\taweb\\

Microsoft (R) Build Engine Version 3.5.30729.1
\[Microsoft .NET Framework, Version 2.0.50727.3074\]
Copyright (C) Microsoft Corporation 2007. All rights reserved.

Build started 22/04/2009 11:50:42.
Project "C:\\dev\\T&A\\TAWeb.sln" on node 0 (\_CopyWebApplication target(s)).
  Building solution configuration "Debug|.NET".
C:\\dev\\T&A\\TAWeb.sln : error MSB4057: The target "\_CopyWebApplication" does not
 exist in the project.
Done Building Project "C:\\dev\\T&A\\TAWeb.sln" (\_CopyWebApplication target(s)) --
 FAILED.

Build FAILED.

"C:\\dev\\T&A\\TAWeb.sln" (\_CopyWebApplication target) (1) ->
  C:\\dev\\T&A\\TAWeb.sln : error MSB4057: The target "\_CopyWebApplication" does n
ot exist in the project.

0 Warning(s)

1 Error(s)

Time Elapsed 00:00:00.06

La solution que j'essaie de publier (héritée, pas la mienne) n'a pas de fichiers .csproj (où je pourrais importer la cible _CopyWebApplication à partir de C:\Program Fichiers (x86) \MSBuild\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets )

Peut-être s'agit-il d'une différence de Visual Studio 2005/2008 ?

Bref, j'ai l'impression de faire fausse route.

Essentiellement, j'ai juste besoin de réaliser exactement ce que fait le dialogue ci-dessus, mais à partir de la ligne de commande.

Merci beaucoup.

38voto

AMissico Points 12837

La commande suivante duplique le Publier le site Web avec les paramètres par défaut.

Commande pour Publier le site Web avec les paramètres par défaut

aspnet_compiler -nologo -v / -p "C:\WebSite1" -u "C:\TargetPath"

Référence

1) Voir Contenu communautaire intitulé Vous voulez publier un site mais vous n'avez pas Visual Studio alors... à l'adresse http://msdn.microsoft.com/en-us/library/20yh9f1b(classic).aspx .

  • Microsoft Visual Studio 2005 > Invite de commande Visual Studio 2005
  • Microsoft Visual Studio 2008 > Invite de commande Visual Studio 2008
  • Microsoft .NET Framework SDK v2.0 > Invite de commande SDK

2) Voir "Outil de compilation ASP.NET (Aspnet_compiler.exe)" à l'adresse suivante http://msdn.microsoft.com/en-us/library/ms229863.aspx .

3) Extrait suivant de Guide pratique : Déploiement d'une application Web ASP.NET à l'aide de XCOPY à l'adresse http://msdn.microsoft.com/en-us/library/f735abw9.aspx

Comme alternative à l'utilisation de l'outil de ligne de commande XCOPY qui est pris en charge par toutes les par toutes les versions de .NET Framework, vous pouvez utiliser le nouvel outil .NET Framework 2.0 situé à l'adresse %SystemRoot% \Microsoft.NET\Framework\ version 2 ou plus \Aspnet_compiler.exe pour compiler et déployer votre application Web. Pour plus d'informations, voir Outil de compilation ASP.NET (Aspnet_compiler.exe) .

4) Extrait suivant de Comment : Précompilation des sites Web ASP.NET pour le déploiement à l'adresse http://msdn.microsoft.com/en-us/library/ms227976.aspx .

Si votre site Web n'est pas une application Internet Information Services (IIS) et n'a donc pas d'entrée dans la métabase IIS utilisez la valeur suivante pour le commutateur le commutateur -v.

aspnet_compiler -p physicalOrRelativePath -v / targetPath

Dans ce cas, le paramètre paramètre physicalOrRelativePath fait référence au chemin de répertoire entièrement qualifié qualifié dans lequel les fichiers du site Web sont situés, ou un chemin relatif au répertoire actuel. L'opérateur point (.) est autorisé dans le paramètre physicalOrRelativePath. Le commutateur -v spécifie un Root que le compilateur utilisera pour résoudre les références à références à l'application-Root (par exemple, avec l'opérateur tilde (~)). Lorsque vous spécifiez la valeur de / pour le commutateur -v, le compilateur va résoudra les chemins en utilisant le chemin comme racine.

0 votes

@AMissico, devez-vous exécuter la commande aspnet_compiler manuellement ? (Je voterai votre réponse). Merci.

6voto

slf Points 15327

Je pense que vous cherchez le AspNetCompiler tâche

<Target Name="PublishToIIS" DependsOnTargets="Publish">
    <AspNetCompiler    
            VirtualPath="$(IISVirtualPath)"
            TargetPath="$(IISTargetPath)"
            PhysicalPath="$(MSBuildProjectDirectory)/trunk/InternalAppCS/Web.UI/"
            Force="true"
            Debug="$(IISDebug)"
     />

</Target>

0 votes

Hmmm, tout semble mener à aspnetcompiler en fin de compte - mais je crois comprendre que vous avez besoin d'un IIS cible avec un répertoire virtuel pour le site, bien que cela semble un peu ambigu. Je vais creuser un peu plus sur ce sujet plus tard.

0 votes

Vous pouvez publier vers n'importe quel répertoire distant sans répertoire virtuel. Je l'utilise pour mes projets MVC et je fixe simplement TargetPath à un répertoire partagé sur le serveur web.

6voto

Brad Bruce Points 4359

Cette combinaison "magique" fait ce que vous cherchez. )Il n'a fallu que deux jours pour obtenir la bonne combinaison pour mon projet). La clé est d'inclure la cible _CopyWebApplication et la cible ResolveReferences.

msbuild "/t:_CopyWebApplication;ResolveReferences;publish" /p:OutDir="C:\inetpub\wwwroot\[appname]\bin\" /p:WebProjectOutputDir="C:\inetpub\wwwroot\[appname]" c:\directory\[appname].csproj

0 votes

Désolé de commenter un article vieux de six ans, mais il semble que cela concerne les applications Web, et non les sites Web. Les applications de sites Web Visual Studio ne possèdent pas de fichier .csproj.

5voto

Ajoutez-le à votre fichier .csproj :

<Target Name="AfterBuild">
<Message Text="Copying to Deployment Dir:" />
<Copy SourceFiles="@(Content)" DestinationFolder="..\PreCompiledWeb\%(Content.RelativeDir)" />
<CreateItem Include="$(OutputPath)\*">
    <Output TaskParameter="Include" ItemName="Binaries"/>
</CreateItem>
<Copy SourceFiles="@(Binaries)" DestinationFolder="..\PreCompiledWeb\bin" />

Changement ".. \PreCompiledWeb "pour le dossier vers lequel vous voulez publier ou vous pouvez spécifier une variable comme : $(OutputFolder) que vous pouvez passer à la variable

puis allez dans le dossier de votre webapplication et faites :

msbuild /t:Build

Ensuite, vous pouvez copier ces fichiers où vous voulez en utilisant xcopy :

xcopy "..\PreCompiledWeb\*.*" "C:\MySite\" /e

Ça devrait le faire.

1 votes

Un si beau hack :-) cela sauve ma soirée !

4voto

Rihan Meij Points 1180

J'ai utilisé msbuild pour exactement ce que vous décrivez. Avez-vous essayé de définir la propriété comme ceci ?

 /property:"OutDir=c:\temp\taweb\;WebProjectOutputDir=c:\temp\taweb\"

Si cela ne fonctionne toujours pas, faites-le moi savoir et je peux vous envoyer mon fichier bat, qui lance le msbuild script, qui fait le svn get, construit le fichier assembly.info, déploie le site web, et finalement exécute un http get sur la page d'accueil du site, juste pour s'assurer qu'il a été construit et déployé correctement.

J'espère que cela vous aidera Rihan

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X