2009-11-18 9 views
29

Mi piacerebbe avere un server ClickOnce di prova per le mie applicazioni in cui gli utenti possono eseguire sia la versione di produzione che la versione di prova in parallelo. È possibile?Come distribuire contemporaneamente due versioni ClickOnce?

Prima ho provato a utilizzare quanto segue in AssemblyInfo.cs e anche a modificare il nome nella distribuzione ClickOnce, nonostante tutto ciò che è stato ottenuto sovrascrivendo la versione di produzione degli utenti con la versione di prova. Allo stesso modo, ha fatto lo stesso quando sono tornati al server di produzione.

#if DEBUG 
[assembly: AssemblyTitle("Product Name - Test")] 
#else 
[assembly: AssemblyTitle("Product Name")] 
#endif 

ho pensato che avrei dovuto anche chiarire che le due posizioni di distribuzione sono diversi l'uno dall'altro e su server diversi.

UPDATE

Ho anche provato a installare il GUID per il manifesto a seconda della modalità di debug, ma ancora una volta non funziona (GUID fittizio del utilizzato di seguito).

#if DEBUG 
[assembly: Guid("AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA")] 
#else 
[assembly: Guid("BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB")] 
#endif 

Come si distinguono i due? Sembra che il programma di installazione li veda come due programmi separati in quanto ottengo una conferma dell'installazione per ciascuno. Tuttavia, quando installo il secondo, "Aggiungi/Rimuovi programmi" vede solo quest'ultimo, anche se il primo è ancora su disco, come quando vado a reinstallarlo in seguito, viene semplicemente eseguito, ma poi gli switch di programmi di aggiunta/rimozione torna al vecchio nome.

+1

In risposta alla seconda domanda sull'identità dell'applicazione clickonce, non si tratta del guid assembly, si tratta della chiave (file pfx) che la pubblicazione è firmata con –

+1

@Rob Questo è interessante, quindi se ho più applicazioni firmate con stessa chiave, questo farà sì che Windows pensi di essere la stessa applicazione? Mi sembra un grave difetto. –

+1

No, non è un problema. Ho 7 applicazioni installate che sono firmate con la stessa chiave, e non è un problema. – RobinDotNet

risposta

23

Potrebbe sembrare una specie di zoppo, ma il modo più semplice per farlo è quello di avere due progetti EXE nella soluzione. Il metodo Main di ognuno di questi chiamerà semplicemente il metodo Main nel progetto EXE originale (che verrà convertito in un file DLL).

Ciò significa che ogni progetto EXE può avere le proprie impostazioni di pubblicazione ClickOnce, nonché il proprio file app.config. Ciò significa che hai diverse stringhe di connessione per la produzione e la versione di prova.

L'altra opzione (quella che potrebbe sembrare più sensata) è utilizzare MageUI.exe per creare manualmente i file ClickOnce, che consentono di scegliere un file di configurazione diverso e pubblicare il percorso ogni volta che si esegue lo strumento. C'è anche una versione da linea di comando (Mage.exe) in modo da poter teoricamente automatizzare questo.

Tuttavia, abbiamo scoperto che la soluzione con due progetti "runner" era molto più semplice. Ti consiglierei di provarlo prima.

+0

Riesco a vedere la semplicità dei due stub exe, anche se posso vederlo anche come un fardello con il mantenimento di due set di configurazioni, ecc. Vedrò come andare prima con 'mage' e poi provare quest'ultimo. Potevo vedere il mantenimento delle impostazioni dell'utente un vero dolore con i due stub exe. –

+0

Penso che tu abbia ragione con l'idea dei due stub, non sembra logico, ma si rivela meno incasinato che con il mago, comunque come ho detto prima temo che troverò la mia squadra in disuso con le differenze di configurazione, potremmo aver bisogno di gestirli un po 'come unendo app.configs da ciascuno dei progetti attraverso il processo di compilazione, * ick *! –

+0

Questo potrebbe aiutare in questo: http://stackoverflow.com/questions/132885/best-way-to-switch-configuration-between-developmentuatprod-environments-in-asp#132934 –

0

Lo faccio sempre. Ho persino uno schermo nella mia applicazione che cambia la versione che otterrà un utente specifico. E non sto facendo nulla di complicato sul lato app, tutta la magia è sul server web che ospita i file ClickOnce.

Dai un'occhiata all'articolo che il mio amico ha scritto, Fine Grained Versioning with ClickOnce. Spiega come l'abbiamo fatto.

+0

In realtà sto provando a consentire due installazioni click-once della stessa applicazione con versioni diverse, una versione dell'albero di produzione e un'altra su un altro server di aggiornamento che è la struttura di test. –

+0

Su un altro server ... sì, sembra che tu debba giocare con MageUI. –

+0

Funzionerebbe su Linux (ad esempio, Apache su un web hotel)? O anche con IIS in un hotel web? –

1

Provare a modificare il nome dell'assieme nella scheda Applicazione nella finestra delle proprietà.

+2

Sfortunatamente questo risolve solo una parte del problema, il client pensa ancora che sia la stessa app con un nome diverso, quindi l'archiviazione dei dati per tutti gli oggetti 'ApplicationSettingsBase' viene condivisa, la versione di test finisce per danneggiare la versione di produzione. –

11

ClickOnce: Concurrent versions spiega come procedere.

+0

Grazie Robin, sembra un approccio abbastanza semplice, anche se ci sono alcune cose da ricordare per cambiare/cambiare, c'è un modo semplice per farlo, forse un file MSBuild che potrebbe fare questo per me che semplicemente importerebbe il csproj esistente file ma imposta 'AssemblyName' ecc.? Ho trovato che non è possibile modificare questi in gruppi di proprietà e vengono ignorati se ci provi. –

+2

Ci sono solo 3 cose che devi cambiare. Gli URL di distribuzione, il nome dell'assembly e il nome del prodotto. Usiamo il controllo del codice sorgente, quindi accolgo un insieme di questi cambiamenti e li sgombero quando ne ho bisogno. – RobinDotNet

+2

@RobinDotNet Mentre questo può teoricamente rispondere alla domanda, [sarebbe preferibile] (http://meta.stackexchange.com/q/8259) includere qui le parti essenziali della risposta e fornire il link per riferimento. –

5

Ho modificato manualmente il .csproj per specificare un Nome prodotto diverso per debug/release.

Un avvertimento è che Visual Studio 2010 non aggiorna questo se si passa da debug/release. Ha effetto solo quando carica la soluzione, quindi assicurati di cambiare debug/release, quindi chiudi e riapri la soluzione.

+0

Quando provo questo, le condizioni ClickOnce PropertyGroup effettivamente sovrascritte. – kbeal2k

+1

Non l'ho mai visto sovrascritto, ma sicuramente NON cambierò nessuna delle impostazioni di compilazione tramite la GUI di progetto in Visual Studio che potrebbe sovrascriverlo. – LongZheng

+0

Se si pubblica usando una configurazione, si passa all'altra e si chiude la soluzione - VS chiederà se si desidera salvare il progetto (perché ha effettivamente sovrascritto quelle proprietà). Scegli "No" e riapri la soluzione. Le tue proprietà non verranno sovrascritte in questo caso. Ovviamente a causa di ciò, è una soluzione fragile, ma funziona se stai attento. –

Problemi correlati