Хитрость заключалась в том, чтобы соответствовать так называемой идентификации сборки .
Подсказка # 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 в некоторой степени. Но, надеюсь, это может послужить полезной отправной точкой.