Lbreria DLL in WPF

giovedì 29 marzo 2012 - 21.03
Tag Elenco Tags  C#  |  .NET 4.0  |  Visual Studio 2010

b4p3p Profilo | Newbie

Salve a tutti,

è da un pò che seguo questo forum e il più delle volte ho trovato delle ottime soluzioni, ma adesso è arrivato il momento di scrivere il mio primo messaggio in questa comunità.
Spero mi possiate aiutare in qualche modo.

Ho la necessità di creare un'applicazione WPF costituita da più DLL.

l'esigenza nasce dal fatto che l'applicazione verrà aggiornata di continuo, e invece di scaricare l'intero eseguibile voglio far scaricare solo la dll necessaria.

ho provato a costruire una libreria di controlli wpf, ma il risultato è una sola grande libreria con più oggetti al suo interno.
C'è un modo per dire al visual studio di compilare ciascun user control in una dll diversa?
Ogni dll deve contenere lo xaml e il cs per farla funzionare, infatti l'idea sarà quella di inserire questo user control all'interno di una grid all'interno della finestra principale dell'applicazione.

Grazie a tutti anticipatamente.

Come mi muovo?

freeteo Profilo | Guru

Ciao b4p3p,
innanzitutto benvenuto!

La tua idea mi fa un attimo pensare, anche se potresti banalmente fare un progetto da aggiungere alla tua solution, con dentro un solo controllo ed avere una dll per controllo, mi sembra meglio fare 2 parole prima di trovare una soluzione "diretta" al tuo problema.

Come mai ti nasce questa necessità un po' strana? WPF come tutti i pacchetti "client" sviluppati con .net possono essere distribuiti con ClickOnce, che sostanzialmente è l'equivalente di JavaWebStart.
In quel modo, tu puoi lavorare al tuo applicativo normalmente, dividerti magari un progetto di Controlli, ma che li contenga tutti magari, oltre ai vari altri progetti che comporrano i layer applicativi, e poi appunto distrubuire con ClickOnce ogni volta che vuoi che venga aggiornato.
Senza fare niente sui client arriveranno giù tutte le librerie che fanno parte di quella pubblicazione.

Maggiori info qui:
http://msdn.microsoft.com/it-it/library/t71a733d(v=vs.80).aspx
http://channel9.msdn.com/Blogs/mtaulty/WPF-ClickOnce-and-the-NET-Client-Profile

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

b4p3p Profilo | Newbie

Ciao e grazie per la risposta.

Interessante questa soluzione, ammetto che non ci avevo pensato, anche se dopo un pò di analisi mi lascia alcuni dubbi.

La mia esigenza è quella di aggiornare solo determinati client.

L'aggiornamento non lo fa direttamente il client sul mio server di update, ma lo fa attraverso un server intermedio , sul quale nella mia idea volevo pre caricare le dll aggiornate per far girare il client all'ultima versione.

Non mi posso permettere di caricare 4 MB di eseguibile sul server intermedio, per Non caricare eccessivamente la banda.

Per questo volevo creare tante piccole dll da lasciare qua e la su tutti i server intermedi.

Se creo un progetto di tipo libreria, dovrei creare una ventina di progetti, o posso dire a vs di creare tante dll quante sono le cartelle?

Grazie mille ancora.

freeteo Profilo | Guru

>Ciao e grazie per la risposta.
di nulla figurati


>Interessante questa soluzione, ammetto che non ci avevo pensato,
>anche se dopo un pò di analisi mi lascia alcuni dubbi.
>La mia esigenza è quella di aggiornare solo determinati client.
ok, ti basta dare un url di pubblicazione e quindi aggiornamento diverso per chi vuoi, oppure gestire l'update con ClickOnce direttamente da codice, io mi sono trovato bene proprio per gestire con logiche mie l'update, ma senza preoccuparmi di tutta una serie di effetti collaterale (quali files, riferimenti, overwrite etc...)


>L'aggiornamento non lo fa direttamente il client sul mio server
>di update, ma lo fa attraverso un server intermedio , sul quale
>nella mia idea volevo pre caricare le dll aggiornate per far
>girare il client all'ultima versione.
questo "server intermedio" non mi è chiaro che funzionalità abbia, cmq sia, puoi fare una distribuzione clickonce sul server intermedio e poi il server reale dove vai ad insistere come database può essere tranquillamente un altro...anzi spessissimo è proprio così.


>Non mi posso permettere di caricare 4 MB di eseguibile sul server
>intermedio, per Non caricare eccessivamente la banda.
non ho capito cosa intendi per "server intermedio"...


>Per questo volevo creare tante piccole dll da lasciare qua e
>la su tutti i server intermedi.
e poi come le mantieni?


>Se creo un progetto di tipo libreria, dovrei creare una ventina
>di progetti, o posso dire a vs di creare tante dll quante sono
>le cartelle?
no, uno per progetto.
Cmq in 12 anni di programmazione non mi è mai capitato di vedere questa situazione di tante librerie quante sono i controlli, sicuramente si può fare, ma è un po' al limite.


Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

b4p3p Profilo | Newbie

Buongiorno,

Allora... cerchiamo di chiarire un pò il problema:

Per server intermedi intendo una specie di web service, ai quali i vari client richiedono dei servizi, oltre a quello che andrò ad installare io.

Questi web service sono molto eterogenei tra loro, quindi mi posso trovare a dialogare con apache anziché iis.

Quindi qui mi pongo 2 problemi:
1) il client deve essere aggiornato per dialogare con questo web service in base alla sua versione
2)lo stesso client per un motivo x può interrogare un'altro web service intermedio, e deve aggiornarsi automaticamente alla versione del web service contattato.

Per questi due motivi cercavo una soluzione altamente scalabile.

La soluzione che testerò nel weekend sarà proprio questa:
il client contatta un web service, si fa dire la versione, e se è differente, scarico soltanto le dll mancanti.

Poi magari faccio un analisi dei risultati e La metto a disposizione.

Buon weekend a tutti

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5