创建clickonce webdeploy包

时间:2012-02-15 12:01:59

标签: .net msbuild clickonce msdeploy webdeploy

是否可以构建包含可以使用标准webdeploy工具部署到Web服务器的clickonce应用程序的Web部署包?

这将是理想的过程:

  1. MSBuild“YourFullyQualifiedProjectName.csproj / vbproj”/ T:Package
  2. obj \ Debug \ Package \ YourFullyQualifiedProjectName.deploy.cmd / Y
  3. 这背后的原因是我们可以构建整个解决方案,包括Web包,运行所有测试,然后在测试通过后才进行部署。

    我目前正在考虑对临时文件夹进行基于文件的部署,将其复制到Web项目中,然后打包Web项目。有更整洁的解决方案吗?

1 个答案:

答案 0 :(得分:9)

我已在http://sedodream.com/2012/02/18/HowToCreateAWebDeployPackageWhenPublishingAClickOnceProject.aspx为此创建了一个博客,其中包含更多详细信息,但相关内容如下所示

如果您有一个客户端项目要创建一个ClickOnce包,那么您可以尝试以下操作。

编辑客户项目的项目文件,并在底部(</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\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>

在PropertyGroup中我是:

  • 声明Web部署包的名称
  • 尝试查看MSDeploy的安装位置

之后定义了CreateWebDeployPackage,它将在PublishOnly目标之后执行(因为AfterTargets =“PublishOnly”)。该目标将调用msdeploy.exe在输出目录中创建包。您应该能够像使用任何其他包那样获取该包并发布它。

你可以尝试一下,让我知道它是否适合你?