Как опубликовать установщик clickonce, который включает установщик .NET и функцию автоматического обновления?

Я использую TeamCity в качестве сервера непрерывной интеграции и развертываю свое приложение с помощью установщика ClickOnce. Я могу заставить установщик работать и развернуть мое приложение, но я не могу понять, как включить установщик для .net 4.5, если на компьютере он еще не установлен, или как включить функцию автоматической проверки обновлений в развертываниях ClickOnce. В настоящее время я использую приведенный ниже файл MSBuild для создания своего установщика.

<Project DefaultTargets="DoPublish" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
  <PropertyGroup>
    <Version>$(BUILD_NUMBER)</Version>
    <Install>true</Install>
    <InstallFrom>Unc</InstallFrom>
    <UpdateEnabled>true</UpdateEnabled>
    <UpdateMode>Background</UpdateMode>
    <ClickOnceBuildDirectory>$(MSBuildProjectDirectory)\MyProject\bin\$(Configuration)\app.publish</ClickOnceBuildDirectory>
    <ClickOnceInstallDirectory>$(MSBuildProjectDirectory)\Publish</ClickOnceInstallDirectory>
    <ClickOnceFinalLocation>$(env_PublishUrl)</ClickOnceFinalLocation>
  </PropertyGroup>
  <Target Name="DoPublish">
    <RemoveDir Directories="$(ClickOnceInstallDirectory)" ContinueOnError="true" />
    <MSBuild Projects="MyProject.sln" Targets="Clean;Build" Properties="ApplicationVersion=$(Version);Configuration=$(Configuration)"/>
    <MSBuild Projects="MyProject\MyProject.csproj" Targets="Publish" Properties="ApplicationVersion=$(Version);Configuration=$(Configuration);InstallUrl=$(ClickOnceFinalLocation)" />
    <MakeDir Directories="$(ClickOnceInstallDirectory)"/>    
    <Exec Command="xcopy /E $(ClickOnceBuildDirectory) $(ClickOnceInstallDirectory)" />    
  </Target>  
</Project>

person PlTaylor    schedule 27.02.2013    source источник


Ответы (2)


Вы можете использовать загрузчик для выполнения предварительных требований, таких как проверка .NET Framework. Проверьте Требования к развертыванию приложений MSDN. статья, особенно разделы о начальной загрузке с помощью ClickOnce и MSBuild.

Есть также еще две статьи MSDN, в которых подробно как для установки необходимых компонентов ClickOnce и Создание пакеты загрузчика.

Что касается автообновлений, хотите ли вы, чтобы функция автоматического обновления находилась вне самого приложения, то есть в установщике, а не в приложении? Существует несколько способов разрешить обновления ClickOnce в вашем приложении, включая автоматические обновления через ClickOnce Deployment API.

Краткое объяснение использования пакетов ClickOnce Bootstrapper можно найти в этой существующей статье о Stackoverflow. Хотя здесь вы не используете WiX, вы также можете проверить это эта ветка WiX, которая полезна, потому что вы видите некоторые шаги, которые не сработали на этом пути. Эти примеры показывают использование задачи GenerateBootstrapper MSBuild., чтобы создать загрузчик для установщика ClickOnce. Обратите внимание, что в примерах по приведенным выше ссылкам «Путь» в задаче GenerateBootstrapper установлен как подпапка в расположении Windows SDK. Его можно изменить на другое расположение, если в этом расположении есть необходимые предварительные пакеты.

Ниже приведен пример, в котором .NET 4.5 Framework задана как предварительное условие для установки. Структура родительских каталогов для предварительного требования .NET 4.5 определяется свойством $ (MyPathToPrerequisitePackages).

Элемент BootstrapperFile в приведенном ниже примере указывает предварительный пакет .NET 4.5 Framework. Значение .NETFramework, Version = v4.5 берется из файла product.xml в папке Bootstrapper \ Packages \ DotNetFX45 и позволяет задаче GenerateBootstrapper правильно идентифицировать предварительный компонент / загрузчик .NET 4.5. упаковка. Значение «ProductName» - это просто понятное описание пакета.

<PropertyGroup>
  <MyPathToPrerequisitePackages>C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\Bootstrapper</MyPathToPrerequisitePackages>
</PropertyGroup>
<ItemGroup>
  <BootstrapperFile Include=".NETFramework,Version=v4.5">
    <ProductName>.NET Framework 4.5</ProductName>
  </BootstrapperFile>
</ItemGroup>
<GenerateBootstrapper 
  ApplicationFile="$(MyAppAssembly).application"
  ApplicationUrl="$(MyClickOnceAppUrl)"
  ApplicationName="$(MyClickOnceAppName)"
  BootstrapperItems="@(BootstrapperFile)"
  Culture="en"
  FallbackCulture="en-US"
  CopyComponents="true"
  Validate="false"
  Path="$(MyPathToPrerequisitePackages)"
  SupportUrl="$(MyAppSupportUrl)"
  OutputPath="$(MyDesiredOutputPath)\" />
person Michael    schedule 28.02.2013
comment
Но как включить XML-файлы из раздела «Создание пакетов начальной загрузки» в указанный выше XML-файл, чтобы создать пакет для однократного щелчка? - person PlTaylor; 28.02.2013
comment
p.s. ссылки на автоматическое обновление были правильными. Я просто хотел бы понять, как добавить загрузчик в установщик clickonce. - person PlTaylor; 01.03.2013
comment
Для этого можно использовать задачу MSBuild GenerateBootstrapper. Я отредактирую свой ответ, чтобы добавить пример. - person Michael; 04.03.2013
comment
это выглядит хорошо. Позвольте мне попробовать, и я отмечу ваш ответ как правильный, как только я его проверю. - person PlTaylor; 06.03.2013
comment
@PITaylor, вам удалось проверить? - person Michael; 12.03.2013
comment
К сожалению, пока нет. На данный момент меня втянули в другой проект. Но я не забыл об этом. - person PlTaylor; 12.03.2013
comment
Можете ли вы использовать это для .net 4.5, как в вопросе .... Я пытался сделать ‹MyPathToPrerequisitePackages› C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.0A \ Bootstrapper \ Packages \ DotNetFX45 ‹/MyPathToPrerequisitePackages› и ‹BootstrapperFile Include = Microsoft.Net.CoreFramework.4.5› ‹ProductName› dotnetfx45_full_setup.exe ‹/ProductName› ‹/BootstrapperFile›, и ему это не понравилось. - person PlTaylor; 12.03.2013
comment
@PITaylor, последнее изменение должно было упростить вам добавление необходимого компонента .NET 4.5. Вы это проверили? - person Michael; 19.03.2013
comment
В настоящее время он выдает ошибку: Элемент ‹GenerateBootstrapper› под элементом ‹Project› не распознан. - person PlTaylor; 21.03.2013
comment
@PITaylor, задача ‹GenerateBootstrapper› должна быть помещена в ‹Target›. Я предполагаю, что вы видите эту ошибку, потому что она была размещена за пределами ‹Target› в вашем скрипте MSBuild. - person Michael; 21.03.2013
comment
Все это скомпилировано ... но когда я использую установщик, он говорит мне, что ему нужно 4.5 вместо его установки. - person PlTaylor; 21.03.2013
comment
@PITaylor, у вас должно быть все, что вам нужно, чтобы продолжить работу на этом этапе. О каком установщике вы говорите и какую именно ошибку / сообщение вы получили? - person Michael; 21.03.2013
comment
После запуска установщика ClickOnce, который я создаю, появляется сообщение: Невозможно установить или запустить это приложение. Для этого приложения требуется полная версия 4.5 или другая совместимая платформа .NET Framework. Пожалуйста, обратитесь к системному администратору. - person PlTaylor; 21.03.2013
comment
Похоже, вы не используете установщик загрузчика. Задача GenerateBootstrapper создает файл setup.exe, который следует запускать как установщик. Он запросит установку .NET 4.5 и вызовет установщик ClickOnce (поэтому вы указываете файл .application для значения атрибута ApplicationFile в задаче GenerateBootstrapper). - person Michael; 22.03.2013

Только что отправил ответ на тему «https://stackoverflow.com/a/39610060/1345870»:

Просто боролся с этим сам - я решил зафиксировать файлы загрузчика в системе управления версиями. Путь к загрузчикам можно изменить, просто укажите /p:GenerateBootstrapperSdkPath=.build\Bootstrapper

Тогда нет необходимости изменять реестр - и дополнительное преимущество, заключающееся в том, что сборка теперь является автономной.

Единственная «проблема» в том, что мне приходится вручную копировать файлы Bootstrapper в систему управления версиями. В моем случае (VStudio2015) это означало копирование файлов из C:\Program Files (x86)\Microsoft Visual Studio 14.0\SDK\Bootstrapper

person espenalb    schedule 21.09.2016