-collegamento (Visual Basic)-link (Visual Basic)

Indica al compilatore di rendere disponibili al progetto in fase di compilazione le informazioni sui tipi COM presenti negli assembly specificati.Causes the compiler to make COM type information in the specified assemblies available to the project that you are currently compiling.

SintassiSyntax

-link:fileList  

oppureor

-l:fileList  

ArgomentiArguments

NomeTerm DefinizioneDefinition
fileList Obbligatorio.Required. Elenco di nomi di file di assembly delimitato da virgole.Comma-delimited list of assembly file names. Se il nome del file contiene uno spazio, racchiudere il nome tra virgolette.If the file name contains a space, enclose the name in quotation marks.

NoteRemarks

L'opzione -linkconsente di distribuire un'applicazione in cui sono incorporate informazioni sul tipo.The -link option enables you to deploy an application that has embedded type information. 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.The application can then use types in a runtime assembly that implement the embedded type information without requiring a reference to the runtime assembly. 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.If various versions of the runtime assembly are published, the application that contains the embedded type information can work with the various versions without having to be recompiled. Per un esempio, vedere Procedura dettagliata: Incorporamento dei tipi da assembly gestiti.For an example, see Walkthrough: Embedding Types from Managed Assemblies.

L'opzione -link è particolarmente utile quando si usa l'interoperabilità COM.Using the -link option is especially useful when you are working with COM interop. È possibile incorporare tipi COM in modo che per l'applicazione non sia più necessario un assembly di interoperabilità primario nel computer di destinazione.You can embed COM types so that your application no longer requires a primary interop assembly (PIA) on the target computer. 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.The -link option instructs the compiler to embed the COM type information from the referenced interop assembly into the resulting compiled code. Il tipo COM viene identificato dal valore CLSID (GUID).The COM type is identified by the CLSID (GUID) value. 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.As a result, your application can run on a target computer that has installed the same COM types with the same CLSID values. Le applicazioni che consentono di automatizzare Microsoft Office costituiscono un valido esempio.Applications that automate Microsoft Office are a good example. 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.Because applications like Office usually keep the same CLSID value across different versions, your application can use the referenced COM types as long as .NET Framework 4 or later is installed on the target computer and your application uses methods, properties, or events that are included in the referenced COM types.

L'opzione -link incorpora solo interfacce, strutture e delegati.The -link option embeds only interfaces, structures, and delegates. L'incorporamento di classi COM non è supportato.Embedding COM classes is not supported.

Nota

Quando si crea un'istanza di un tipo COM incorporato nel codice, è necessario creare l'istanza usando l'interfaccia appropriata.When you create an instance of an embedded COM type in your code, you must create the instance by using the appropriate interface. Il tentativo di creare un'istanza di un tipo COM incorporato usando la coclasse genera un errore.Attempting to create an instance of an embedded COM type by using the CoClass causes an error.

Per impostare l'opzione -link in Visual Studio, aggiungere un riferimento all'assembly e impostare la proprietà Embed Interop Types su true.To set the -link option in Visual Studio, add an assembly reference and set the Embed Interop Types property to true. Il valore predefinito della proprietà Embed Interop Types è false.The default for the Embed Interop Types property is 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:If you link to a COM assembly (Assembly A) which itself references another COM assembly (Assembly B), you also have to link to Assembly B if either of the following is true:

  • Un tipo dell'assembly A eredita da un tipo o implementa un'interfaccia dall'assembly B.A type from Assembly A inherits from a type or implements an interface from 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.A field, property, event, or method that has a return type or parameter type from Assembly B is invoked.

Usare -LIBPATH per specificare la directory in cui si trova uno o più riferimenti ad assembly.Use -libpath to specify the directory in which one or more of your assembly references is located.

Analogamente /reference all'opzione del compilatore-link , l'opzione del compilatore usa il file di risposta vbc. rsp, che fa riferimento a assembly .NET Framework di uso frequente.Like the /reference compiler option, the -link compiler option uses the Vbc.rsp response file, which references frequently used .NET Framework assemblies. Usare l'opzione del compilatore -noconfig se non si vuole che il compilatore usi il file Vbc. rsp.Use the -noconfig compiler option if you do not want the compiler to use the Vbc.rsp file.

La forma breve di -link è -l.The short form of -link is -l.

Generics e tipi incorporatiGenerics and Embedded Types

Nelle sezioni seguenti vengono descritte le limitazioni all'uso di tipi generici in applicazioni che incorporano tipi di interoperabilità.The following sections describe the limitations on using generic types in applications that embed interop types.

Interfacce genericheGeneric Interfaces

Le interfacce generiche incorporate da un assembly di interoperabilità non possono essere usate,Generic interfaces that are embedded from an interop assembly cannot be used. come illustrato nell'esempio riportato di seguito.This is shown in the following example.

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

Tipi con parametri genericiTypes That Have Generic Parameters

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.Types that have a generic parameter whose type is embedded from an interop assembly cannot be used if that type is from an external assembly. Tale restrizione non si applica tuttavia alle interfacce.This restriction does not apply to interfaces. Si consideri ad esempio l'interfaccia Range definita nell'assembly Microsoft.Office.Interop.Excel.For example, consider the Range interface that is defined in the Microsoft.Office.Interop.Excel assembly. 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.If a library embeds interop types from the Microsoft.Office.Interop.Excel assembly and exposes a method that returns a generic type that has a parameter whose type is the Range interface, that method must return a generic interface, as shown in the following code example.

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.In the following example, client code can call the method that returns the IList generic interface without error.

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

EsempioExample

La riga di comando seguente compila il file di origine OfficeApp.vb e gli assembly di riferimento da COMData1.dll e COMData2.dll per produrre OfficeApp.exe.The following command line compiles source file OfficeApp.vb and reference assemblies from COMData1.dll and COMData2.dll to produce OfficeApp.exe.

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

Vedere ancheSee also