Создание пакета clickonce webdeploy

можно ли создать пакет веб-развертывания, содержащий приложение clickonce, которое можно развернуть на веб-сервере с помощью стандартного инструмента webdeploy?

вот был бы идеальный процесс:

  1. MSBuild " YourFullyQualifiedProjectName.csproj /vbproj" / T:пакет
  2. objDebugPackageYourFullyQualifiedProjectName.развертывать.cmd / Y

обоснование этого было бы так, что мы можем построить все решение, включая web пакеты, запустите все тесты, а затем разверните только после прохождения тестов.

в настоящее время я рассматривал выполнение развертывания на основе файлов во временную папку, скопируйте ее в веб-проект, а затем упакуйте веб-проект. Есть ли более аккуратное решение?

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 to get the installpath for msdeploy.exe.-->
    <MSDeployPath Condition="'$(MSDeployPath)'==''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\IIS Extensions\MSDeploy@InstallPath)</MSDeployPath>
    <MSDeployPath Condition="'$(MSDeployPath)'==''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\IIS Extensions\MSDeploy@InstallPath)</MSDeployPath>
    <MSDeployPath Condition="'$(MSDeployPath)'==''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\IIS Extensions\MSDeploy@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 deploy
  • попытка увидеть, где установлен MSDeploy

после этого определяется CreateWebDeployPackage, который будет выполняться после цели PublishOnly (из-за AfterTargets= "PublishOnly"). Эта цель будет звонить в msdeploy.exe для создания пакета в выходном каталоге. Вы должны быть в состоянии возьмите этот пакет и опубликуйте его, как и любой другой пакет.

вы можете попробовать его и дайте мне знать, если это работает для вас?