Подтвердить что ты не робот

Как развернуть две версии 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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 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. Это объясняет, как мы это сделали.