Condividi tramite


-link (Visual Basic)

Fa in modo che il compilatore renda disponibili al progetto le informazioni sul tipo COM negli assembly specificati attualmente in fase di compilazione.

Sintassi

-link:fileList  

o

-l:fileList  

Argomenti

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

Osservazioni:

L'opzione -link consente di distribuire un'applicazione con informazioni sul tipo incorporate. L'applicazione può quindi usare i tipi in un assembly di runtime che implementano le informazioni sul tipo incorporato senza richiedere un riferimento all'assembly di runtime. Se vengono pubblicate diverse versioni dell'assembly di runtime, l'applicazione che contiene le informazioni sul tipo incorporato può funzionare con le varie versioni senza dover essere ricompilata. Per un esempio, vedere Procedura dettagliata: Incorporamento di tipi da assembly gestiti.

L'uso dell'opzione -link è particolarmente utile quando si utilizza l'interoperabilità COM. È possibile incorporare tipi COM in modo che l'applicazione non richieda più un assembly di interoperabilità primario (PIA) 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 è identificato dal valore CLSID (GUID). Di conseguenza, l'applicazione può essere eseguita in un computer di destinazione che ha installato gli stessi tipi COM con gli stessi valori CLSID. Le applicazioni che automatizzano Microsoft Office sono un buon esempio. Poiché le applicazioni come Office mantengono lo stesso valore CLSID in versioni diverse, l'applicazione può usare i tipi COM a cui si fa riferimento, purché .NET Framework 4 o versione successiva 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 delle classi COM non è supportato.

Annotazioni

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 tramite CoClass genera un errore.

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

Se si esegue il collegamento a un assembly COM (Assembly A) che fa riferimento a un altro assembly COM (Assembly B), è necessario collegarsi all'assembly B se una delle condizioni seguenti è vera:

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

  • Viene richiamato un campo, una proprietà, un evento o un metodo con un tipo restituito o un tipo di parametro da Assembly B.

Usare -libpath per specificare la directory in cui si trovano uno o più riferimenti all'assembly.

Analogamente all'opzione del compilatore -reference , l'opzione -link del compilatore usa il file di risposta Vbc.rsp, che fa riferimento agli assembly .NET Framework usati di 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

Le sezioni seguenti descrivono le limitazioni sull'uso di tipi generici nelle applicazioni che incorporano tipi di interoperabilità.

Interfacce generiche

Non è possibile usare interfacce generiche incorporate da un assembly di interoperabilità. Questo è 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 con un parametro generico il cui tipo è incorporato da un assembly di interoperabilità non possono essere utilizzati se tale tipo proviene da un assembly esterno. Questa restrizione non si applica 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 con un parametro il cui tipo è l'interfaccia Range , tale 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 IList generica 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

La riga di comando seguente compila i file OfficeApp.vb di origine e gli assembly di riferimento da COMData1.dll e COMData2.dll per produrre OfficeApp.exe.

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

Vedere anche