Condividi tramite


Importazione di una libreria dei tipi come assembly

Le definizioni dei tipi COM si trovano in genere in una libreria dei tipi. Al contrario, i compilatori conformi a CLS producono metadati dei tipi in un assembly. Le due fonti di informazioni sul tipo sono piuttosto diverse. In questo argomento vengono descritte le tecniche per la generazione di metadati da una libreria dei tipi. L'assembly risultante è denominato assembly di interoperabilità e le informazioni sul tipo che contiene consentono alle applicazioni .NET Framework di usare i tipi COM.

Esistono due modi per rendere disponibili queste informazioni sui tipi alla tua applicazione.

  • Uso degli assembly di interoperabilità solo in fase di progettazione: a partire da .NET Framework 4, è possibile istruire il compilatore di incorporare le informazioni sui tipi dall'assembly di interoperabilità nell'eseguibile. Il compilatore incorpora solo le informazioni sul tipo usate dall'applicazione. Non è necessario distribuire l'assembly di interoperabilità con l'applicazione. Questa è la tecnica consigliata.

  • Distribuzione degli assembly di interoperabilità: è possibile creare un riferimento standard all'assembly di interoperabilità. In questo caso, l'assembly di interoperabilità deve essere distribuito con la tua applicazione. Se si usa questa tecnica e non si usa un componente COM privato, fare sempre riferimento all'assembly di interoperabilità primario (PIA) pubblicato dall'autore del componente COM che si intende incorporare nel codice gestito. Per altre informazioni sulla produzione e sull'uso di assembly di interoperabilità primari, vedere Assembly di interoperabilità primari.

Quando si usano assembly di interoperabilità solo in fase di progettazione, è possibile incorporare informazioni sul tipo dall'assembly di interoperabilità primario pubblicato dall'autore del componente COM. Non è tuttavia necessario distribuire l'assembly di interoperabilità primario con l'applicazione.

L'uso di assembly di interoperabilità solo in fase di progettazione riduce le dimensioni dell'applicazione, perché la maggior parte delle applicazioni non usa tutte le funzionalità di un componente COM. Il compilatore è molto efficiente quando incorpora informazioni sul tipo; se l'applicazione usa solo alcuni dei metodi in un'interfaccia COM, il compilatore non incorpora i metodi inutilizzati. Quando un'applicazione con informazioni sul tipo incorporate interagisce con un'altra applicazione o interagisce con un'applicazione che usa un assembly di interoperabilità primario, Common Language Runtime usa regole di equivalenza del tipo per determinare se due tipi con lo stesso nome rappresentano lo stesso tipo COM. Non è necessario conoscere queste regole per usare oggetti COM. Tuttavia, se si è interessati alle regole, vedere Equivalenza dei tipi e tipi di interoperabilità incorporati.

Generazione di metadati

Le librerie dei tipi COM possono essere file autonomi con estensione tlb, ad esempio Loanlib.tlb. Alcune librerie dei tipi sono incorporate nella sezione delle risorse di un file .dll o .exe. Altre origini di informazioni sulla libreria dei tipi sono file .olb e .ocx.

Dopo aver individuato la libreria dei tipi che contiene l'implementazione del tipo COM di destinazione, sono disponibili le opzioni seguenti per generare un assembly di interoperabilità contenente i metadati del tipo:

  • Visual Studio

    Visual Studio converte automaticamente i tipi COM contenuti in una libreria dei tipi in metadati all'interno di un assembly. Per istruzioni, vedere Procedura: Aggiungere riferimenti alle librerie dei tipi.

  • Utilità di importazione della libreria dei tipi (Tlbimp.exe)

    L'utilità di importazione libreria dei tipi fornisce opzioni della riga di comando per regolare i metadati nel file di interoperabilità risultante, importa i tipi da una libreria dei tipi esistente e genera un assembly di interoperabilità e uno spazio dei nomi. Per istruzioni, vedere Procedura: Generare assembly di interoperabilità da librerie dei tipi.

  • Classe System.Runtime.InteropServices.TypeLibConverter

    Questa classe fornisce metodi per convertire le coclassi e le interfacce in una libreria dei tipi in metadati all'interno di un assembly. Produce lo stesso output dei metadati di Tlbimp.exe. Tuttavia, a differenza di Tlbimp.exe, la TypeLibConverter classe può convertire una libreria dei tipi in memoria in metadati.

  • Wrapper personalizzati

    Quando una libreria dei tipi non è disponibile o non è corretta, è possibile creare una definizione duplicata della classe o dell'interfaccia nel codice sorgente gestito. Compilare quindi il codice sorgente con un compilatore destinato al runtime per produrre metadati in un assembly.

    Per definire manualmente i tipi COM, è necessario avere accesso agli elementi seguenti:

    • Descrizioni precise delle coclassi e delle interfacce definite.

    • Un compilatore, ad esempio il compilatore C#, che può generare le definizioni di classe .NET Framework appropriate.

    • Conoscenza delle regole di conversione da libreria di tipi a assembly.

    La scrittura di un wrapper personalizzato è una tecnica avanzata. Per altre informazioni su come generare un wrapper personalizzato, vedere Personalizzazione di wrapper standard.

Per ulteriori informazioni sul processo di importazione dell'interoperabilità COM, vedere Riepilogo della Conversione dalla Libreria dei Tipi all'Assembly.

Vedere anche