Ответ 1
Трюк состоял в том, чтобы сопоставить так называемый идентификатор сборки.
Совет # 1: не используйте Mage для создания манифеста развертывания (файл *.application). Вместо этого используйте GenerateDeploymentManifest
. Инструмент "Маг" не имеет двух важных параметров:
- Маг не дает возможности указать культуру развертывания. Как вы можете видеть из приведенной выше ссылки, если культура не соответствует, то ClickOnce это другое приложение. Уч.
- Невозможно установить режим обновления на "переднем плане", например, "проверить обновления перед запуском", например, "онлайн-приложение". Хм...
Совет # 2: используйте Маг, чтобы добавить издателя и подписать сертификат развертывания. Это связано с тем, что 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: терпение, запас старых рабочих манифестов и хороший удобный инструмент для сравнения.
Является ли это сложным и болезненным? Да! Но лучше ли это Мастер публикации? OH YES!
Изменить. Я опубликовал рабочий пример того, как можно вызвать Мага из MSBuild - однако работа не работает 't означает, что вы можете просто подключить его, так как есть множество настроек, которые вы можете изменить, и вам все равно нужно понять ClickOnce в некоторой степени. Но, надеюсь, это может послужить полезной отправной точкой.