Condividi tramite


-link (Visual Basic)

Indica al compilatore di rendere disponibili al progetto in fase di compilazione le informazioni sui tipi COM presenti negli assembly specificati.

Sintassi

-link:fileList  

or

-l:fileList  

Argomenti

Termine Definizione
fileList Obbligatorio. Elenco di nomi di file di assembly delimitato da virgole. Se il nome del file contiene uno spazio, racchiudere il nome tra virgolette.

Osservazioni:

L'opzione -linkconsente di distribuire un'applicazione in cui sono incorporate informazioni sul tipo. L'applicazione può quindi usare i tipi in un assembly di runtime che implementano le informazioni sul tipo incorporate senza dovere far riferimento all'assembly di runtime. Se vengono pubblicate diverse versioni dell'assembly di runtime, l'applicazione che contiene le informazioni sul tipo incorporate può funzionare con le diverse versioni senza che sia necessaria la ricompilazione. Per un esempio, vedere Procedura dettagliata: incorporamento dei tipi da assembly gestiti.

L'opzione -link è particolarmente utile quando si usa l'interoperabilità COM. È possibile incorporare tipi COM in modo che per l'applicazione non sia più necessario un assembly di interoperabilità primario nel computer di destinazione. L'opzione -link indica al compilatore di incorporare le informazioni sul tipo COM dall'assembly di interoperabilità a cui si fa riferimento nel codice compilato risultante. Il tipo COM viene identificato dal valore CLSID (GUID). Di conseguenza, l'applicazione può essere eseguita in un computer di destinazione in cui sono stati installati gli stessi tipi COM con gli stessi valori CLSID. Le applicazioni che consentono di automatizzare Microsoft Office costituiscono un valido esempio. Poiché applicazioni come Office mantengono in genere lo stesso valore CLSID in versioni diverse, l'applicazione può usare i tipi COM a cui si fa riferimento purché .NET Framework 4 o versioni successive sia installato nel computer di destinazione e l'applicazione usi metodi, proprietà o eventi inclusi nei tipi COM a cui si fa riferimento.

L'opzione -link incorpora solo interfacce, strutture e delegati. L'incorporamento di classi COM non è supportato.

Nota

Quando si crea un'istanza di un tipo COM incorporato nel codice, è necessario creare l'istanza usando l'interfaccia appropriata. Il tentativo di creare un'istanza di un tipo COM incorporato usando la coclasse genera un errore.

Per impostare l'opzione -link in Visual Studio, aggiungere un riferimento all'assembly e impostare la proprietà Embed Interop Types su true. Il valore predefinito della proprietà Embed Interop Types è false.

Se si collega a un assembly COM (assembly A) che fa riferimento a un altro assembly COM (assembly B), è necessario eseguire il collegamento anche all'assembly B se si verifica una delle condizioni seguenti:

  • Un tipo dell'assembly A eredita da un tipo o implementa un'interfaccia dall'assembly B.

  • Viene richiamato un campo, una proprietà, un evento o un metodo che presenta un tipo restituito o un tipo di parametro proveniente dall'assembly B.

Per specificare la directory in cui si trovano uno o più assembly cui si fa riferimento, usare -libpath.

Come l'opzione del compilatore -reference, l'opzione del compilatore -link usa il file di risposta Vbc.rsp, che fa riferimento agli assembly .NET Framework di uso più frequente. Usare l'opzione del compilatore -noconfig se non si vuole che il compilatore usi il file Vbc.rsp.

La forma breve di -link è -l.

Generics e tipi incorporati

Nelle sezioni seguenti vengono descritte le limitazioni all'uso di tipi generici in applicazioni che incorporano tipi di interoperabilità.

Interfacce generiche

Le interfacce generiche incorporate da un assembly di interoperabilità non possono essere usate, come illustrato nell'esempio seguente.

' The following code causes an error if ISampleInterface is an embedded interop type.
Dim sample As ISampleInterface(Of SampleType)

Tipi con parametri generici

I tipi che hanno un parametro generico il cui tipo è incorporato da un assembly di interoperabilità non possono essere usati se tale tipo proviene da un assembly esterno. Tale restrizione non si applica tuttavia alle interfacce. Si consideri ad esempio l'interfaccia Range definita nell'assembly Microsoft.Office.Interop.Excel. Se una libreria incorpora tipi di interoperabilità dall'assembly Microsoft.Office.Interop.Excel ed espone un metodo che restituisce un tipo generico che ha un parametro il cui tipo è l'interfaccia Range, il metodo deve restituire un'interfaccia generica, come illustrato nell'esempio di codice seguente.

Imports System.Collections.Generic
Imports Microsoft.Office.Interop.Excel

Class Utility
    ' The following code causes an error when called by a client assembly.
    Public Function GetRange1() As List(Of Range)
End Function

' The following code is valid for calls from a client assembly.
Public Function GetRange2() As IList(Of Range)
    End Function
End Class

Nell'esempio seguente, il codice client può chiamare il metodo che restituisce l'interfaccia generica IList senza errori.

Module Client
    Public Sub Main()
        Dim util As New Utility()

        ' The following code causes an error.
        Dim rangeList1 As List(Of Range) = util.GetRange1()

        ' The following code is valid.
        Dim rangeList2 As List(Of Range) = CType(util.GetRange2(), List(Of Range))
    End Sub
End Module

Esempio

Nella riga di comando riportata di seguito viene compilato il file di origine OfficeApp.vb e viene fatto riferimento agli assembly di COMData1.dll e COMData2.dll per generare OfficeApp.exe.

vbc -link:COMData1.dll,COMData2.dll -out:OfficeApp.exe OfficeApp.vb  

Vedi anche