14

これまで、アプリはVisualStudioの「公開」ウィザードを介してClickOnceを使用して公開されていました。これはかなり苦痛であり、msbuild/mageを使用してプロセスを自動化しました。

残念ながら、新しいデプロイメントは古いデプロイメントと互換性がないようであり、(テスト)ユーザーが更新すると「デプロイメントIDがサブスクリプションと一致しません」というエラーが発生します。

現在、「公開」を使用して生成されたファイルとMageスクリプトの間には多くの違いがありますが、すべてを排除することはできません。たとえば、「Publisher」はによって尊重されていないようですがGenerateDeploymentManifestMage -New DeploymentUpdateModeをForegroundに設定することはできません。他にも同様のケースがあります。

ユーザーベース全体にアプリを再インストールすることなく、「公開」ウィザードから正常に移行した人はいますか?あなたのアプローチは何でしたか?

PS VisualStudio 2008; すべてのユーザーは.NETFramework3.5SP1を使用しています。

4

1 に答える 1

18

秘訣は、いわゆるアセンブリIDを一致させることでした。

ヒント1:Mageを使用してデプロイメントマニフェスト(* .applicationファイル)を生成しないでください。GenerateDeploymentManifest代わりに使用してください。Mageツールには2つの重要なオプションがありません。

  • Mageは、デプロイメントのカルチャを指定する方法を提供しません。上記のリンクからわかるように、カルチャが一致しない場合は、ClickOnceとは別のアプリケーションです。痛い。
  • 更新モードを「フォアグラウンド」、別名「開始する前に更新を確認する」、別名「オンラインアプリケーション」に設定することはできません。うーん...

ヒント2:Mageを使用して発行元を追加し、展開証明書に署名してください。これは、GenerateDeploymentManifestPublisherを無視しているようで(少なくとも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:忍耐力、古い作業マニフェストの提供、および優れた快適な差分ツール。


これは複雑で苦痛ですか?はい!しかし、公開ウィザードよりも優れていますか?OH YES!

編集: MSBuildからMageを呼び出す方法の実用的な例を投稿しましたが、変更したい設定がたくさんあり、それでも変更する必要があるため、プラグインするだけで機能するわけではありません ClickOnceをある程度理解します。しかし、うまくいけば、それは有用な出発点を提供することができます。

于 2010-01-05T02:40:37.153 に答える