Compartir a través de


-link (Visual Basic)

Hace que el compilador haga que la información de tipo COM de los ensamblados especificados esté disponible para el proyecto que está compilando actualmente.

Sintaxis

-link:fileList  

o

-l:fileList  

Argumentos

Término Definición
fileList Obligatorio. Lista delimitada por comas de nombres de archivo de ensamblado. Si el nombre de archivo contiene un espacio, escriba el nombre entre comillas.

Observaciones

La -link opción permite implementar una aplicación que tenga información de tipo incrustada. Después, la aplicación puede usar tipos en un ensamblado en tiempo de ejecución que implemente la información de tipo incrustado sin necesidad de hacer referencia al ensamblado en tiempo de ejecución. Si se publican varias versiones del ensamblado en tiempo de ejecución, la aplicación que contiene la información del tipo incrustado puede funcionar con las distintas versiones sin tener que volver a compilarse. Para obtener un ejemplo, consulte Tutorial: Inserción de tipos desde ensamblados administrados.

El uso de la -link opción es especialmente útil cuando se trabaja con interoperabilidad COM. Puede insertar tipos COM para que la aplicación ya no requiera un ensamblado de interoperabilidad principal (PIA) en el equipo de destino. La -link opción indica al compilador que inserte la información de tipo COM del ensamblado de interoperabilidad al que se hace referencia en el código compilado resultante. El tipo COM se identifica mediante el valor clSID (GUID). Como resultado, la aplicación puede ejecutarse en un equipo de destino que haya instalado los mismos tipos COM con los mismos valores CLSID. Las aplicaciones que automatizan Microsoft Office son un buen ejemplo. Dado que las aplicaciones como Office suelen mantener el mismo valor CLSID en distintas versiones, la aplicación puede usar los tipos COM a los que se hace referencia siempre que .NET Framework 4 o posterior esté instalado en el equipo de destino y la aplicación use métodos, propiedades o eventos que se incluyen en los tipos COM a los que se hace referencia.

La -link opción inserta solo interfaces, estructuras y delegados. No se admite la inserción de clases COM.

Nota:

Al crear una instancia de un tipo COM incrustado en el código, debe crear la instancia mediante la interfaz adecuada. Si se intenta crear una instancia de un tipo COM incrustado mediante CoClass, se produce un error.

Para establecer la -link opción en Visual Studio, agregue una referencia de ensamblado y establezca la Embed Interop Types propiedad en true. El valor predeterminado de la Embed Interop Types propiedad es false.

Si vincula a un ensamblado COM (Ensamblado A) que hace referencia a otro ensamblado COM (ensamblado B), también tiene que vincular al ensamblado B si se cumple alguna de las siguientes condiciones:

  • Un tipo de Ensamblado A hereda de un tipo o implementa una interfaz del Ensamblado B.

  • Se invoca un campo, una propiedad, un evento o un método que tiene un tipo de valor devuelto o un tipo de parámetro de Assembly B.

Use -libpath para especificar el directorio en el que se encuentran una o varias de las referencias de ensamblado.

Al igual que la opción del compilador -reference , la -link opción del compilador usa el archivo de respuesta Vbc.rsp, que hace referencia a ensamblados de .NET Framework usados con frecuencia. Use la opción del compilador -noconfig si no desea que el compilador use el archivo Vbc.rsp.

La forma abreviada de -link es -l.

Genéricos y tipos incrustados

En las secciones siguientes se describen las limitaciones del uso de tipos genéricos en aplicaciones que insertan tipos de interoperabilidad.

Interfaces genéricas

No se pueden usar interfaces genéricas incrustadas desde un ensamblado de interoperabilidad. Esto se muestra en el ejemplo siguiente.

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

Tipos que tienen parámetros genéricos

Los tipos que tienen un parámetro genérico cuyo tipo está incrustado desde un ensamblado de interoperabilidad no se pueden usar si ese tipo procede de un ensamblado externo. Esta restricción no se aplica a las interfaces. Por ejemplo, considere la Range interfaz definida en el Microsoft.Office.Interop.Excel ensamblado. Si una biblioteca inserta tipos de interoperabilidad del Microsoft.Office.Interop.Excel ensamblado y expone un método que devuelve un tipo genérico que tiene un parámetro cuyo tipo es la Range interfaz, ese método debe devolver una interfaz genérica, como se muestra en el ejemplo de código siguiente.

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

En el ejemplo siguiente, el código de cliente puede llamar al método que devuelve la IList interfaz genérica sin errores.

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

Ejemplo

La siguiente línea de comandos compila el archivo OfficeApp.vb de origen y los ensamblados de referencia desde COMData1.dll y COMData2.dll para generar OfficeApp.exe.

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

Consulte también