Replica VS2008 “Pubblica sito Web” dalla riga di comando

Sto cercando di replicare l’esatta funzionalità di questo dialogo in Visual Studio 2008 in uno script di compilazione: alt text http://sofit.miximages.com/asp.net/1osl1f.png

Questo è un sito Web ASP.NET, non un’applicazione web.

Ho consultato Google su questo argomento e ho scoperto un bel po ‘di cose che riguardano MSBuild, ma tutto ciò sembra riguardare soluzioni definite come applicazioni 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

Questo articolo sembra essere rilevante per i siti Web ASP.NET, ma trovo che sto ricevendo un errore durante il tentativo di creare utilizzando tali suggerimenti:

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

 Microsoft (R) Build Engine Versione 3.5.30729.1
 [Microsoft .NET Framework, Versione 2.0.50727.3074]
 Copyright (C) Microsoft Corporation 2007. Tutti i diritti riservati.

 Build avviato il 22/04/2009 alle 11:50:42.
 Progetto "C: \ dev \ T & A \ TAWeb.sln" sul nodo 0 (_CopyWebApplication target (s)).
   Configurazione della soluzione di costruzione "Debug | .NET".
 C: \ dev \ T & A \ TAWeb.sln: errore MSB4057: la destinazione "_CopyWebApplication" non
  esiste nel progetto.
 Progetto di costruzione completato "C: \ dev \ T & A \ TAWeb.sln" (_CopyWebApplication target (s)) -
  FALLITA.


 Build FALLITO.

 "C: \ dev \ T & A \ TAWeb.sln" (_CopyWebApplication target) (1) ->
   C: \ dev \ T & A \ TAWeb.sln: errore MSB4057: la destinazione "_CopyWebApplication" non è n
 esiste nel progetto.

 0 Avvertenza / i

 1 errore / i

 Tempo trascorso 00: 00: 00.06

La soluzione che sto cercando di pubblicare (ereditata, non mia) non ha file .csproj (dove posso importare la destinazione _CopyWebApplication da C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ v9.0 \ applicazioni web \ Microsoft.WebApplication.targets)

Forse questa è una differenza di Visual Studio 2005/2008?

Ad ogni modo, sento che sto percorrendo la strada sbagliata lì.

In sostanza, ho solo bisogno di ottenere esattamente ciò che fa il dialogo sopra, ma dalla riga di comando.

Grazie mille

Il seguente comando duplica la finestra di dialogo Pubblica sito Web con le impostazioni predefinite.

Comando per pubblicare sito Web con impostazioni predefinite

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

Riferimento

1) Vedi Contenuto della community intitolato Vuoi pubblicare un sito ma non hai Visual Studio allora … a http://msdn.microsoft.com/en-us/library/20yh9f1b(classic).aspx .

  • Microsoft Visual Studio 2005> Prompt dei comandi di Visual Studio 2005
  • Microsoft Visual Studio 2008> Prompt dei comandi di Visual Studio 2008
  • Microsoft .NET Framework SDK v2.0> Prompt dei comandi SDK

2) Vedere “Strumento di compilazione ASP.NET (Aspnet_compiler.exe)” all’indirizzo http://msdn.microsoft.com/en-us/library/ms229863.aspx .

3) Estratto da Procedura dettagliata: Distribuzione di un’applicazione Web ASP.NET tramite XCOPY all’indirizzo http://msdn.microsoft.com/en-us/library/f735abw9.aspx

In alternativa all’utilizzo dello strumento da riga di comando XCOPY, supportato da tutte le versioni di .NET Framework, è ansible utilizzare il nuovo strumento .NET Framework 2.0 disponibile in% SystemRoot% \ Microsoft.NET \ Framework \ versione 2 o successiva \ Aspnet_compiler.exe per compilare e distribuire l’applicazione Web. Per ulteriori informazioni, vedere Strumento di compilazione ASP.NET (Aspnet_compiler.exe) .

4) Estratto da Come: precompilare i siti Web ASP.NET per la distribuzione all’indirizzo http://msdn.microsoft.com/en-us/library/ms227976.aspx .

Se il tuo sito Web non è un’applicazione di Internet Information Services (IIS) e quindi non ha alcuna voce nella metabase di IIS, utilizza il seguente valore per l’opzione -v.

aspnet_compiler -p physicalOrRelativePath -v / targetPath

In questo caso, il parametro physicalOrRelativePath fa riferimento al percorso di directory completo in cui si trovano i file del sito Web o un percorso relativo alla directory corrente. L’operatore period (.) È consentito nel parametro physicalOrRelativePath. L’opzione -v specifica una radice che verrà utilizzata dal compilatore per risolvere i riferimenti root dell’applicazione (ad esempio, con l’operatore tilde (~)). Quando si specifica il valore di / per l’opzione -v, il compilatore risolverà i percorsi utilizzando il percorso fisico come root.

Penso che tu stia cercando l’attività AspNetCompiler

    

Questa combinazione “magica” fa quello che stai cercando. Ci sono voluti solo due giorni per ottenere la giusta combinazione per il mio progetto.) La chiave è includere il target _CopyWebApplication e il target ResolveReferences.

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

Aggiungi al tuo file .csproj:

        

Cambia “.. \ PreCompiledWeb” per la cartella in cui vuoi pubblicare oppure puoi specificare una variabile come: $ (OutputFolder) che puoi passare

quindi vai nella cartella della tua applicazione web e fai:

 msbuild /t:Build 

Quindi puoi copiare quei file dove vuoi usando xcopy:

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

Questo dovrebbe farlo.

Personalmente uso buildbot che esegue i comandi per me, ho dovuto creare uno script VBS che esegue il caricamento per me.

Ho installato WinSCP per fare il lavoro con ftp e quindi ho appena programmato il caricamento:

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

Per precompilare il sito web da una riga di comando, faccio quanto segue, tuttavia lo faccio sul server web piuttosto che prima di caricarlo:

 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler -p "D:\\Backedup\Web Sites\ 

Ho usato msbuild esattamente per quello che descrivi. Hai provato a impostare la proprietà in questo modo?

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

Se continua a non funzionare, fammi sapere e posso inviarti il ​​mio file bat, i calci dello script msbuild, quello svn get, il file assembly.info, il sito web e infine un http get nella home page del sito, solo per assicurarsi che sia stato creato e distribuito correttamente.

Spero che aiuti Rihan

Stavo lottando con lo stesso errore (MSB4057: l’objective “_CopyWebApplication” non esiste nel progetto.

Sì. Stavo usando un progetto di applicazione Web (non un sito Web).

Ero sconcertato perché avevo un progetto che funzionava e uno che non funzionava. Così mi sono seduto con ExamDiffPro e sono andato a lavorare confrontando i file di progetto. Quello che ho trovato è stato che la sezione di build target include in fondo i file del progetto erano diversi.

Un progetto (che funzionava) è stato creato utilizzando una versione più recente di Visual Studio. L’altro (che NON funzionava) è stato creato anni fa ed è stato aggiornato nel corso degli anni, alla versione attuale con cui sto lavorando. Il progetto aggiornato, evidentemente non è stato aggiornato con i nuovi target di build man mano che le nuove versioni di Visual Studio diventavano disponibili.

Nella parte inferiore del file di progetto che funzionava, ho trovato quanto segue:

La seconda linea di importazione NON era nel progetto che stava causando problemi.

Ho semplicemente copiato l’importazione dal file di lavoro e l’ho incollata nella relativa posizione nel file non funzionante, e viola!

Anche se questa non è una soluzione diretta al problema iniziale definito in questo thread, spero che questo aiuti alcune delle altre persone che si sono imbattute in questo thread, alla ricerca di problemi simili, solo con progetti di applicazioni Web reali.

Ecco un piccolo script PowerShell che crea una soluzione, quindi pubblica un progetto web da esso.

MSBuild è per .Net 3.5, quindi cambia in “\ v4.0 \” se necessario.

 $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" 

Il “ResolveReferences” deve venire prima di “_CopyWebApplication” altrimenti le dipendenze scompaiono.

I percorsi di esempio qui riportati si basano su:

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

L’errore che hai ricevuto (C: \ dev \ T & A \ TAWeb.sln: errore MSB4057: la destinazione “_CopyWebApplication” non esiste nel progetto) è dovuto a due problemi. Primo: il target _CopyWebApplication deve essere chiamato su un file di progetto WebApplication, non una soluzione. Secondo: un sito Web non ha un file di progetto, WebApplications ha file di progetto.

La destinazione _CopyWebApplication si applica solo alla pubblicazione di un progetto WebApplication. Utilizzare l’attività AspNetCompiler MSBuild deve essere utilizzata per pubblicare un sito Web.

Quando pubblichi un sito Web in Visual Studio 2008, la seconda riga di output è “Pre-compiling Web Site”. Le opzioni visual studio vengono visualizzate per pubblicare una mappa del sito Web direttamente sulle opzioni per AspNetCompiler e Aspnet_compiler.exe .

Anche se non sono il primo a dire “usa AspNet_compiler”, ho pensato di descrivere i motivi per cui potrebbe essere utile. In una nota a margine, penso che AspNet_compiler possa essere usato per pubblicare una webapp ma ho bisogno di fare qualche altro test.

Uso il file bat usando msbuild.exe (.net 3.5, vs 2008) per “pubblicare” il mio sito web (vbproj) in una cartella.

% 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 \

Non c’è nulla di magico nella funzione “Pubblica …” che non è ansible ricreare da solo, soprattutto dal momento che si sta prendendo di mira una condivisione di file di rete.

Al suo centro, tutto ciò che sta facendo è copiare i file da un posto all’altro. Usando NAnt, puoi eseguire questa operazione con un’attività di copia oppure puoi utilizzare un’attività exec per chiamare xcopy Se stai usando uno strumento di compilazione diverso da NAnt, sono sicuro che esiste un supporto per attività simili.

Se si desidera lasciare indietro il codice raw e le informazioni di debug, è ansible escludere i file che terminano con .cs o .pdb. Sia la copia NAnt che xcopy forniscono metodi semplici per farlo.