/link (Visual Basic)

Hace que el compilador facilite la información de tipos COM presente en los ensamblados especificados al proyecto que se compila actualmente.

/link:fileList
' -or-
/l:fileList

Argumentos

Término

Definición

fileList

Obligatorio. Lista delimitada por comas de nombres de archivos de ensamblado. Si el nombre de archivo contiene un espacio, incluya el nombre entre comillas.

Comentarios

La opción /link permite implementar una aplicación que contiene información de tipos incrustada. La aplicación puede entonces usar los tipos de un ensamblado del runtime que implementan la información de tipos incrustada sin necesidad de una referencia al ensamblado del runtime. Si se publican varias versiones del ensamblado del runtime, la aplicación que contiene la información de tipos incrustada puede funcionar con las diferentes versiones sin que sea necesario volver a compilarla. Para obtener un ejemplo, vea Tutorial: Incrustar los tipos de los ensamblados administrados (C# y Visual Basic).

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

La opción /link incrusta solamente interfaces, estructuras y delegados. No se admite la incrustación de clases COM.

Nota

Al crear una instancia de un tipo COM incrustado en el código, deberá crear dicha instancia con la interfaz adecuada. Si se intenta crear una instancia de un tipo COM incrustado con el elemento Coclass se produce un error.

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

Si se establece un vínculo con un ensamblado COM (Ensamblado A) que hace referencia a otro ensamblado COM (Ensamblado B), deberá establecer también un vínculo con el Ensamblado B si se da alguna de estas condiciones:

  • Un tipo utilizado en el 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 del Ensamblado B.

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

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

La forma corta de /link es /l.

Tipos incrustados y genéricos

En las secciones siguientes se describen las limitaciones al usar tipos genéricos en las aplicaciones que incrustan tipos de interoperabilidad.

Interfaces genéricas

No se pueden usar interfaces genéricas que se incrustan desde un ensamblado de interoperabilidad. El ejemplo siguiente muestra esta opción.

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

Tipos con parámetros genéricos

Los tipos que tienen un parámetro genérico cuyo tipo se incrusta desde un ensamblado de interoperabilidad no se pueden usar si dicho tipo pertenece a un ensamblado externo. Esta restricción no se aplica a las interfaces. Por ejemplo, considere la interfaz Range que se define en el ensamblado Microsoft.Office.Interop.Excel. Si una biblioteca incrusta tipos de interoperabilidad del ensamblado Microsoft.Office.Interop.Excel y expone un método que devuelve un tipo genérico con un parámetro cuyo tipo es la interfaz Range, 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 interfaz genérica IList 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

El código siguiente compila el archivo de código fuente OfficeApp.vb y los ensamblados de referencia de COMData1.dll y COMData2.dll para generar OfficeApp.exe.

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

Vea también

Tareas

Tutorial: Incrustar los tipos de los ensamblados administrados (C# y Visual Basic)

Referencia

/reference (Visual Basic)

/noconfig

/libpath

Líneas de comandos de compilación de ejemplo (Visual Basic)

Conceptos

Información general sobre la interoperabilidad COM (Visual Basic)

Otros recursos

Compilador de Visual Basic