2015-05-01 18 views
11

In Visual Studio, uso la funzione "pubblica web" per eseguire alcune trasformazioni web.config e pubblicare un progetto WebAPI sul nostro server. La pubblicazione avviene tramite Web Deploy.Pubblica distribuzione Web utilizzando il codice VS

Ora che sto usando il codice di Visual Studio, ho perso quell'attrezzatura. Ma mi piacerebbe continuare a pubblicare il progetto usando Web Deploy. C'è un modo per scrivere un'attività VSCode che pubblicherà il mio progetto?

Visual Studio Publish utilizza un file [target] .pubxml. Ho "staging.pubxml" e "production.xml". Questi sembrano file MSBuild. Quindi, forse è solo questione di eseguire un'attività di msbuild dal codice. Non so da dove cominciare, però.

Un'altra idea è che potrei avviare uno strumento da riga di comando di Web Deploy. Non l'ho mai usato e sembra che la prima idea sia migliore.

+0

Penso che la parte più difficile sia trovare la giusta riga di comando. Controlla questo blog http://www.gregpakes.co.uk/post/msbuild-publish-profiles-and-web-site-projects. Se trovi la riga di comando giusta, posso aiutarti a definire un'attività in VSCode per esso. –

risposta

4

Codice di Visual Studio non ha un sistema di build integrato (Web Publish) come fa Visual Studio. Ma ha linea di comando compito correre e Git costruiti in

In modo da avere un paio di opzioni:.

1) Utilizzare un corridore compito di dare il via il build/pubblicare dalla palette di comando (Ctrl + P). Grunt è disponibile nell'anteprima *. Questo richiede che tu lo script manualmente, ma una volta che è fatto, è facile iniziare l'attività da quel punto.

(AGGIORNAMENTO: the docs menziona altri task runner compatibili tra cui: Make, Ant, Gulp, Jake, Rake o MSBuild - AND. .settings tasks.json ha esempi su come far funzionare i file MSBuild. Premere ctrl + p digitare: "Esegui attività" e quindi fare clic su "configura attività")

2) Impostare il sistema di controllo sorgente per l'integrazione continua in modo che quando si esegue il push di un aggiornamento su un ramo specifico, verrà eseguito MSBuild (o altro sistema di generazione) script e pubblicare sul server per te. Utilizziamo Team Foundation Server (TFS) e Git. Abbiamo uno specifico ramo "release/master" che è configurato per creare e pubblicare quando riceve una spinta. Richiede anche una configurazione iniziale, ma una volta completata, è automatica. Se non hai TFS, prova TFS online. Ci sono molte altre opzioni là fuori, ma questo è quello che usiamo.

Sono nella stessa posizione in cui stai cercando di capirlo. Mi piacerebbe sapere cosa scopri.

* Secondo lo Deep Dive session at Build 2015. Sebbene si guardi il file tasks.json, sembra che Gulp e MSBuild siano disponibili nell'anteprima.

+1

Grazie per quelle idee, Dan. Sono stato in grado di integrare i miei script di Grunt con la palette dei comandi. E, non credo sia difficile fare lo stesso con MSBuild. Ma il mio problema è che non so come sarebbe la linea di comando per l'esecuzione di quei file XML di pubblicazione. È lì che sono bloccato. Per la tua seconda idea, questo è probabilmente il modo corretto per farlo, e ho intenzione di renderlo un obiettivo a più lungo termine, dal momento che stiamo già usando TFS. –

+0

Hai risolto questo alla fine AJ? – jonhobbs

2

Al fine di pubblicare utilizzando MSBuild è necessario utilizzare il seguente comando:

msbuild <Project or Solution Path> /p:DeployOnBuild=true /p:PublishProfile=<Publish Profile Name> 
  • Si può puntare a una soluzione, questa pubblicherà tutti i progetti che include un profilo di pubblicazione valida:

    msbuild <FullPath>\MySolution.sln /p:DeployOnBuild=true /p:PublishProfile=Test 
    
  • È possibile puntare a un progetto specifico come questo:

    msbuild <FullPath>\Project1\MyProj.csproj /p:DeployOnBuild=true /p:PublishProfile=Test 
    
  • In entrambi i casi è inoltre possibile specificare utilizzare il percorso completo per.File pubxml:

    msbuild <FullPath>\MySolution.sln /p:DeployOnBuild=true /p:PublishProfile=<FullPath>\PublishProfiles\Test.pubxml 
    

Infatti i file * .pubxml sono script MSBuild, in modo da poter interagire con esso come si fa con qualsiasi altro script MSBuild, ad esempio, è possibile sostituire le proprietà dalla riga di comando in questo modo:

Test.pubxml

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <WebPublishMethod>FileSystem</WebPublishMethod> 
     <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> 
     <LastUsedPlatform>Any CPU</LastUsedPlatform> 
     <SiteUrlToLaunchAfterPublish /> 
     <ExcludeApp_Data>False</ExcludeApp_Data> 
     <publishUrl>C:\Deploy\MyProject\</publishUrl> 
     <DeleteExistingFiles>True</DeleteExistingFiles> 
    </PropertyGroup> 
</Project> 

    msbuild <FullPath>\MySolution.sln /p:DeployOnBuild=true /p:PublishProfile=<FullPath>\PublishProfiles\Test.pubxml /p:publishUrl:"D:\DifferentPath\DifferentFolder\" 

È possibile utilizzare questi comandi dal server di integrazione continua o di qualsiasi altra costruzione script.

Ulteriori informazioni:

Command Line Deployment

+0

Grazie per le informazioni, ma la domanda riguarda la distribuzione dal codice di Visual Studio, non dalla riga di comando. –

+0

Ti sto dando questa risposta in base al contenuto della domanda originale ** _ "Quindi, forse è solo questione di eseguire un'attività di msbuild da Codice. Non so da dove cominciare, però." _ ** e questo da un commento ** _ "Penso che la parte più difficile sia trovare la giusta riga di comando. Controlla questo blog su gregpakes.co.uk/post/... Se trovi la giusta riga di comando posso aiutarti a definire un compito in VSCode per questo - Alex Dima "_ **. Non è più un'opzione per te? – Rolo

+0

Sono (semi) consapevole dell'opzione di utilizzare attività in linea di comando in codice vs, ma sinceramente mi stavo chiedendo, dato che VSCode è un prodotto Microsoft (OS, ma ancora), se avesse un'integrazione specifica per esso. –

5

Supponendo che si sta utilizzando l'ultima vscode ora (1.7.x). È possibile utilizzare il Task Runer del codice di Visual Studio.

Per prima cosa, è necessario configurare il task runner premendo <F1> e immettere task. Selezionare Attività: Configurare Task Runner.

Un nuovo file tasks.json verrà creato da vscode con il seguente contenuto.

{ 
    // See https://go.microsoft.com/fwlink/?LinkId=733558 
    // for the documentation about the tasks.json format 
    "version": "0.1.0", 
    "command": "msbuild", 
    "args": [ 
     // Ask msbuild to generate full paths for file names. 
     "/property:GenerateFullPaths=true" 
    ], 
    "taskSelector": "/t:", 
    "showOutput": "silent", 
    "tasks": [ 
     { 
      "taskName": "build", 
      // Show the output window only if unrecognized errors occur. 
      "showOutput": "silent", 
      // Use the standard MS compiler pattern to detect errors, warnings and infos 
      "problemMatcher": "$msCompile" 
     } 
    ] 
} 

In secondo luogo, ora è necessario aggiungere la nuova attività di pubblicazione. Con la risposta data da @Rolo, è possibile aggiungere una nuova attività nella matrice tasks:

{ 
     "taskName": "publish", 
     // Always show errors from builds. 
     "showOutput": "always", 
     "args": [ 
      "/p:DeployOnBuild=true", 
      "/p:PublishProfile=Test" 
     ] 
    } 

In terzo luogo, una volta che il tasks.json è completata. È possibile utilizzare l'attività publish premendo Ctrl + P (o Cmd + P su Mac) e digitare task publish.

Problemi correlati