Как развернуть две версии ClickOnce одновременно? - PullRequest
34 голосов
/ 18 ноября 2009

Мне нужна возможность иметь тестовый сервер 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

Как они различаются? Кажется, что установщик видит их как две отдельные программы, так как я получаю подтверждение установки для каждой. Хотя, когда я устанавливаю вторую, «Установка и удаление программ» видит только последнюю, хотя первая все еще находится на диске, так как, когда я собираюсь переустановить ее позже, она просто запускается, но затем переключается установка и удаление программ. вернуться к прежнему имени.

Ответы [ 8 ]

26 голосов
/ 18 ноября 2009

Возможно, это звучит неубедительно, но самый простой способ сделать это - использовать два проекта EXE в вашем решении. Метод Main каждого из них просто вызовет метод Main в исходном проекте EXE (который вы только что переключили на создание файла DLL).

Это означает, что каждый проект EXE может иметь свои собственные параметры публикации ClickOnce, а также собственный файл app.config. Это означает, что у вас есть разные строки подключения для производственной и тестовой версии.

Другой вариант (который может показаться наиболее целесообразным) - это использовать MageUI.exe для ручной сборки файлов ClickOnce, что позволит вам выбирать разные файлы конфигурации и публиковать каждое из них. раз вы запустили инструмент. Есть также версия для командной строки (Mage.exe), чтобы вы могли теоретически автоматизировать это.

Однако мы обнаружили, что решение с двумя «бегуновыми» проектами было намного проще. Я бы порекомендовал вам сначала попробовать.

14 голосов
/ 01 апреля 2011

ClickOnce: параллельные версии объясняет, как это сделать.

6 голосов
/ 01 июня 2011

Я вручную отредактировал .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 не обновляет это, если вы переключаетесь между отладкой / выпуском. Он вступает в силу только при загрузке решения, поэтому обязательно переключите отладку / выпуск, затем закройте и снова откройте решение.

2 голосов
/ 30 марта 2011

См. Краткое видео о параллельном управлении версиями: ClickOnce: Параллельные версии .

1 голос
/ 13 января 2010

Попробуйте изменить имя сборки на вкладке приложения в окне свойств.

0 голосов
/ 22 марта 2019

Вы должны отредактировать ваш csproj вручную после того, как хотя бы один раз настроите свой проект для публикации приложения Click Once.

Переместите некоторые связанные свойства Click Once из <PropertyGroup> в группу свойств <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> и продублируйте их в группе свойств <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">.

Свойства для дублирования: ApplicationRevision (только если вам нужны отдельные счетчики ревизий), PublishUrl, ProductName и SuiteName (последние два требуются, чтобы иметь возможность различать конфигурации на целевых машинах) , Вам также придется переопределить свойство AssemblyName (не удаляя его из первой группы).

Если вы хотите иметь возможность отладки вашего проекта в любой конфигурации, вам также нужно будет добавить свойства StartAction и StartProgram в каждую группу, в которой вы переопределите свойство AssemblyName.

После присвоения этим свойствам адекватных (т. Е. Разных) значений вы сможете публиковать обе конфигурации , не изменяя свой проект , просто выбрав нужную конфигурацию. Однако обратите внимание, что вам придется выгружать ваш проект между публикациями для разных конфигураций , иначе Visual Studio испортит ваши параметры.

После этого вы также сможете установить обе версии на одну целевую машину.

0 голосов
/ 14 сентября 2018

Вариант сценария двух проектов Питера Мортенсена. Я хотел dev, тестирование клиента и релиз клиента. В моем случае я хотел, чтобы клиентский тест предоставил некоторые визуальные подсказки о том, что это был тест, а не живой (например, «ТЕСТ» в заголовке и другая визуальная тема).

Мне было проще всего иметь два решения и два проекта-заглушки. Каждый проект находится в своем собственном каталоге со своими собственными заглушками program.cs, app.config и assemblyinfo.cs.

В решении dev / test конфигурация отладки была для dev, конфигурация выпуска была для пользовательского теста. Я использовал SlowCheetah для преобразования app.config для последнего.

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

0 голосов
/ 18 ноября 2009

Я делаю это все время. У меня даже есть экран в моем приложении, который изменяет, какую версию получит конкретный пользователь. И я не делаю ничего хитрого на стороне приложения, вся магия на веб-сервере, на котором размещены файлы ClickOnce.

Взгляните на статью, которую написал мой приятель, Мелкозернистое управление версиями с ClickOnce . Это объясняет, как мы это сделали.

...