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.

4voto

Phil Hannent Points 4092

Personnellement j'utilise buildbot qui exécute des commandes pour moi, j'ai dû créer un VBS script qui effectue le téléchargement pour moi.

J'ai installé WinSCP pour faire le travail de ftp et ensuite juste scripter l'upload :

Set WshShell = CreateObject("WScript.Shell")
sCmd1 = """C:\Program Files\WinSCP\winscp.com"" <myusername> /command ""option batch on"" ""option confirm off"" ""put " & DefaultPath & strResult & "\" & DefaultFileName & " /Usr/<myuser>/" & updateType & "/" & strResult & "/"" ""exit"""

Pour précompiler le site web à partir d'une ligne de commande, je fais ce qui suit, mais sur le serveur web plutôt qu'avant de le télécharger :

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler -p "D:\<mycompany>\Backedup\Web Sites\<mysite\Root" -v /

0 votes

Ma question concerne la précompilation d'un site Web ASP.NET avant de le placer sur un serveur Web, et non le déplacement de fichiers sur un réseau.

0 votes

J'ai modifié ma réponse pour vous aider, ce n'est pas la bonne réponse mais cela peut vous donner un indice.

0 votes

Merci, j'ai l'intention de revoir l'utilisation de aspnet_compiler directement dans le courant de la semaine. Je mettrai mon post à jour avec mes expériences.

4voto

Todd W. Powers Points 21

Je me débattais avec la même erreur (MSB4057 : La cible "_CopyWebApplication" n'existe pas dans le projet.

Oui. J'utilisais un projet d'application Web (pas un site Web).

J'étais perplexe car j'avais un projet qui fonctionnait et un autre qui ne fonctionnait pas. Je me suis donc assis avec ExamDiffPro et je me suis mis à comparer les fichiers de projet. Ce que j'ai découvert, c'est que la section des inclusions de la cible de construction au bas des fichiers du projet était différente.

Un projet (qui fonctionnait) a été créé à l'aide d'une version plus récente de Visual Studio. L'autre (qui ne fonctionnait PAS) a été créé il y a plusieurs années et a été mis à niveau au fil des ans, vers la version actuelle avec laquelle je travaille. Le projet mis à niveau n'a manifestement pas été mis à niveau avec les nouvelles cibles de construction lorsque les nouvelles versions de Visual Studio sont devenues disponibles.

Au bas du fichier du projet qui fonctionnait, j'ai trouvé ce qui suit :

<Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />

<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v8.0\WebApplications\Microsoft.WebApplication.targets" />

La deuxième ligne d'importation n'était PAS dans le projet, ce qui causait des problèmes.

J'ai simplement copié l'importation depuis le fichier de travail, et je l'ai collé à l'endroit correspondant dans le fichier qui ne fonctionne pas, et voilà !

Bien qu'il ne s'agisse pas d'une solution directe au problème initial défini dans ce fil de discussion, j'espère que cela aidera certaines des autres personnes qui sont tombées sur ce fil de discussion, à la recherche de problèmes similaires, mais avec des projets d'application Web réels.

3voto

Iain Ballard Points 2266

Voici un petit script PowerShell qui construit une solution, puis publie un projet web à partir de celle-ci.

Le MSBuild est pour .Net 3.5, donc changez en " \v4.0\ "si nécessaire.

$build = "$env:windir\Microsoft.NET\Framework\v3.5\MSBuild.exe"

$SolutionPath = "C:\Projects\AdminWebSite"
$SolutionFile = "AdminWebSite.sln"
$WebProjectFile = "Admin.Web\Admin.Web.csproj"
$OutputPath = "C:\PublishedSites\Hosts\adminweb"

& $build "$SolutionPath\$SolutionFile" /t:rebuild
& $build "$SolutionPath\$WebProjectFile" "/t:ResolveReferences;_CopyWebApplication;publish" /p:OutDir="$OutputPath\bin\" /p:WebProjectOutputDir="$OutputPath"

Le "ResolveReferences" doit doit être placé avant "_CopyWebApplication", sinon les dépendances seront manquantes.

Les exemples de chemins donnés ici construisent vers :

  • C:\Project\AdminWebSite\AdminWebSite.sln
  • C:\Project\AdminWebSite\Admin.Web\Admin.Web.csproj

1 votes

Il semble que cela concerne les applications Web ASP.NET et non les sites Web ASP.NET. La distinction est que les projets de sites Web n'ont pas de fichier de projet, mais seulement un fichier de solution. C'est pourquoi cette question est délicate. Merci quand même.

1 votes

IIRC, Visual Studio crée un "faux" fichier Solution temporaire lorsqu'il construit/publie un csproj.

2voto

mcdon Points 1690

L'erreur que vous avez reçue ( C:\dev\T &A \TAWeb.sln L'erreur MSB4057 : The target "_CopyWebApplication" does not exist in the project) est due à deux problèmes. Premièrement : la cible _CopyWebApplication doit être appelée sur un fichier de projet de WebApplication, et non sur une solution. Deuxièmement : un site Web n'a pas de fichier de projet, les applications Web ont des fichiers de projet.

La cible _CopyWebApplication s'applique uniquement à la publication d'un projet de WebApplication. La tâche AspNetCompiler MSBuild doit être utilisée pour publier un site Web.

Lorsque vous publiez un site Web dans Visual Studio 2008, la deuxième ligne de la sortie est "Pre-compiling Web Site". Les options affichées par Visual Studio pour la publication d'un site web correspondent directement aux options de l'application AspNetCompiler y Aspnet_compiler.exe .

Bien que je ne sois pas le premier ici à dire "utilisez AspNet_compiler", j'ai pensé que décrire les raisons pour lesquelles cela peut être utile. D'ailleurs, je pense que le compilateur AspNet peut être utilisé pour publier une application web, mais je dois faire des tests supplémentaires.

1voto

Kiquenet Points 2772

J'utilise un fichier bat avec msbuild.exe (.net 3.5, vs 2008) pour "publier" mon site web (vbproj) dans un dossier.

%msBuildDir% \msbuild " D:\Project1\Client\WebPresentation\ConsultaOperaciones.vbproj " /t:Résoudre les références;Reconstruire /p:BuildingProject=true;OutDir=". D:\Instalaciones\ultima\PublicacionWeb\OutDir\ ;WebProjectOutputDir= D:\Instalaciones\ultima\PublicacionWeb\WebProjectDir\

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