Создание приложений .NET ClickOnce из командной строки

В Visual Studio можно создавать проекты из командной строки, даже если они созданы в интегрированной среде разработки (IDE). На самом деле можно перестроить проект, созданный с помощью Visual Studio, на другом компьютере, на котором установлено только .NET 5 или более поздней версии. Эта возможность позволяет воспроизвести сборку с помощью автоматизированного процесса, например в центральной лаборатории сборки или с расширенными методами скриптов за пределами область сборки самого проекта.

Примечание.

Чтобы создать платформа .NET Framework приложения ClickOnce из командной строки, см. статью "Сборка приложений ClickOnce" из командной строки.

Использование MSBuild для воспроизведения развертываний приложений .NET ClickOnce

При вызове msbuild /target:publish в командной строке эта команда указывает системе MSBuild создать проект и создать приложение ClickOnce в папке публикации. Эта команда эквивалентна выбору команды "Опубликовать" в интегрированной среде разработки.

Эта команда выполняет msbuild.exe, которая находится в пути в среде командной строки Visual Studio.

"Target" — это индикатор MSBuild по обработке команды. Ключевыми целевыми объектами являются целевой объект сборки и целевой объект публикации. Целевой объект сборки эквивалентен выбору команды сборки (или нажатию клавиши F5) в интегрированной среде разработки. Если вы хотите создать проект, введите msbuildего. Эта команда работает, так как целевой объект сборки является целевым объектом по умолчанию для всех проектов, созданных Visual Studio. В результате не нужно явно указывать целевой объект сборки. Поэтому ввод msbuild является той же операцией, что и ввод msbuild /target:build.

Команда /target:publish сообщает MSBuild вызвать целевой объект публикации. Целевой объект публикации зависит от целевого объекта сборки, что означает, что операция публикации является супермножеством операции сборки. Например, если вы внесли изменения в исходные файлы Visual Basic или C#, операция публикации автоматически перестраивает соответствующую сборку.

Сведения о создании полного развертывания ClickOnce с помощью средства командной строки Mage.exe для создания манифеста ClickOnce см. в пошаговом руководстве по развертыванию приложения ClickOnce вручную.

Создание и создание базового приложения ClickOnce с помощью MSBuild

Проще всего создать профиль публикации с помощью Visual Studio. Для публикации с помощью MSBuild требуется профиль публикации.

Создание и публикация проекта ClickOnce

  1. Откройте Visual Studio и создайте новый проект.

    Выберите шаблон проекта приложения Windows Forms или приложения WPF и присвойте проекту CmdLineDemoимя, а затем создайте проект.

  2. В обозревателе решений щелкните проект правой кнопкой мыши и выберите команду Опубликовать.

    Этот шаг гарантирует правильность настройки проекта для создания развертывания приложения ClickOnce.

    Откроется страница публикации.

  3. На странице "Публикация" выберите "Добавить профиль публикации", нажмите кнопку ClickOnce и нажмите кнопку "Готово".

    В этом упражнении можно игнорировать другие параметры конфигурации на странице публикации.

  4. После завершения процесса нажмите кнопку "Закрыть ", чтобы выйти из диалогового окна "Публикация".

  5. Выберите Опубликовать.

    Visual Studio создает выходные данные развертывания ClickOnce.

  6. Сохраните проект и запишите расположение папки, в которой она хранится.

    Описанные выше действия создают проект ClickOnce, опубликованный впервые. Теперь вы можете воспроизвести сборку за пределами интегрированной среды разработки.

Воспроизведение сборки из командной строки

  1. Закройте Visual Studio.

  2. В меню "Пуск" Windows выберите командную строку разработчика командной строки>"Сервис>".

    Откроется командная строка разработчика Visual Studio.

  3. В командной строке Visual Studio убедитесь, что текущий каталог отображает расположение созданного ранее проекта.

    Если вы не работаете в каталоге проекта, введите команду, чтобы изменить нужное расположение, например chdir C:\Users\username\source\repos\CmdLineDemo.

  4. Чтобы удалить существующие файлы, созданные в предыдущем разделе, введите rmdir /s publish.

    Этот шаг является необязательным, но он гарантирует, что сборка командной строки создает все новые файлы.

    Для .NET 5 и более поздних версий создание приложений .NET ClickOnce из командной строки аналогично. Одно из различий заключается в том, чтобы предоставить дополнительное свойство для профиля публикации в командной строке MSBuild.

  5. Введите msbuild /target:publish /p:PublishProfile=<pubxml file> /p:PublishDir="<specific location>".

    Описанные выше действия создают полное развертывание приложения ClickOnce в подпапке проекта с именем публикации. CmdLineDemo.application — это манифест развертывания ClickOnce. Папка CmdLineDemo_1.0.0.0.0 содержит файлы CmdLineDemo.exe и CmdLineDemo.exe.manifest, манифест приложения ClickOnce. Setup.exe — это загрузчик, который по умолчанию настроен для установки .NET. Файлы в этой папке составляют весь набор файлов, необходимых для развертывания приложения через Интернет или через UNC или CD/DVD.

Примечание.

Система MSBuild использует параметр PublishDir , чтобы указать расположение выходных данных, например msbuild /t:publish /p:PublishProfile=<pubxml file> /p:PublishDir="<specific location>".

Публикация выходных данных процесса

MSBuild использует PublishDir свойство для задания расположения выходных данных сборки, включая артефакты сборки. Значение PublishDir , которое MSBuild использует в качестве назначения для публикации, по умолчанию получается из PublishDir свойства в PUBXML-файле (.NET). Это поведение можно также переопределить в командной строке MSBuild с помощью переключателя /p . При переопределении параметра выходные данные публикации переходят в указанное расположение. Выходные данные создаются на этапе публикации MSBuild. Любой целевой объект MSBuild с запусками AfterTargets="ClickOncePublish" после этого копирования.

Свойство PublishUrl , в отличие от PublishDirэтого, не используется на шаге MSBuild. PublishUrl игнорируется при вызове MSBuild непосредственно для публикации из командной строки.

При запуске публикации в интегрированной среде разработки Visual Studio Visual Studio вызывает MSBuild для публикации артефактов в расположении PublishDir . После завершения этого шага MSBuild Visual Studio публикует файлы, относящиеся к ClickOnce, в расположение, на которое указывает PublishUrl. Этот второй шаг выполняется внутри процесса Visual Studio. Вы не можете внедрить какой-либо целевой объект или задачу для выполнения на этом шаге, так как это процесс Visual Studio.

Для развертываний MSBuild, которые не используют Visual Studio, скопируйте все файлы в каталог развертывания в место развертывания или носитель. Каталог развертывания может быть папкой на веб-сайте или FTP-сайте, общей папке или компакт-диске. Например, можно использовать стороннее средство или пользовательскую задачу MSBuild для копирования файлов ClickOnce.

Для любой последующей обработки в папке PublishUrl необходимо иметь отдельный скрипт.

Важно!

Если PublishDir задано то же расположение, что PublishUrlи, повторяющиеся выходные данные компиляции копируются в PublishUrl расположение. Эту проблему можно избежать в Visual Studio 2022 версии 17.4 и более поздних версиях, создав новый профиль. Новый профиль задает PublishDir расположение, отличное от PublishUrlрасположения. В конце операции публикации соответствующие файлы ClickOnce копируются из PublishDirPublishUrl расположения.

Параметры публикации

При публикации приложения с помощью предыдущих процедур следующие свойства вставляются в файл профиля публикации для проектов .NET (.NET 5 и более поздних версий). Эти свойства напрямую влияют на создание приложения ClickOnce.

В .pubxml:

<AssemblyOriginatorKeyFile>WindowsApplication3.snk</AssemblyOriginatorKeyFile>
<GenerateManifests>true</GenerateManifests>
<TargetZone>LocalIntranet</TargetZone>
<PublisherName>Microsoft</PublisherName>
<ProductName>CmdLineDemo</ProductName>
<PublishUrl>http://localhost/CmdLineDemo</PublishUrl>
<Install>true</Install>
<ApplicationVersion>1.0.0.*</ApplicationVersion>
<ApplicationRevision>1</ApplicationRevision>
<UpdateEnabled>true</UpdateEnabled>
<UpdateRequired>false</UpdateRequired>
<UpdateMode>Foreground</UpdateMode>
<UpdateUrlEnabled>false</UpdateUrlEnabled>
<IsWebBootstrapper>true</IsWebBootstrapper>
<BootstrapperEnabled>true</BootstrapperEnabled>

Эти свойства можно переопределить в командной строке без изменения самого файла проекта. Например, следующий код создает развертывание приложения ClickOnce без загрузчика:

msbuild /target:publish /p:PublishProfile=<pubxml file> /property:BootstrapperEnabled=false

Свойства публикации управляются в Visual Studio на страницах свойств публикации, безопасности и подписывания конструктора проектов. Для проектов .NET (.NET 5 и более поздних версий) эти параметры предоставляются в pubxml-файле, доступ к которому можно получить в Visual Studio с помощью средства публикации.

Следующие свойства публикации задаются на различных страницах свойств конструктора приложений.

  • AssemblyOriginatorKeyFile определяет файл ключа, используемый для подписи манифестов приложения ClickOnce. Этот же ключ также можно использовать для назначения строгого имени сборкам. Это свойство задано на странице подписывания конструктора проектов. Для приложений windows .NET этот параметр остается в файле проекта.

На странице публикации задаются следующие свойства:

  • PublishUrl — расположение, в котором приложение публикуется в интегрированной среде разработки. Он вставляется в манифест приложения ClickOnce, если InstallUrlUpdateUrl и свойство не указано.

  • ApplicationVersion указывает версию приложения ClickOnce. Версия — это четырехзначное число. Если последняя цифра — "*" (звездочка), то ApplicationRevision значение вставляется в манифест во время сборки.

  • ApplicationRevision указывает редакцию. Это значение является целым числом, которое увеличивается при каждой публикации в интегрированной среде разработки. Обратите внимание, что он не увеличивается автоматически для сборок, выполняемых в командной строке.

  • Install определяет, является ли приложение установленным приложением или запуском из веб-приложения.

  • InstallUrl (не отображается) — это расположение, из которого пользователи устанавливают приложение. Если задано, это значение будет записано в загрузчик setup.exe , если IsWebBootstrapper свойство включено. Он также вставляется в манифест приложения, если UpdateUrl он не указан.

  • SupportUrl (не отображается) — это расположение, связанное в диалоговом окне "Добавление и удаление программ " для установленного приложения.

Следующие свойства задаются в диалоговом окне "Приложение Обновления" с страницы публикации.

  • UpdateEnabledуказывает, должно ли приложение проверка для обновлений.

  • UpdateMode указывает обновления переднего плана. Для проектов .NET (.NET 5 и более поздних версий) фон не поддерживается.

  • UpdateUrl (не отображается) — это расположение, из которого приложение получает обновления. Если задано, это значение вставляется в манифест приложения.

Следующие свойства задаются в диалоговом окне "Параметры публикации" с помощью страницы публикации .

  • PublisherName указывает имя издателя, отображаемого в командной строке при установке или запуске приложения. Для установленного приложения он также используется для указания имени папки в меню "Пуск ".

  • ProductName указывает имя продукта, отображаемого в запросе при установке или запуске приложения. Для установленного приложения он также используется для указания ярлыка в меню "Пуск ".

Следующие свойства задаются в диалоговом окне "Предварительные требования" , доступ к который получен на странице публикации .

  • BootstrapperEnabled определяет, следует ли создать загрузчик setup.exe .

  • IsWebBootstrapper определяет, работает ли загрузчик setup.exe через Интернет или в режиме на диске.

Параметры использования: InstallURL, SupportUrl, PublishURL, UpdateURL

В следующей таблице показаны четыре варианта URL-адреса развертывания ClickOnce.

Параметр URL-адреса Description
PublishURL Требуется опубликовать приложение ClickOnce на веб-сайте.
InstallURL Необязательно. Задайте этот параметр URL-адреса, если сайт установки отличается от PublishURLсайта установки. Например, можно задать PublishURL путь к FTP и задать InstallURL для веб-URL-адреса.
SupportURL Необязательно. Задайте этот параметр URL-адреса, если сайт поддержки отличается от сайта поддержки PublishURL. Например, можно задать SupportURL веб-сайт поддержки клиентов вашей компании.
UpdateURL Необязательно. Задайте этот параметр URL-адреса, если расположение обновления отличается от InstallURLрасположения обновления. Например, можно задать PublishURL путь к FTP и задать UpdateURL для веб-URL-адреса.