Distribuire componenti COM con ClickOnce
La distribuzione di componenti COM legacy è tradizionalmente un compito difficile. I componenti devono essere registrati a livello globale e pertanto possono causare effetti collaterali indesiderati tra applicazioni sovrapposte. Questa situazione in genere non è un problema nelle applicazioni .NET Framework perché i componenti sono completamente isolati in un'applicazione o sono compatibili side-by-side. Visual Studio consente di distribuire componenti COM isolati nel sistema operativo Windows.
ClickOnce offre un meccanismo semplice e sicuro per la distribuzione delle applicazioni .NET. Tuttavia, se le applicazioni usano componenti COM legacy, è necessario eseguire passaggi aggiuntivi per la distribuzione. In questo argomento viene descritto come distribuire componenti COM isolati e fare riferimento a componenti nativi, ad esempio da Visual Basic 6.0 o Visual C++.
Per altre informazioni sulla distribuzione di componenti COM isolati, vedere Semplificare la distribuzione di app con ClickOnce e COM senza registrazione.
Domini COM senza registrazione
COM senza registrazione è una nuova tecnologia per la distribuzione e l'attivazione di componenti COM isolati. Funziona inserendo tutte le informazioni di registrazione e libreria dei tipi del componente installate in genere nel Registro di sistema in un file XML denominato manifesto archiviato nella stessa cartella dell'applicazione.
L'isolamento di un componente COM richiede la registrazione nel computer dello sviluppatore, ma non deve essere registrato nel computer dell'utente finale. Per isolare un componente COM, è sufficiente impostare la proprietà Isolated del riferimento su True. Per impostazione predefinita, questa proprietà è impostata su False, a indicare che deve essere considerata come riferimento COM registrato. Se questa proprietà è Impostata su True, viene generato un manifesto per questo componente in fase di compilazione. Fa anche in modo che i file corrispondenti vengano copiati nella cartella dell'applicazione durante l'installazione.
Quando il generatore di manifesti rileva un riferimento COM isolato, enumera tutte le CoClass
voci nella libreria dei tipi del componente, associando ogni voce ai dati di registrazione corrispondenti e generando definizioni di manifesto per tutte le classi COM nel file della libreria dei tipi.
Distribuire componenti COM senza registrazione con ClickOnce
La tecnologia di distribuzione ClickOnce è particolarmente adatta per la distribuzione di componenti COM isolati, perché Sia ClickOnce che COM senza registrazione richiedono che un componente disponga di un manifesto per la distribuzione.
In genere, l'autore del componente deve fornire un manifesto. In caso contrario, Visual Studio è in grado di generare automaticamente un manifesto per un componente COM. La generazione del manifesto viene eseguita durante il processo clickOnce Publish; Per altre informazioni, vedere Pubblicazione di applicazioni ClickOnce. Questa funzionalità consente anche di sfruttare i componenti legacy creati in ambienti di sviluppo precedenti, ad esempio Visual Basic 6.0.
Esistono due modi in cui ClickOnce distribuisce i componenti COM:
Usare il programma di avvio automatico per distribuire i componenti COM; funziona su tutte le piattaforme supportate.
Usare l'isolamento del componente nativo (noto anche come distribuzione COM senza registrazione).
Esempio di isolamento e distribuzione di un componente COM semplice
Per illustrare la distribuzione di componenti COM senza registrazione, questo esempio creerà un'applicazione basata su Windows in Visual Basic che fa riferimento a un componente COM nativo isolato creato con Visual Basic 6.0 e lo distribuirà usando ClickOnce.
Prima di tutto è necessario creare il componente COM nativo:
Per creare un componente COM nativo
Utilizzando Visual Basic 6.0 scegliere Nuovo dal menu File, quindi Progetto.
Nella finestra di dialogo Nuovo progetto selezionare il nodo Visual Basic e selezionare un progetto DLL ActiveX. Nella casella Nome digitare
VB6Hello
.Nota
Solo i tipi di progetto ActiveX DLL e ActiveX Control sono supportati con COM senza registrazione; I tipi di progetto ActiveX EXE e ActiveX Document non sono supportati.
In Esplora soluzioni fare doppio clic su Class1.vb per aprire l'editor di testo.
In Class1.vb aggiungere il codice seguente dopo il codice generato per il
New
metodo :Public Sub SayHello() MsgBox "Message from the VB6Hello COM component" End Sub
Compilare il componente. Dal menu Compila scegliere Compila soluzione.
Nota
COM senza registrazione supporta solo dll e tipi di progetto di controlli COM. Non è possibile usare exes con COM senza registrazione.
È ora possibile creare un'applicazione basata su Windows e aggiungervi un riferimento al componente COM.
Per creare un'applicazione basata su Windows usando un componente COM
Usando Visual Basic, scegliere Nuovo dal menu File, quindi Progetto.
Nella finestra di dialogo Nuovo progetto selezionare il nodo Visual Basic e selezionare Applicazione Windows. Nella casella Nome digitare
RegFreeComDemo
.In Esplora soluzioni fare clic sul pulsante Mostra tutti i file per visualizzare i riferimenti al progetto.
Fare clic con il pulsante destro del mouse sul nodo Riferimenti e scegliere Aggiungi riferimento dal menu di scelta rapida.
Nella finestra di dialogo Aggiungi riferimento fare clic sulla scheda Sfoglia, passare a VB6Hello.dll e quindi selezionarla.
Nell'elenco riferimenti viene visualizzato un riferimento VB6Hello .
Scegliere casella degli strumenti, selezionare un controllo Pulsante e trascinarlo nel form Form1 .
Nella finestra Proprietà impostare la proprietà Text del pulsante su Hello.
Fare doppio clic sul pulsante per aggiungere il codice del gestore e nel file di codice aggiungere il codice in modo che il gestore legga nel modo seguente:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim VbObj As New VB6Hello.Class1 VbObj.SayHello() End Sub
Eseguire l'applicazione. Scegliere Avvia debug dal menu Debug.
Successivamente è necessario isolare il controllo. Ogni componente COM usato dall'applicazione è rappresentato nel progetto come riferimento COM. Questi riferimenti sono visibili sotto il nodo Riferimenti nella finestra Esplora soluzioni. Si noti che è possibile aggiungere riferimenti direttamente usando Aggiungere il comando Riferimento nel menu Progetto o indirettamente trascinando un controllo ActiveX nel form.
I passaggi seguenti illustrano come isolare il componente COM e pubblicare l'applicazione aggiornata contenente il controllo isolato:
Per isolare un componente COM
In Esplora soluzioni, nel nodo Riferimenti selezionare il riferimento VB6Hello.
Nella finestra Proprietà modificare il valore della proprietà Isolated da False a True.
Dal menu Compila scegliere Compila soluzione.
Ora, quando si preme F5, l'applicazione funziona come previsto, ma è ora in esecuzione in COM senza registrazione. Per dimostrare questo problema, provare a annullare la registrazione del componente VB6Hello.dll ed eseguire RegFreeComDemo1.exe all'esterno dell'IDE di Visual Studio. Questa volta che si fa clic sul pulsante, funziona ancora. Se si rinomina temporaneamente il manifesto dell'applicazione, l'operazione avrà esito negativo.
Nota
È possibile simulare l'assenza di un componente COM annullando temporaneamente la registrazione. Aprire un prompt dei comandi, passare alla cartella di sistema digitando cd /d %windir%\system32
, quindi annullare la registrazione del componente digitando regsvr32 /u VB6Hello.dll
. È possibile registrarlo di nuovo digitando regsvr32 VB6Hello.dll
.
Il passaggio finale consiste nel pubblicare l'applicazione usando ClickOnce:
Per pubblicare un aggiornamento dell'applicazione con un componente COM isolato
Scegliere Pubblica RegFreeComDemo dal menu Compila.
Verrà visualizzata la Pubblicazione guidata.
Nella Pubblicazione guidata specificare un percorso sul disco del computer locale in cui è possibile accedere ed esaminare i file pubblicati.
Fare clic su Fine per pubblicare l'applicazione.
Se si esaminano i file pubblicati, si noterà che il file sysmon.ocx è incluso. Il controllo è completamente isolato per questa applicazione, ovvero se il computer dell'utente finale ha un'altra applicazione che usa una versione diversa del controllo, non può interferire con questa applicazione.
Fare riferimento ad assembly nativi
Visual Studio supporta riferimenti agli assembly nativi di Visual Basic 6.0 o C++; tali riferimenti sono denominati riferimenti nativi. È possibile stabilire se un riferimento è nativo verificando che la relativa proprietà Tipo di file sia impostata su Native o ActiveX.
Per aggiungere un riferimento nativo, usare il comando Aggiungi riferimento e quindi passare al manifesto. Alcuni componenti inseriscono il manifesto all'interno della DLL. In questo caso, è sufficiente scegliere la DLL stessa e Visual Studio lo aggiungerà come riferimento nativo se rileva che il componente contiene un manifesto incorporato. Visual Studio includerà automaticamente anche eventuali file o assembly dipendenti elencati nel manifesto se si trovano nella stessa cartella del componente a cui si fa riferimento.
L'isolamento del controllo COM semplifica la distribuzione di componenti COM che non dispongono già di manifesti. Tuttavia, se un componente viene fornito con un manifesto, è possibile fare riferimento direttamente al manifesto. In effetti, è consigliabile usare sempre il manifesto fornito dall'autore del componente laddove possibile anziché usare la proprietà Isolated .
Limitazioni della distribuzione di componenti COM senza registrazione
COM senza registrazione offre chiari vantaggi rispetto alle tecniche di distribuzione tradizionali.
Non tutti i componenti sono un candidato adatto per COM senza registrazione. Un componente non è adatto se una delle condizioni seguenti è vera:
Il componente è un server out-of-process. I server EXE non sono supportati; sono supportate solo le DLL.
Il componente fa parte del sistema operativo o è un componente di sistema, ad esempio XML, un componente del browser o Microsoft Data Access Components (MDAC). È necessario seguire i criteri di ridistribuzione dell'autore del componente; rivolgersi al fornitore.
Il componente fa parte di un'applicazione, ad esempio Microsoft Office. Ad esempio, non è consigliabile tentare di isolare il modello a oggetti di Microsoft Excel. Questo fa parte di Office e può essere usato solo in un computer con il prodotto Office completo installato.
Il componente è destinato all'uso come componente aggiuntivo o snap-in, ad esempio un componente aggiuntivo di Office o un controllo in un Web browser. Tali componenti richiedono in genere un certo tipo di schema di registrazione definito dall'ambiente di hosting che esula dall'ambito del manifesto stesso.
Il componente gestisce un dispositivo fisico o virtuale per il sistema, ad esempio un driver di dispositivo per uno spooler di stampa.
Il componente è ridistribuibile per l'accesso ai dati. Le applicazioni dati richiedono in genere un'installazione ridistribuibile per l'accesso ai dati separata prima di poter essere eseguita. Non è consigliabile tentare di isolare componenti come Microsoft ADO Data Control, Microsoft OLE DB o Microsoft Data Access Components (MDAC). In alternativa, se l'applicazione usa MDAC o SQL Server Express, è necessario impostarli come prerequisiti; visualizzare procedura: installare i prerequisiti con un'applicazione ClickOnce.
In alcuni casi, può essere possibile che lo sviluppatore del componente riprogetti per com senza registrazione. Se non è possibile, è comunque possibile compilare e pubblicare applicazioni che dipendono da essi tramite lo schema di registrazione standard usando il programma di avvio automatico. Per altre informazioni, vedere Creazione di pacchetti del programma di avvio automatico.
Un componente COM può essere isolato una sola volta per ogni applicazione. Ad esempio, non è possibile isolare lo stesso componente COM da due progetti di libreria di classi diversi che fanno parte della stessa applicazione. In questo modo verrà generato un avviso di compilazione e l'applicazione non verrà caricata in fase di esecuzione. Per evitare questo problema, Microsoft consiglia di incapsulare i componenti COM in una singola libreria di classi.
Esistono diversi scenari in cui è necessaria la registrazione COM nel computer dello sviluppatore, anche se la distribuzione dell'applicazione non richiede la registrazione. La
Isolated
proprietà richiede che il componente COM sia registrato nel computer dello sviluppatore per generare automaticamente il manifesto durante la compilazione. Non esistono funzionalità di acquisizione della registrazione che richiamano la registrazione automatica durante la compilazione. Inoltre, tutte le classi non definite in modo esplicito nella libreria dei tipi non verranno riflesse nel manifesto. Quando si usa un componente COM con un manifesto preesistente, ad esempio un riferimento nativo, potrebbe non essere necessario registrare il componente in fase di sviluppo. Tuttavia, la registrazione è necessaria se il componente è un controllo ActiveX e si desidera includerlo nella casella degli strumenti e nella finestra di progettazione Windows Form.