2013-09-04 16 views
8

Attualmente sto usando TFS e l'attività del processo di generazione regolare per creare una soluzione. Tuttavia, mi piacerebbe essere in grado di automatizzare la distribuzione in modo da poter creare e distribuire in remoto su un server in un unico passaggio.TFS msbuild args/p: DeployOnBuild = true non sembra fare nulla

Sugli argomenti di MSBuild Sto tentando di specificare l'opzione di distribuzione. Il mio progetto è un servizio di Windows, ma capisco che è ancora possibile distribuire qualsiasi binario indipendentemente dal tipo di progetto (non essendo un progetto web).

attuali parametri di costruzione:

/p:DeployOnBuild=True /p:UserName=user /p:Password=password 

Quando l'accumulo viene eseguito in TFS ci si riesce, però mi aspettavo di vedere qualche tentativo di distribuzione al server e qualche messaggio di errore utile ma niente mostra.

+0

È necessario dargli un profilo di pubblicazione. –

+2

Pubblica profilo funziona solo con progetti Web. – suresh2

+0

@ Suresh2 Non possono essere creati manualmente e ancora utilizzati da msbuild? Dopotutto, msbuild è ancora solo un programma a riga di comando chiamato con argomenti. – jaffa

risposta

21

Per riferimento futuro, ho trovato esattamente ciò che è necessario per abilitare le distribuzioni per qualcosa di diverso da servizi/progetti web. La ragione per cui il parametro DeployOnBuild non fa nulla per qualcosa di diverso progetti web è che il file di progetto deve includere i webapplication.targets e anche un PropertyGroup contenente il percorso del VSToolsPath.

Questo link qui mi ha dato una buona introduzione su come le implementazioni web funzionano e come integrare questo nel mio progetto di implementare servizi:

http://www.asp.net/web-forms/tutorials/deployment/web-deployment-in-the-enterprise/building-and-packaging-web-application-projects

1) per passare i parametri in MSBuild è necessario un. file pubxml (chiamato profilo di pubblicazione) all'interno della cartella PublishProfiles nella cartella delle proprietà del progetto.

2) Ho bisogno il seguente nel file Csproj:

<PropertyGroup> 
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion> 
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> 
    </PropertyGroup> 

    <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
    <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" /> 
    <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" /> 

3) Se avete bisogno i comandi pre-sync/post-sincronizzazione di MSDeploy, purtroppo questo non è disponibile da MSBuild. Per ottenere questa funzionalità è necessario avere un X.Wpp.Targets (dove X è il nome del progetto) all'interno della cartella principale del progetto.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <Target Name="UninstallService" BeforeTargets="MSDeployPublish">  

     <!-- Do exec tasks here --> 

    </Target> 

    <Target Name="InstallService" AfterTargets="MSDeployPublish">  

     <!-- Do exec tasks here --> 

    </Target> 

</Project> 
-1

è necessario un modo per distribuire i servizi di Windows utilizzando MSBuild. Prova questo metodo http://mrchief.calepin.co/deploying-windows-service-via-msbuild/

+0

Grazie per il tuo aiuto, ma volevo ottenere quanto sopra utilizzando la stessa pipeline delle implementazioni del Progetto Web. Questo è ottenibile usando WPP (vedi sotto la risposta). – jaffa

+0

@jaffa Grande. l'approccio di distribuzione in rete funziona come previsto? – suresh2

+0

Sì, sta funzionando bene grazie. Non ero sicuro di come viene chiamato il tuo obiettivo DeployService. Sto usando la funzionalità Before/AfterTargets di MSBuild 4.0 con MSDeployPublish. – jaffa

Problemi correlati