-link (opções do compilador C#)-link (C# Compiler Options)

Faz com que o compilador disponibilize as informações de tipo COM nos assemblies especificados para o projeto sendo compilado no momento.Causes the compiler to make COM type information in the specified assemblies available to the project that you are currently compiling.

SintaxeSyntax

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

ArgumentsArguments

fileList
Necessário.Required. Lista delimitada por vírgulas de nomes de arquivo do assembly.Comma-delimited list of assembly file names. Se o nome do arquivo contém um espaço, coloque o nome entre aspas.If the file name contains a space, enclose the name in quotation marks.

ComentáriosRemarks

A opção -link permite que você implante um aplicativo que inseriu informações de tipo.The -link option enables you to deploy an application that has embedded type information. O aplicativo pode usar tipos em um assembly de tempo de execução que implementa as informações de tipo inseridas sem a necessidade de uma referência ao assembly de tempo de execução.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 forem publicadas várias versões do assembly de tempo de execução, o aplicativo que contém as informações de tipo inseridas poderá trabalhar com as várias versões sem precisar ser recompilado.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 obter um exemplo, confira Passo a passo: inserir tipos de assemblies gerenciados.For an example, see Walkthrough: Embedding Types from Managed Assemblies.

Usar a opção -link é especialmente útil quando você está trabalhando com a interoperabilidade COM.Using the -link option is especially useful when you are working with COM interop. Você pode inserir tipos COM para que seu aplicativo não precise mais de um PIA (assembly de interoperabilidade primário) no computador de destino.You can embed COM types so that your application no longer requires a primary interop assembly (PIA) on the target computer. A opção -link instrui o compilador a inserir as informações de tipo de COM do assembly de interoperabilidade referenciado no 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. O tipo COM é identificado pelo valor CLSID (GUID).The COM type is identified by the CLSID (GUID) value. Como resultado, o aplicativo pode ser executado em um computador de destino que tem os mesmos tipos COM instalados com os mesmos valores CLSID.As a result, your application can run on a target computer that has installed the same COM types with the same CLSID values. Os aplicativos que automatizam o Microsoft Office são um bom exemplo.Applications that automate Microsoft Office are a good example. Como aplicativos como o Office normalmente mantêm o mesmo valor CLSID entre diferentes versões, seu aplicativo pode usar os tipos COM referenciados contanto que o .NET Framework 4 ou posterior esteja instalado no computador de destino e seu aplicativo use métodos, propriedades ou eventos que estão incluídos nos tipos COM referenciados.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.

A opção -link incorpora apenas interfaces, estruturas e delegados.The -link option embeds only interfaces, structures, and delegates. Não há suporte para a inserção de classes COM.Embedding COM classes is not supported.

Observação

Quando você cria uma instância de um tipo COM inserido no seu código, você deve criar a instância usando a interface apropriada.When you create an instance of an embedded COM type in your code, you must create the instance by using the appropriate interface. Tentar criar uma instância de um tipo COM inserido usando o CoClass causa um erro.Attempting to create an instance of an embedded COM type by using the CoClass causes an error.

Para definir a opção -link em Visual Studio, adicione uma referência de assembly e defina a propriedade Embed Interop Types como true.To set the -link option in Visual Studio, add an assembly reference and set the Embed Interop Types property to true. O valor padrão da propriedade Embed Interop Types é false.The default for the Embed Interop Types property is false.

Se você vincular a um assembly COM (Assembly A) que em si faz referência a outro assembly COM (Assembly B), também precisará vincular ao Assembly B se uma das seguintes opções for verdadeira: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:

  • Um tipo do Assembly A herda de um tipo ou implementa uma interface do Assembly B.A type from Assembly A inherits from a type or implements an interface from Assembly B.

  • Um campo, propriedade, evento ou método que tem um tipo de retorno ou de parâmetro do Assembly B é invocado.A field, property, event, or method that has a return type or parameter type from Assembly B is invoked.

Como a opção do compilador -reference, a opção do compilador -link usa o arquivo de resposta Csc.rsp, que faz referência a assemblies do .NET Framework usados com frequência.Like the -reference compiler option, the -link compiler option uses the Csc.rsp response file, which references frequently used .NET Framework assemblies. Use a opção do compilador -noconfig se não quiser que o compilador use o arquivo Csc.rsp.Use the -noconfig compiler option if you do not want the compiler to use the Csc.rsp file.

A forma abreviada de -link é -l.The short form of -link is -l.

Tipos genéricos e inseridosGenerics and Embedded Types

As seções a seguir descrevem as limitações no uso de tipos genéricos em aplicativos que inserem tipos de interoperabilidade.The following sections describe the limitations on using generic types in applications that embed interop types.

Interfaces genéricasGeneric Interfaces

As interfaces genéricas que são inseridas de um assembly de interoperabilidade não podem ser usadas.Generic interfaces that are embedded from an interop assembly cannot be used. Isso é mostrado no exemplo a seguir.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 têm parâmetros genéricosTypes That Have Generic Parameters

Os tipos que têm um parâmetro genérico cujo tipo é inserido de um assembly de interoperabilidade não poderão ser usados se o tipo for de um assembly 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. Essa restrição não se aplica a interfaces.This restriction does not apply to interfaces. Por exemplo, considere a interface Range que é definida no assembly Microsoft.Office.Interop.Excel.For example, consider the Range interface that is defined in the Microsoft.Office.Interop.Excel assembly. Se uma biblioteca insere tipos de interoperabilidade do assembly Microsoft.Office.Interop.Excel e expõe um método que retorna um tipo genérico que tem um parâmetro cujo tipo é a interface Range, esse método deve retornar uma interface genérica, como mostrado no exemplo de código a seguir.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() {
    }
}

No exemplo a seguir, o código do cliente pode chamar o método que retorna a interface genérica IList sem erros.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();
    }
}

ExemploExample

O código a seguir compila o arquivo de origem OfficeApp.cs e faz referência aos assemblies de COMData1.dll e COMData2.dll para produzir 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  

Consulte tambémSee also