Répliquer 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 script de construction: alt texte http://i41.tinypic.com/1osl1f.png
C'est un ASP.NET web site , pas une web application .
j'ai googlé autour de cela et j'ai trouvé pas mal de choses impliquant MSBuild, mais tout cela semble concerner des solutions présentées comme ASP.NET Web Applications:
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
This article seems to be relevant to ASP.NET Sites Web, mais je trouve que je reçois une erreur en essayant de construire en utilisant ces suggestions:
C:devT&A>msbuild /t:_CopyWebApplication /property:OutDir=c:temptaweb /prope rty:WebProjectOutputDir=c:temptaweb 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:devT&ATAWeb.sln" on node 0 (_CopyWebApplication target(s)). Building solution configuration "Debug|.NET". C:devT&ATAWeb.sln : error MSB4057: The target "_CopyWebApplication" does not exist in the project. Done Building Project "C:devT&ATAWeb.sln" (_CopyWebApplication target(s)) -- FAILED. Build FAILED. "C:devT&ATAWeb.sln" (_CopyWebApplication target) (1) -> C:devT&ATAWeb.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 .les fichiers csproj (où je pourrais importer la cible _CopyWebApplication de C:Program fichiers (x86)MSBuildMicrosoftVisualStudiov9.0WebApplicationsMicrosoft.WebApplication.cibles)
peut-être S'agit-il D'un studio visuel 2005/2008 différence?
de toute façon, je sens que je suis sur la mauvaise voie.
essentiellement, j'ai juste besoin d'atteindre exactement ce que le ci-dessus ne dialogue, mais à partir de la ligne de commande.
Merci beaucoup
11 réponses
la commande suivante duplique la boîte de dialogue Publish Web Site 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 Community Content titré vous voulez publier un site, mais vous n'avez pas Visual Studio alors... à http://msdn.microsoft.com/en-us/library/20yh9f1b(classique).aspx .
- Microsoft Visual Studio 2005 > Visual Studio 2005 Command Prompt
- Microsoft Visual Studio 2008 > Visual Studio 2008 Command Prompt
- Microsoft .net Framework SDK v2.0 > message de commande SDK
2) Voir "ASP.NET outil de Compilation (Aspnet_compiler.exe) 1519290920" http://msdn.microsoft.com/en-us/library/ms229863.aspx .
3) extrait suivant de Walkthrough: Deploying an ASP.NET Application Web utilisant XCOPY à http://msdn.microsoft.com/en-us/library/f735abw9.aspx
comme alternative à L'utilisation de la XCOPIE outil en ligne de commande, qui est pris en charge par toutes les versions du .net Framework, vous pouvez utiliser le nouveau Framework .net 2.0 outil situé à %SystemRoot% \ Microsoft.NET\Framework\ version 2 ou plus tard \Aspnet_compiler.exe pour compiler et déployer votre site Web application. Pour en savoir plus, lisez ASP.NET outil de Compilation (Aspnet_compiler.exe) .
4) extrait suivant de Comment faire: précompiler ASP.NET Sites Web pour le déploiement à http://msdn.microsoft.com/en-us/library/ms227976.aspx .
si votre site Web n'est pas un Internet Application Services d'Information (IIS) et n'a donc aucune entrée dans L'IIS métabase, utilisé la valeur suivante pour le commutateur-v.
aspnet_compiler -p physicalOrRelativePath -v / targetPath
dans ce cas, le paramètre physicalOrRelativePath fait référence aux personnes entièrement qualifiées chemin de répertoire dans lequel le site web les fichiers sont localisés, ou un chemin relatif au courant répertoire. Période (.) l'opérateur est autorisé dans la paramètre physicalOrRelativePath. Le -v commutateur spécifie une racine que le compilateur utilisera pour résoudre application - références (pour exemple, avec l'opérateur tilde ( ~ )). Lorsque vous spécifiez la valeur de / pour le commutateur-v le compilateur résoudre les chemins en utilisant le physique chemin de la racine.
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>
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
ajouter à 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 que vous voulez publier ou vous pouvez spécifier une variable comme: $(OutputFolder) que vous pouvez passer
alors allez dans le dossier de votre webapplication et faites:
msbuild /t:Build
alors vous pouvez copier ces fichiers où vous voulez en utilisant xcopy:
xcopy "..\PreCompiledWeb\*.*" "C:\MySite\" /e
ça devrait le faire.
personnellement j'utilise buildbot qui exécute des commandes pour moi, j'ai dû créer un script VBS qui exécute le téléchargement pour moi.
j'ai installé WinSCP pour faire le ftp de travail et puis il suffit de script de 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 je le fais 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 /
j'ai utilisé msbuild pour exactement ce que vous décrivez. Avez-vous essayé de mettre la propriété comme ça?
/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 déclenche le script msbuild, qui fait le svn get, construit le assembly.info file, déploie le site web, et lance enfin 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 ça aidera Rihan
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 parce que j'avais un projet qui marchait, et un qui ne marchait pas. Je me suis donc assis avec ExamDiffPro et je me suis mis à comparer les dossiers du projet. Ce que j'ai trouvé la section de construire cible comprend au bas des dossiers de projet ont été différent.
un projet (qui fonctionnait) a été créé en utilisant une nouvelle version de Visual Studio. L'autre (qui ne fonctionnait pas) a été créé il y a des années et a été mis à jour au fil des ans, à la version actuelle avec laquelle je travaille. Le projet mis à jour, évidemment n'a pas été mis à jour avec les nouvelles cibles de construction que les nouvelles versions de Visual Studio est devenu disponible.
au bas du dossier de projet qui fonctionnait, j'ai trouvé le suivant:
<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 qui causait des problèmes.
j'ai simplement copié l'importation à partir du fichier de travail, et je l'ai collé à l'endroit relatif dans le fichier de non-travail, et viola!
bien qu'il ne s'agisse pas d'une solution directe au problème initial défini dans ce fil, j'espère que cela aide certaines des autres personnes qui ont trébuché à travers ce fil, à la recherche de problèmes similaires, seulement avec des projets D'Application web réels.
voici un petit script PowerShell qui construit une solution, puis publie un projet web à partir de celui-ci.
le MSBuild est pour .Net 3.5, alors passez à" \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 vient avant "_CopyWebApplication" autrement dépendances sont portés disparus.
les exemples de chemins donnés ici construisent à:
- C:\Project\AdminWebSite\AdminWebSite.la sln
- C:\Project\AdminWebSite\Admin.Web\Admin.Web.csproj
l'erreur que vous avez reçue (C:\dev\T&A\TAWeb.sln: erreur MSB4057: la cible "_CopyWebApplication" n'existe pas dans le projet) est due à deux problèmes. Premièrement: la cible _CopyWebApplication doit être appelée sur un fichier de projet WebApplication, pas une solution. Deuxièmement: un site web n'a pas de dossier de projet, les applications Web ont des dossiers de projet.
la cible _CopyWebApplication ne s'applique qu'à la publication d'un projet WebApplication. Utiliser la tâche MSBuild du compilateur ASPNET doit être utilisé pour publier un site web.
lorsque vous publiez un site Web dans visual studio 2008, la deuxième ligne de sortie est "pré-compilation Site web". Les options visual studio affiche pour la publication d'une carte de site Web directement aux options pour le AspNetCompiler et Aspnet_compiler.exe .
bien que je ne sois pas le PREMIER ici à dire" utilisez AspNet_compiler", j'ai pensé décrire les raisons pour lesquelles cela pourrait être utile. Sur un side note, je pense que le AspNet_compiler peut être utilisé pour publier une webapp mais j'ai besoin de faire plus de tests.
j'utilise le fichier bat en utilisant msbuild.les fichiers exe.net 3.5, vs 2008) pour "publier" mon site (vbproj) dans un dossier.
%msBuildDir % \msbuild "D:\Project1\Client\WebPresentation\ConsultaOperaciones.vbproj" / t:ResolveReferences;Rebuild /p:BuildingProject=true;OutDir=D:\Instalaciones\ultima\PublicacionWeb\OutDir\;WebProjectOutputDir=D:\Instalaciones\ultima\PublicacionWeb\WebProjectDir\
il n'y a rien de magique dans la publication..."fonctionnalité que vous ne pouvez pas recréer par vous-même, d'autant plus que vous visez un partage de fichiers réseau.
au fond, tout ce qu'il fait c'est copier vos fichiers d'un endroit à un autre. En utilisant NAnt, vous pouvez tirer cela avec un copie tâche ou vous pouvez utiliser un exec tâche pour appeler xcopie si vous utilisez un outil de construction autre que NAnt, je suis bien sûr, il y a du soutien pour des tâches similaires.
si vous voulez laisser votre code brut et vos informations de débogage derrière, vous pouvez exclure les fichiers qui se terminent par .cs ou .apb. Nant copy et xcopy offrent des moyens faciles de le faire.