Как развернуть две версии ClickOnce одновременно?
Я хотел бы иметь тестовый сервер ClickOnce для своих приложений, где пользователи могут одновременно запускать как производственную версию, так и тестовую версию. Возможно ли это?
Сначала я попытался использовать следующее в AssemblyInfo.cs
, а также изменить имя в развертывании ClickOnce, хотя все это привело к перезаписыванию производственной версии пользователя тестовой версией. Аналогичным образом, он сделал то же самое, когда вернулся на производственный сервер.
#if DEBUG
[assembly: AssemblyTitle("Product Name - Test")]
#else
[assembly: AssemblyTitle("Product Name")]
#endif
Я подумал, что должен также уточнить, что два расположения развертывания отличаются друг от друга и на разных серверах.
UPDATE
Я также попытался установить GUID для манифеста в зависимости от режима отладки, но опять же он не работает (фиктивный GUID, используемый ниже).
#if DEBUG
[assembly: Guid("AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA")]
#else
[assembly: Guid("BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB")]
#endif
Как выделяются эти два? Кажется, что установщик видит их как две отдельные программы, так как я получаю подтверждение установки для каждого. Хотя, когда я устанавливаю второй, "Установка и удаление программ" видит только последний, хотя первый все еще находится на диске, так как, когда я перехожу к его переустановке позже, он просто запускается, но затем переключаются программы добавления/удаления назад к прежнему имени.
Ответы
Ответ 1
Это может показаться немного хромым, но самый простой способ сделать это - иметь два проекта EXE в вашем решении. Метод Main
каждого из них просто вызовет метод Main
в вашем исходном проекте EXE (который вы только что переключили на DLL файл).
Это означает, что каждый проект EXE может иметь собственные настройки публикации ClickOnce, а также собственный app.config
файл. Это означает, что у вас есть разные строки подключения для версии и тестовой версии.
Другой вариант (тот, который может показаться наиболее удобным) заключается в использовании MageUI.exe для ручной сборки файлов ClickOnce, который позволит вам выбрать другой файл конфигурации и опубликовать местоположение при каждом запуске инструмента. Там также версия командной строки (Mage.exe), чтобы вы могли теоретически автоматизировать это.
Однако мы обнаружили, что решение с двумя "бегунными" проектами было намного проще. Я бы порекомендовал вам сначала попробовать.
Ответ 2
ClickOnce: Параллельные версии объясняют, как это сделать.
Ответ 3
Я вручную отредактировал .csproj
, чтобы указать другое ProductName для debug/release
.
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
...
<PublishUrl>publishbeta\</PublishUrl>
<InstallUrl>http://www.softwareabc.com/download/beta/</InstallUrl>
<ProductName>Software ABC Test</ProductName>
<AssemblyName>SoftABCTest</AssemblyName>
<ApplicationIcon>Resources\Test.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
...
<PublishUrl>publish\</PublishUrl>
<InstallUrl>http://www.softwareabc.com/download/</InstallUrl>
<ProductName>Software ABC</ProductName>
<AssemblyName>SoftABC</AssemblyName>
<ApplicationIcon>Resources\Application.ico</ApplicationIcon>
</PropertyGroup>
Одно из предостережений заключается в том, что Visual Studio 2010 не обновляет это, если вы переключаетесь между debug/release. Он действует только тогда, когда он загружает решение, поэтому обязательно переключите debug/release, затем закройте и снова откройте решение.
Ответ 4
Попробуйте изменить имя сборки на вкладке "Приложение" в окне свойств.
Ответ 5
Я делаю это все время. У меня даже есть экран в моем приложении, который изменяет версию, которую получит конкретный пользователь. И я не делаю ничего сложного на стороне приложения, все волшебство находится на веб-сервере, на котором размещаются файлы ClickOnce.
Взгляните на статью, которую написал мой приятель, Fine Grained Versioning с ClickOnce. Это объясняет, как мы это сделали.
Ответ 6
Смотрите сжатое видео на одновременное управление версиями: ClickOnce: параллельные версии.