-link (Opciones del compilador de C#)-link (C# Compiler Options)

Hace que el compilador facilite al proyecto que se está compilando información de tipos COM en los ensamblados especificados.Causes the compiler to make COM type information in the specified assemblies available to the project that you are currently compiling.

SintaxisSyntax

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

ArgumentosArguments

fileList
Obligatorio.Required. Lista delimitada por comas de nombres de archivos de ensamblado.Comma-delimited list of assembly file names. Si el nombre de archivo contiene un espacio, escríbalo entre comillas.If the file name contains a space, enclose the name in quotation marks.

ComentariosRemarks

La opción -link permite implementar una aplicación que tiene información de tipo incrustada.The -link option enables you to deploy an application that has embedded type information. La aplicación puede usar los tipos de un ensamblado en tiempo de ejecución que implementan la información de tipo incrustada sin necesidad de una referencia al ensamblado en tiempo de ejecución.The application can then use types in a runtime assembly that implement the embedded type information without requiring a reference to the runtime assembly. Si hay varias versiones del ensamblado en tiempo de ejecución publicadas, la aplicación que contiene la información de tipo incrustada puede trabajar con las distintas versiones sin tener que volver a compilar.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. Para obtener un ejemplo, vea Tutorial: Insertar los tipos de los ensamblados administrados.For an example, see Walkthrough: Embedding Types from Managed Assemblies.

La opción -link resulta de especial utilidad cuando se trabaja con la interoperabilidad COM.Using the -link option is especially useful when you are working with COM interop. Puede incrustar tipos COM para que la aplicación ya no necesite un ensamblado de interoperabilidad primario (PIA) en el equipo de destino.You can embed COM types so that your application no longer requires a primary interop assembly (PIA) on the target computer. La opción -link indica al compilador que incruste la información de tipo COM del ensamblado de interoperabilidad al que se hace referencia en el código compilado resultante.The -link option instructs the compiler to embed the COM type information from the referenced interop assembly into the resulting compiled code. El tipo COM se identifica mediante el valor de CLSID (GUID).The COM type is identified by the CLSID (GUID) value. 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.As a result, your application can run on a target computer that has installed the same COM types with the same CLSID values. Las aplicaciones que automatizan Microsoft Office son un buen ejemplo.Applications that automate Microsoft Office are a good example. Dado que las aplicaciones como Office suelen mantener el mismo valor de CLSID en las 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 emplee métodos, propiedades o eventos que estén incluidos en los tipos COM a los que se hace referencia.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.

La opción -link incrusta únicamente interfaces, estructuras y delegados.The -link option embeds only interfaces, structures, and delegates. No se admite la incrustación de clases COM.Embedding COM classes is not supported.

Nota

Cuando se crea una instancia de un tipo COM incrustado en el código, hay que crear la instancia mediante la interfaz adecuada.When you create an instance of an embedded COM type in your code, you must create the instance by using the appropriate interface. Si se intenta crear una instancia de un tipo COM incrustado mediante la coclase, se produce un error.Attempting to create an instance of an embedded COM type by using the CoClass causes an error.

Para establecer la opción -link en Visual Studio, agregue una referencia de ensamblado y establezca la propiedad Embed Interop Types en true.To set the -link option in Visual Studio, add an assembly reference and set the Embed Interop Types property to true. El valor predeterminado de la propiedad Embed Interop Types es false.The default for the Embed Interop Types property is false.

Si vincula a un ensamblado COM (ensamblado A) que a su vez hace referencia a otro ensamblado COM (ensamblado B), también debe vincular al ensamblado B si se cumple alguna de las siguientes condiciones: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 del ensamblado A hereda de un tipo o implementa una interfaz del ensamblado B.A type from Assembly A inherits from a type or implements an interface from Assembly B.

  • Se invoca a un campo, una propiedad, un evento o un método que tiene un tipo de parámetro o un tipo de valor devuelto del ensamblado B.A field, property, event, or method that has a return type or parameter type from Assembly B is invoked.

Al igual que la opción del compilador -reference, la opción del compilador -link usa el archivo de respuesta Csc.rsp, que hace referencia a ensamblados de .NET Framework usados con frecuencia.Like the -reference compiler option, the -link compiler option uses the Csc.rsp response file, which references frequently used .NET Framework assemblies. Use la opción del compilador -noconfig si no quiere que el compilador emplee el archivo Csc.rsp.Use the -noconfig compiler option if you do not want the compiler to use the Csc.rsp file.

La forma abreviada de -link es -l.The short form of -link is -l.

Tipos incrustados y genéricosGenerics and Embedded Types

En las secciones siguientes se describen las limitaciones sobre el uso de tipos genéricos en aplicaciones que incrustan tipos de interoperabilidad.The following sections describe the limitations on using generic types in applications that embed interop types.

Interfaces genéricasGeneric Interfaces

No se puede usar interfaces genéricas que se incrusten desde un ensamblado de interoperabilidad.Generic interfaces that are embedded from an interop assembly cannot be used. Esta implementación se muestra en el ejemplo siguiente.This is shown in the following example.

// The following code causes an error if ISampleInterface is an embedded interop type.
ISampleInterface<SampleType> sample;

Tipos que tienen parámetros genéricosTypes That Have Generic Parameters

Los tipos que tienen un parámetro genérico cuyo tipo se ha incrustado desde un ensamblado de interoperabilidad no se pueden usar si ese tipo pertenece a un ensamblado externo.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. Esta restricción no se aplica a las interfaces.This restriction does not apply to interfaces. Por ejemplo, considere la interfaz Range que se define en el ensamblado Microsoft.Office.Interop.Excel.For example, consider the Range interface that is defined in the Microsoft.Office.Interop.Excel assembly. Si una biblioteca inserta tipos de interoperabilidad desde el ensamblado Microsoft.Office.Interop.Excel y expone un método que devuelve un tipo genérico que tiene 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.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.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Excel;

public class Utility
{
    // The following code causes an error when called by a client assembly.
    public List<Range> GetRange1() {
}

// The following code is valid for calls from a client assembly.
public IList<Range> GetRange2() {
    }
}

En el ejemplo siguiente, el código de cliente puede llamar al método que devuelve la interfaz genérica IList sin errores.In the following example, client code can call the method that returns the IList generic interface without error.

public class Client
{
    public void Main()
    {
        Utility util = new Utility();

        // The following code causes an error.
        List<Range> rangeList1 = util.GetRange1();

        // The following code is valid.
        List<Range> rangeList2 = (List<Range>)util.GetRange2();
    }
}

EjemploExample

El código siguiente compila el archivo de origen OfficeApp.cs y hace referencia a ensamblados de COMData1.dll y COMData2.dll para generar OfficeApp.exe.The following code compiles source file OfficeApp.cs and reference assemblies from COMData1.dll and COMData2.dll to produce OfficeApp.exe.

csc -link:COMData1.dll,COMData2.dll -out:OfficeApp.exe OfficeApp.cs  

Vea tambiénSee also