2012-02-15 13 views
7

È possibile creare un pacchetto di distribuzione Web contenente un'applicazione click-on che può essere distribuita su un server Web utilizzando lo strumento standard webdeploy?Creare un pacchetto webdeploy clickonce

qui sarebbe il processo ideale:

  1. MSBuild "YourFullyQualifiedProjectName.csproj/vbproj"/T: Pacchetto
  2. obj \ Debug \ Package \ YourFullyQualifiedProjectName.deploy.cmd/Y

Il ragionamento dietro questo sarebbe che possiamo costruire l'intera soluzione compresi i pacchetti web, eseguire tutti i test, quindi distribuire solo dopo il test.

Al momento ho eseguito una distribuzione basata su file in una cartella temporanea, la copio in un progetto Web, quindi il progetto web. C'è una soluzione più ordinata?

+0

Si desidera creare un pacchetto Web Deploy con solo il contenuto ClickOnce o si desidera incorporarlo in un pacchetto Web Deploy generato per un progetto Web (ovvero un progetto diverso nella soluzione che è un progetto Web) ? –

+0

Era solo il contenuto ClickOnce che ho bisogno di distribuire. – danielrbradley

risposta

9

ho creato un blog per questo a http://sedodream.com/2012/02/18/HowToCreateAWebDeployPackageWhenPublishingAClickOnceProject.aspx che ha più dettagli, ma i pezzi rilevanti sono al di sotto

Se si dispone di un progetto client che si desidera creare un pacchetto ClickOnce fuori allora si può provare il seguente .

Modificare il file di progetto per il progetto client e aggiungere quanto segue in basso (a destra sopra il tag </Project>).

<PropertyGroup> 
    <!--Unless specified otherwise, the tools will go to HKLM\SOFTWARE\Microsoft\IIS Extensions\MSDeploy\1 to get the installpath for msdeploy.exe.--> 
    <MSDeployPath Condition="'$(MSDeployPath)'==''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\IIS Extensions\MSDeploy\[email protected])</MSDeployPath> 
    <MSDeployPath Condition="'$(MSDeployPath)'==''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\IIS Extensions\MSDeploy\[email protected])</MSDeployPath> 
    <MSDeployPath Condition="'$(MSDeployPath)'==''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\IIS Extensions\MSDeploy\[email protected]allPath)</MSDeployPath> 
    <MSDeployExe Condition=" '$(MSDeployExe)'=='' ">$(MSDeployPath)msdeploy.exe</MSDeployExe> 
    </PropertyGroup> 

    <Target Name="CreateWebDeployPackage" AfterTargets="Publish" DependsOnTargets="Publish"> 
    <!-- 
    %msdeploy% 
     -verb:sync 
     -source:contentPath="C:\Temp\_NET\WebPackageWithClickOnce\WebPackageWithClickOnce\bin\Debug\app.publish" 
     -dest:package="C:\Temp\_NET\WebPackageWithClickOnce\WebPackageWithClickOnce\bin\Debug\co-pkg.zip" 
     --> 
    <PropertyGroup> 
     <Cmd>"$(MSDeployExe)" -verb:sync -source:contentPath="$(MSBuildProjectDirectory)\$(PublishDir)" -dest:package="$(OutDir)cotest.zip"</Cmd> 
    </PropertyGroup> 

    <Message Text="Creating web deploy package with command: $(Cmd)" /> 
    <Exec Command="$(Cmd)" /> 
    </Target> 

Nel PropertyGroup Io sono:

  • dichiarando il nome del pacchetto distribuzione Web
  • cercando di vedere dove MSDeploy è installato

Dopo che il CreateWebDeployPackage è definito quale verrà eseguito dopo il target PublishOnly (a causa di AfterTargets = "PublishOnly"). Tale destinazione effettuerà una chiamata a msdeploy.exe per creare il pacchetto nella directory di output. Dovresti essere in grado di prendere quel pacchetto e pubblicarlo come faresti con qualsiasi altro pacchetto.

Puoi provarlo e fammi sapere se funziona per te?

+0

Questo è fantastico, grazie per la soluzione completa, molto apprezzata! – danielrbradley

+1

+1 Credo che, se richiesto, Sayed sia in grado di preparare un caffè espresso con msbuild – mCasamento

+1

@mCasamento Vorrei poter fare espresso usando MSBuild. Mi risparmierebbe un sacco di $$$ :) –