Create a clickonce webdeploy package

2020-07-09 09:55发布

Is it possible to build a web deploy package containing a clickonce application that can be deployed to a web server using the standard webdeploy tool?

Here would be the ideal process:

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

The reasoning behind this would be so we can build the whole solution including web packages, run all tests, then deploy only after tests pass.

I've currently looked at doing a file-based deploy to a temp folder, copy that into a web project, then package the web project. Is there a neater solution?

1条回答
啃猪蹄的小仙女
2楼-- · 2020-07-09 10:19

I have created a blog for this at http://sedodream.com/2012/02/18/HowToCreateAWebDeployPackageWhenPublishingAClickOnceProject.aspx which has more details, but the relevant pieces are below

If you have a client project which you want to create a ClickOnce package out of then you can try the following.

Edit the project file for your client project and add the following at the bottom (right above the </Project> tag).

  <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\3@InstallPath)</MSDeployPath>
    <MSDeployPath Condition="'$(MSDeployPath)'==''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\IIS Extensions\MSDeploy\2@InstallPath)</MSDeployPath>
    <MSDeployPath Condition="'$(MSDeployPath)'==''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\IIS Extensions\MSDeploy\1@InstallPath)</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>

In the PropertyGroup I am:

  • declaring the name of the web deploy package
  • trying to see where MSDeploy is installed

After that the CreateWebDeployPackage is defined which will get executed after the PublishOnly target (because of AfterTargets="PublishOnly"). That target will make a call to msdeploy.exe to create the package in the output directory. You should be able to take that package and publish it as you would any other package.

Can you try it and let me know if it works for you?

查看更多
登录 后发表回答