Как перейти с мастера Visual Studio ClickOnce Publish на развертывание MSBuild / mage?

До сих пор наше приложение публиковалось с помощью ClickOnce с помощью мастера публикации Visual Studio. Это было довольно болезненно, и мы автоматизировали этот процесс с помощью msbuild / mage.

К сожалению, новое развертывание несовместимо со старым, что дает ошибку «Идентификатор развертывания не соответствует подписке» при обновлении (тестовых) пользователей.

Сейчас существует множество различий между файлами, созданными с помощью «Опубликовать», и нашим скриптом Mage, но мы не можем устранить их все. Например, "Издатель" не уважает GenerateDeploymentManifest, а Mage -New Deployment не может установить UpdateMode на Foreground. Есть и другие подобные случаи.

Кто-нибудь когда-нибудь успешно уходил от мастера публикации, не требуя переустановки приложения всей пользовательской базой? Каков был ваш подход?

P.S. VisualStudio 2008; все пользователи используют .NET Framework 3.5 SP1.


person Roman Starkov    schedule 04.01.2010    source источник


Ответы (1)


Хитрость заключалась в том, чтобы сопоставить так называемый идентификатор сборки < / а>.

Совет №1: не используйте Mage для создания манифеста развертывания (файла * .application). Вместо этого используйте GenerateDeploymentManifest. В инструменте Mage нет двух важных опций:

  • Mage не дает возможности указать культуру развертывания. Как видно из приведенной выше ссылки, если культура не совпадает, то для ClickOnce это другое приложение. Ой.
  • Невозможно установить режим обновления «передний план», он же «проверять обновления перед запуском», он же «онлайн-приложение». Хм...

Совет № 2: ОБЯЗАТЕЛЬНО используйте Mage, чтобы добавить издателя и подписать сертификат развертывания. Это связано с тем, что GenerateDeploymentManifest, похоже, игнорирует Publisher (по крайней мере, в 3.5 SP1), и аналогично SignFile не может использовать файл .pfx в качестве ключа. Упс.

<Exec Command='"c:\path\to\mage.exe" -Update "$(MyOutputPath)\MyApp.application" -Publisher MyCompany.com -CertFile path\to\MyAppKey.pfx'/>

Совет №3: чтобы указать правильный относительный путь для поля «кодовая база» в XML-коде развертывания, используйте следующий фрагмент:

<CreateItem Include="$(MyDeploymentPath)\v$(Version)\MyApp.exe.manifest" AdditionalMetadata="TargetPath=v$(Version)\MyApp.exe.manifest">
  <Output TaskParameter="Include" ItemName="EntryPoint"/>
</CreateItem>

а затем передайте EntryPoint="@(EntryPoint)" GenerateDeploymentManifest. Ключевой бит - это метаданные TargetPath. Фу!

Совет №4: терпение, запас старых рабочих манифестов и хороший удобный инструмент сравнения.


Это сложно и больно? Да! Но что лучше, чем мастер публикации? О, ДА!

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

person Roman Starkov    schedule 05.01.2010