18

Voglio sapere come pubblicare da PowerShell nello stesso modo in cui posso da Visual Studio.Come eseguire esattamente la stessa funzionalità di Pubblica all'interno di Visual Studio da PowerShell

Quando si avvia Visual Studio con il progetto MVC ad esempio; quindi fare clic con il tasto destro del mouse sul progetto e selezionare "Pubblica"; viene visualizzata una finestra di dialogo che compila alcune impostazioni nel clic di nuovo Pubblica. Spinge magicamente il tuo sito web come previsto. Crea anche un file per mantenere quelle impostazioni. projectName.Publish.xml.

Quel file è la ragione per cui voglio poterlo usare esattamente nello stesso modo. Ci sono un paio di impostazioni che potrebbero essere manipolate in PowerShell per spingere l'applicazione a più siti con configurazioni diverse.

Ho guardato "target msbuild: pubblicare", che produce solo (eseguito dalla directory che contiene il .csproj):

MSBUILD : error MSB1009: Project file does not exist. 
Switch: target:publish 

ho provato "target msbuild Projectfile: pubblicare" che produce:

MSBUILD : error MSB1008: Only one project can be specified. 
Switch: target:build 

Ho anche preso in considerazione diverse varianti di msdeploy. Non può essere così difficile !? Se è possibile fare clic con il tasto destro in studio, c'è qualcosa che svolge tale compito.

Sto iniziando a chiedermi se questo richiede una luna piena e tagliando la testa a un pollo. (Ho speso troppo tempo su questo!)

** EDIT: Ho provato il suggerimento di Lee:

msbuild target:publish Mvc.csproj 

che produce questo errore:

MSBUILD : error MSB1008: Only one project can be specified. 
Switch: Mvc.csproj 

For switch syntax, type "MSBuild /help" 

** EDIT: Da Davee di suggerimento, ho provato:

msbuild target:publish Mvc.csproj 

che produce questo errore:

0.123.516,41 mila
MSBUILD : error MSB1009: Project file does not exist. 
Switch: target:publish=PassportHealth.PatientSimple.Mvc.csproj 

Ho anche tornato alla documentazione per il target "Pubblica" (http://msdn.microsoft.com/en-us/library/ms165431.aspx), che sembra abbastanza chiaro che la sintassi è:

msbuild target:publish 

Così, dopo aver riletto più volte la mia conclusione è questa: la pubblicazione il target è per le distribuzioni con un solo clic di file .exe e non per i siti Web MVC. Ho trovato http://weblogs.asp.net/scottgu/archive/2010/09/13/automating-deployment-with-microsoft-web-deploy.aspx che parla abbastanza chiaramente di questa faccenda. Tuttavia, non vedo come utilizzare il file "publish.xml" tramite il comando msdeploy.

+3

opzioni della riga di comando in msbuild sono specificati utilizzando/opt: valore in modo da chiamare il pubblicare bersaglio si dovrebbe usare 'msbuild/t: Pubblica proj_file.csproj'. – Lee

+0

Ecco un collegamento alla panoramica MSDNU MSDN (VS2008): http://msdn.microsoft.com/en-us/library/ms171452.aspx – DaveE

risposta

20

I file projectName.publish.xml vengono utilizzati solo tramite Visual Studio per la pubblicazione One-Click. Per MSBuild, è necessario passare una serie di parametri direttamente sulla riga di comando (/ p: Param1 = valore1; Param2 = valore2; ...). Per esempio:

/p:DeployOnBuild=True /p:DeployTarget=MsDeployPublish /p:CreatePackageOnPublish=True /p:MSDeployPublishMethod=InProc /p:MSDeployServiceUrl=localhost /p:DeployIisAppPath="Default Web Site/NewOrleansJazz" /p:UserName=domain\user /p:Password=myPassword (source)

Si noti che nella finestra di anteprima VS11 (rilasciato in occasione della conferenza BUILD), v'è un nuovo file di sostituzione del projectName.publish.xml: MyPublishSettings.pubxml. Questo file è fondamentalmente una combinazione del file publish.xml e di projectName.wpp.targets in uno (ma anche di uno split per ciascun profilo invece di averli tutti salvati in publish.xml, ad esempio TestSettings.pubxml, ProductionSettings.pubxml), e può essere utilizzato da linea di comando in modo più semplice utilizzando msbuild MyProject.csproj /t:WebPublish /p:PublishProfile="myProfile"

[modifica:] un paio di note Re: informazioni nel tuo post:

  1. L'errore circa soltanto specificare un singolo progetto è probabilmente dovuto a specificare il target in modo errato. Oltre al nome del progetto, tutti i parametri passati a msbuild iniziano con /, ad es. /t[arget]:foo /p[roperty]:var=value
  2. La destinazione di pubblicazione non è in realtà correlata alla pubblicazione sul Web. IIRC, è correlato alla pubblicazione di un'applicazione OneClick. In VS2010, è necessario utilizzare /t:build /p:DeployOnBuild=true per i progetti Web per utilizzare le attività di pubblicazione (come utilizzato in precedenza). Novità in VS11 è lo /t:WebPublish che accetta anche un insieme più semplice di parametri, ovvero il file .pubxml che si desidera utilizzare.
    • nota aggiuntiva: quando si crea un file di soluzione, /t:WebPublish avrà esito negativo poiché la destinazione non è definita a livello di soluzione. Può essere utilizzato solo direttamente sul file di progetto per il tuo progetto Web. È ancora possibile utilizzare /p:DeployOnBuild=true a livello di soluzione poiché il valore del parametro viene passato a ciascun progetto in fase di creazione, ma verrà ignorato da qualsiasi progetto che non utilizza tale valore.
+0

Grazie per la risposta !! Avevo capito come aggirarlo usando il comando generato automaticamente creato nella destinazione "Pacchetto". È fantastico per il materiale VS2011. Mi sono chiesto perché le mie configurazioni di build sono responsabili delle trasformazioni di web.config che mi sembrano più legate alla distribuzione/pubblicazione di ambienti. – Mike

+0

Ho appena provato questo oggi e ha quasi funzionato. Ho dovuto cambiare 'MSDeployPublishMethod = WMSVC'. Ho anche dovuto aggiungere "AllowUntrustedCertificate = True" perché è un server interno. HTH –

Problemi correlati