45

Folks,VS2010 Web Pubblica versione a riga di comando del file system distribuire

In poche parole, vorrei replicare questa finestra di dialogo: alt text

E 'un progetto di Visual Studio 2010 ASP.Net MVC. Se eseguo questo comando, ottengo tutti i file che voglio, inclusi i web.configs trasformati nella directory "C: \ ToDeploy".

voglio replicare questo sulla riga di comando in modo da posso usarlo per una build ambiente QA.

Ho visto diversi articoli su come fare questo sulla riga di comando per implementa remote, ma voglio solo farlo per distribuisce file system.

So che potrei replicare questa funzionalità utilizzando compiti Nant o script rastrello, ma voglio farlo utilizzando questo meccanismo quindi non sto a ripetere me stesso.

Ho studiato questo un po ', e ho trovato questi collegamenti, ma nessuno di loro risolverlo in modo pulito:

Grazie in anticipo!

risposta

46

Ok, finalmente ho capito.

La riga di comando che vi serve è:

msbuild path/to/your/webdirectory/YourWeb.csproj /p:Configuration=Debug;DeployOnBuild=True;PackageAsSingleFile=False 

È possibile modificare in cui i risultati del progetto per l'aggiunta di una proprietà di outdir=c:\wherever\ nella/p: sezione.

questo creerà l'output a:

path/to/your/webdirectory/obj/Debug/Package/PackageTmp/ 

È quindi possibile copiare i file dalla directory sopra utilizzando qualsiasi metodo vuoi.

Ho tutto questo lavoro come un compito rubino rake usando Albacore. Sto cercando di fare tutto per poterlo davvero dare un contributo al progetto. Ma se qualcuno vuole il codice prima, fammi sapere.

Un'altra ruga che ho trovato era che stava mettendo in token Parametri nel web.config. Se non avete bisogno di questa funzione, assicuratevi di aggiungere:

/p:AutoParameterizationWebConfigConnectionStrings=false 
+0

Purtroppo, questo copia l'intero pacchetto. Penso che dovrai utilizzare MS Web Deploy per copiare solo i file modificati. – jrummell

+5

Per completezza, la proprietà OutDir deve terminare con una barra finale (errori MSBuild in caso contrario). Quindi il tuo suggerimento dovrebbe essere 'outdir = c: \ where \'. –

+0

Inoltre, invece di '/ p: DeployOnBuild = True 'si può semplicemente usare la destinazione del pacchetto:'/t: Package'. Funzionano per me, oltre a entrambi i parametri 'PackageAsSingleFile' e' AutoParameterizationWebConfigConnectionStrings' sono rispettati. –

11

ho pensato di postare un un'altra soluzione che ho trovato, ho aggiornato questa soluzione per includere un file di log.

Questo è simile a Publish a Web Application from the Command Line, ma appena ripulito e file di log aggiunto. controlla anche la fonte originale http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild

Creare un sito MSBuild_publish.bat (il nome è quello) nella root del vostro progetto di applicazione web

set msBuildDir=%WINDIR%\Microsoft.NET\Framework\v4.0.30319 
set destPath=C:\Publish\MyWebBasedApp\ 

:: clear existing publish folder 
RD /S /Q "%destPath%" 

call %msBuildDir%\msbuild.exe MyWebBasedApp.csproj "/p:Configuration=Debug;PublishDestination=%destPath%;AutoParameterizationWebConfigConnectionStrings=False" /t:PublishToFileSystem /l:FileLogger,Microsoft.Build.Engine;logfile=Manual_MSBuild_Publish_LOG.log 

set msBuildDir= 
set destPath= 

aggiornare il file di progetto di applicazione Web MyWebBasedApp.csproj aggiungendo il seguente codice XML sotto il tag <Import Project=

<Target Name="PublishToFileSystem" DependsOnTargets="PipelinePreDeployCopyAllFilesToOneFolder"> 
<Error Condition="'$(PublishDestination)'==''" Text="The PublishDestination property must be set to the intended publishing destination." /> 
    <MakeDir Condition="!Exists($(PublishDestination))" Directories="$(PublishDestination)" /> 

    <ItemGroup> 
     <PublishFiles Include="$(_PackageTempDir)\**\*.*" /> 
    </ItemGroup> 

    <Copy SourceFiles="@(PublishFiles)" DestinationFiles="@(PublishFiles->'$(PublishDestination)\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="True" /> 
</Target> 

questo funziona meglio per me rispetto ad altre soluzioni.

controllare il seguente per ulteriori informazioni:

1) http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild

2) Publish a Web Application from the Command Line

3) Build Visual Studio project through the command line

+2

Funziona molto bene – Dann

-1

Un file msbuild completo di ispirazione da CubanX

<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="Publish"> 
     <RemoveDir Directories="..\build\Release\Web\" 
        ContinueOnError="true" />   
     <MSBuild Projects="TheWebSite.csproj" 
       Targets="ResolveReferences;_CopyWebApplication" 
       Properties="Configuration=Release;WebProjectOutputDir=..\build\Release\Web;OutDir=..\build\Release\Web\bin\" 
     /> 
    </Target> 
    <Target 
     Name="Build" 
     DependsOnTargets="Publish;"> 
    </Target> 
</Project> 

In questo modo il sito web pubblicato nel Web .. \ cartella di uscita accumulo \

0

ho una soluzione per Visual Studio 2012: https://stackoverflow.com/a/15387814/2164198

Tuttavia, funziona senza Visual Studio installata a tutti! (vedi UPDATE). Non ho ancora controllato se è possibile ottenere tutte le informazioni necessarie da Visual Studio Express 2012 per l'installazione Web.

1

La mia soluzione per CCNet con la web.config trasformazione:

<tasks> 
    <msbuild> 
     <executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable> 
     <workingDirectory>E:\VersionesCC\Trunk_4\SBatz\Gertakariak_Orokorrak\GertakariakMS\Web</workingDirectory> 
     <projectFile>GertakariakMSWeb2.vbproj</projectFile> 
     <targets>Build</targets> 
     <timeout>600</timeout> 
     <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger> 
     <buildArgs> 
      /noconsolelogger /p:Configuration=Release /v:diag 
      /p:DeployOnBuild=true 
      /p:AutoParameterizationWebConfigConnectionStrings=false 
      /p:DeployTarget=Package 
      /p:_PackageTempDir=E:\Aplicaciones\GertakariakMS2\Web 
     </buildArgs> 
     </msbuild> 
</tasks> 
1

Il VS2012 e, soprattutto, è possibile fare riferimento agli attuali publish profiles on your project con msbuild 12.0, questo sarebbe equivalente a fare clic destro e pubblicare ... la selezione di un profilo di pubblicazione ("MyProfile" su questo esempio):

msbuild C:\myproject\myproject.csproj "/P:DeployOnBuild=True;PublishProfile=MyProfile" 
Problemi correlati