Как перейти от мастера «Опубликовать» Visual Studio ClickOnce к развертыванию MSBuild / mage? - PullRequest
14 голосов
/ 05 января 2010

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

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

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

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

P.S. VisualStudio 2008; все пользователи находятся в .NET Framework 3.5 с пакетом обновления 1 (SP1).

1 Ответ

17 голосов
/ 05 января 2010

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

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

  • 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 : чтобы указать правильный относительный путь для поля "codebase" в 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 в некоторой степени. Но, надеюсь, это может послужить полезной отправной точкой.

...