Хитрость заключалась в том, чтобы сопоставить так называемый идентификатор сборки < / а>.
Совет №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