Изменение параметров ClickOnce в зависимости от выбранной конфигурации сборки (только версия .NET Framework)
окружающая среда
- каркас
-
- Windows Forms (платформа .NET Framework) в целом
- WPF (.NET Framework) в целом
предпосылка
Содержимое этих советов является проектными допущениями для .NET Framework. В случае .NET (Core) вы можете установить параметры публикации ClickOnce в блоке конфигурации сборки, поэтому, пожалуйста, опубликуйте как обычно.
Это также предполагает, что у вас достаточно знаний для нормального использования ClickOnce.
Сначала
Поскольку проект .NET Framework может иметь только один параметр публикации ClickOnce, Например, чтобы опубликовать с различными параметрами в сборках Debug и Release, необходимо вручную изменять параметры каждый раз перед публикацией.
Можно иметь два параметра, сгруппировав проекты в библиотеку DLL и создав два отдельных проекта для публикации. У вас будет одна и та же конфигурация дважды, и если есть файлы ресурсов, необходимые для публикации, вы должны иметь два из них одновременно, поэтому управление будет хлопотным.
В этом разделе описывается, как создать пакетный файл (.bat) столько параметров, сколько необходимо, и опубликовать ClickOnce.
Настройка ClickOnce
На этот раз «Расположение общей папки» и «URL-адрес папки установки» были разделены на «Отладочную сборку» и «Сборку выпуска». Другие параметры создаются с политикой их общего использования. Другие параметры могут быть разделены, но может быть громоздко хранить «файлы приложения» и «предварительные требования» отдельно.
Сначала откройте проект и введите настройки ClickOnce, как обычно. Входное содержимое задается параметрами, выдаваемыми debug, но все, кроме общей части, нормально, если это не вызывает ошибку.
Ниже приведен пример конфигурации:
После ввода сохраните проект.
Создание файла .bat для публикации ClickOnce
Поскольку он выдается вместе с командой, он может быть выполнен на других носителях, таких как PowerShell, но на этот раз он создается как BAT-файл.
Вы можете создать файл в любом месте, но для простоты я создам его в расположении файла решения (.sln). Поскольку это bat-файл, кодировка символов — Shift-JIS. PS1 может быть UTF-8 (BOM).
Откройте BAT-файл в текстовом редакторе и введите: Обратите внимание, что PowerShell может обрабатывать экранирование по-разному.
call "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"
cd %~dp0
msbuild ClickOnceBuildConfiguration.sln /t:Publish /p:Configuration=Debug /p:PublishUrl="publish\Debug\\" /p:InstallUrl="\\xxxxServer\publish_Debug\\"
Первая строка указывает на расположение командной строки разработчика. Этот путь зависит от устанавливаемой версии Visual Studio.
Каждый участок пути зависит от следующих условий:
- Программные файлы
-
Условия пути Программные файлы - Если вы используете 32-разрядную ОС
- Если используется 64-разрядная версия Visual Studio в 64-разрядной ОС
Программные файлы (x86) - Если используется 32-разрядная версия Visual Studio в 64-разрядной ОС
- 2022
- Это зависит от устанавливаемой версии Visual Studio.
- Сообщество
- Это зависит от устанавливаемого выпуска Visual Studio. Будут введены «Сообщество», «Профессионал», «Предприятие» и т.д.
Вторая строка перемещает текущий каталог в расположение BAT-файла.
Третья строка — это команда обработки сборки ClickOnce. Значение каждого параметра заключается в следующем.
Описание | имени параметра |
---|---|
Msbuild | Команда, выполняющая процесс построения. Обязательно и написано в первую очередь. |
ClickOnceBuildConfiguration.sln | Описывает имя файла создаваемого решения. |
/t:Publish |
Указывает процесс сборки ClickOnce. |
/p:Configuration=Debug |
Задает конфигурацию построения, заданную для решения. Если вы хотите изменить конфигурацию отладки, которая будет построена, измените текст в части "Отладка". |
/p:PublishUrl="publish\Debug\\" |
Перезапишите значение "Расположение общей папки" на экране публикации Visual Studio указанной строкой и выполните ее. |
/p:InstallUrl="\\xxxxServer\publish_Debug\\" |
Перезапишите значение "URL-адрес папки установки" на экране публикации Visual Studio указанной строкой и выполните ее. |
Некоторые параметры были извлечены, но смотрите следующие ссылки для других параметров:
В качестве примера на этот раз мы изменим параметры публикации ClickOnce в каждой сборке отладки и выпуска, поэтому создадим ее следующим образом.
Опубликовано ClickOnceDebug.bat
call "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"
cd %~dp0
msbuild ClickOnceBuildConfiguration.sln /t:Publish /p:Configuration=Debug /p:PublishUrl="publish\Debug\\" /p:InstallUrl="\\xxxxServer\publish_Debug\\"
Опубликованная .bat ClickOnceRelease
call "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"
cd %~dp0
msbuild ClickOnceBuildConfiguration.sln /t:Publish /p:Configuration=Release /p:PublishUrl="publish\Release\\" /p:InstallUrl="\\xxxxServer\publish_Release\\"
ClickOnce публикует выполнение BAT-файла
Попробуйте запустить каждый BAT-файл.
Запустится командная строка и начнется сборка.
На самом деле, bat-файл, созданный на этот раз, является только процессом до сборки, поэтому файл не создается в «расположении общей папки». Созданы файлы, необходимые для публикации. Например, в случае отладочной сборки у вас должен быть файл в "< пути к папке проекта >\bin\Debug\app.publish\". Скопируйте эти файлы в «URL-адрес папки установки», и он будет корректно работать как ClickOnce.
Публикация в общей папке (если местом назначения является папка, к которой у вас есть прямой доступ)
Следующий сайт используется в качестве справочного материала для этой части.
Эта область не имеет прямого отношения к обработке ClickOnce, поэтому, пожалуйста, обратитесь к вышеуказанному сайту для подробного объяснения.
Сначала откройте файл проекта (.csproj) в текстовом редакторе. Это не файл решения.
Внутри находится XML-структура, и если вы прокрутите вниз, добавьте </Project>
следующий код в строку над ней.
Если это процесс копирования файла, содержимое фиксируется, но часть является CopyPublishedApplication
произвольной. Вы будете использовать это имя позже.
<!-- ここから ClickOnce の発行処理 -->
<Target Name="CopyPublishedApplication">
<ItemGroup>
<MySourceFiles Include="$(PublishDir)**\*.*" Exclude="$(PublishDir)$(AssemblyName).exe" />
</ItemGroup>
<PropertyGroup>
<AppricationDir>$(_DeploymentApplicationDir.Substring($(PublishDir.Length)))</AppricationDir>
</PropertyGroup>
<Copy SourceFiles="@(MySourceFiles)" DestinationFiles="@(MySourceFiles->'$(PublishUrl)%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>
<!-- ここまで ClickOnce の発行処理 -->
Сохраните его, как только вы его ввели.
Затем откройте каждый BAT-файл и добавьте в /t:CopyPublishedApplication
msbuild параметры. CopyPublishedApplication
это имя, которое я дал вам ранее.
Публикация ClickOnceDebug.bat (пример)
call "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"
cd %~dp0
msbuild ClickOnceBuildConfiguration.sln /t:Publish /t:CopyPublishedApplication /p:Configuration=Debug /p:PublishUrl="publish\Debug\\" /p:InstallUrl="\\xxxxServer\publish_Debug\\"
При запуске BAT-файла можно увидеть, что файл скопирован в расположение общей папки. В настоящее время нет < имени программы >.exe файла, но оно не нужно, поскольку оно изначально включено в программу установки.exe.
- приложение
-
Если в решении несколько проектов, выполняется
CopyPublishedApplication
для всех проектов. В большинстве случаев он устанавливается только для проекта exe, поэтому при запуске вCopyPublishedApplication
другом проекте будет отображаться ошибка, Его безопасно игнорировать, потому что он отображает только сообщение.
Публикация в общей папке (для FTP)
Я не пробовал это, но вы можете обратиться к следующим сайтам.
Другие вещи, которые следует иметь в виду
- Даже если выпуск ClickOnce разделен на несколько частей, сущность рассматривается как одна и та же программа, поэтому, например, нельзя установить программу, опубликованную в Debug, и программу, опубликованную с Release в одной среде. Для того чтобы установить, необходимо принять такие меры, как изменение имени каждой сборки. Пожалуйста, обратитесь к следующему сайту, чтобы узнать, что он идентифицирует.