【问题标题】:Create a clickonce webdeploy package创建一个 clickonce webdeploy 包
【发布时间】:2012-02-15 12:01:59
【问题描述】:

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

这将是理想的过程:

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

这样做的原因是我们可以构建包括 Web 包在内的整个解决方案,运行所有测试,然后仅在测试通过后进行部署。

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

【问题讨论】:

  • 您想创建一个仅包含 ClickOnce 内容的 Web 部署包,还是要将其合并到为 Web 项目生成的 Web 部署包中(即解决方案中的不同项目是一个网络项目)?
  • 只是我需要部署的 ClickOnce 内容。

标签: .net msbuild clickonce msdeploy webdeploy


【解决方案1】:

我在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 中:

  • 声明网络部署包的名称
  • 试图查看 MSDeploy 的安装位置

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

您可以尝试一下并告诉我它是否适合您吗?

【讨论】:

  • 太棒了,感谢您提供非常完整的解决方案,非常感谢!
  • +1 我相信如果被问到,Sayed 能够使用 msbuild 制作浓缩咖啡
  • @mCasamento 我希望我可以使用 MSBuild 制作浓缩咖啡。可以为我节省大量的美元 :)
  • 我知道这个答案已经有几个月的时间了,但也许你可以回答这个问题。有没有办法在不改变项目文件的情况下实现这一点?我知道我可以将属性作为参数提供给 msbuild,而且我真的很想完成这项工作,而无需编辑项目文件以添加一个目标。
  • 发布后任务甚至没有被调用。
猜你喜欢
  • 2020-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多