2010-01-04 7 views
14

Fino ad ora la nostra app è stata pubblicata utilizzando ClickOnce tramite la procedura guidata "Pubblica" di Visual Studio. Questo è stato piuttosto doloroso e abbiamo automatizzato il processo usando msbuild/mage.Come eseguire la migrazione dalla procedura guidata di Visual Studio ClickOnce "Pubblica" alla distribuzione MSBuild/mage?

Sfortunatamente, la nuova distribuzione non sembra essere compatibile con quella precedente, fornendo l'errore "L'identità di distribuzione non corrisponde all'abbonamento" quando gli utenti (test) aggiornano.

Ora ci sono molte differenze tra i file generati usando "Pubblica" e il nostro script Mage, ma non possiamo eliminarli tutti. Ad esempio, "Publisher" non sembra essere rispettato da GenerateDeploymentManifest, mentre Mage -New Deployment non può impostare UpdateMode su Primo piano. Ci sono altri casi simili.

Qualcuno si è mai allontanato con successo dalla procedura guidata "Pubblica" senza richiedere all'intera base utenti di reinstallare l'app? Qual è stato il tuo approccio?

P.S. VisualStudio 2008; tutti gli utenti sono su .NET Framework 3.5 SP1.

risposta

17

Il trucco doveva corrispondere al cosiddetto assembly identity.

Suggerimento n. 1: non utilizzare Mage per generare il manifest di distribuzione (il file * .application). Utilizzare invece GenerateDeploymentManifest. Lo strumento Mago non ha due opzioni cruciali:

  • Mage non fornisce alcun modo per specificare la cultura della distribuzione. Come puoi vedere dal link sopra, se la cultura non corrisponde a ClickOnce si tratta di un'applicazione diversa. Ahia.
  • Non è possibile impostare la modalità di aggiornamento su "foreground", ovvero "controlla gli aggiornamenti prima di iniziare", ovvero "applicazione online". Hmm ...

Suggerimento # 2: USARE Mage per aggiungere editore e firmare il certificato di distribuzione. Questo perché GenerateDeploymentManifest sembra ignorare Publisher (almeno in SP1 3.5) e allo stesso modo SignFile non è in grado di utilizzare un file .pfx come chiave. Ops.

<Exec Command='"c:\path\to\mage.exe" -Update "$(MyOutputPath)\MyApp.application" -Publisher MyCompany.com -CertFile path\to\MyAppKey.pfx'/> 

Suggerimento # 3: fornire il percorso relativo corretto per il campo "codebase" nella XML distribuzione, utilizzare il seguente frammento:

<CreateItem Include="$(MyDeploymentPath)\v$(Version)\MyApp.exe.manifest" AdditionalMetadata="TargetPath=v$(Version)\MyApp.exe.manifest"> 
    <Output TaskParameter="Include" ItemName="EntryPoint"/> 
</CreateItem> 

e quindi passare EntryPoint="@(EntryPoint)"-GenerateDeploymentManifest. Il bit chiave sono i metadati "TargetPath". Che schifo!

Suggerimento n. 4: pazienza, una scorta di vecchi manifesti di lavoro e uno strumento diff facile e comodo.


È complicato e doloroso? Sì! Ma è meglio del mago di pubblicazione? OH SI!

Edit: Ho postato un lavoro example of how one might invoke Mage from MSBuild - tuttavia lavoro non significa che si può semplicemente inserire la spina, dal momento che ci sono un sacco di impostazioni coinvolti che si può decidere di cambiare, e hai ancora bisogno di capire ClickOnce in una certa misura. Ma si spera che possa fornire un utile punto di partenza.

Problemi correlati