Compartilhar via


/link (opções do compilador C#)

Faz com que o compilador faça as informações de tipo COM em assemblies especificados disponíveis para o projeto que você está criando atualmente.

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

Arguments

  • fileList
    Obrigatório. Lista separada por vírgulas de nomes de arquivo da montagem. Se o nome do arquivo contiver um espaço, envolva-o com aspas ("").

Comentários

A opção de /link permite implantar um aplicativo que insira as informações de tipo. O aplicativo pode usar em um assembly de tempo de execução que implementa as informações de tipo inserido sem exigir uma referência ao assembly de tempo de execução. Se várias versões de assembly de tempo de execução são publicadas, o aplicativo que contém informações de tipo inserido pode trabalhar com várias versões sem precisar ser recompilado. Para ver um exemplo, consulte Instruções passo a passo: inserindo tipos de assemblies gerenciados (C# e Visual Basic).

Usar a opção de /link é especialmente útil quando você está trabalhando com interoperabilidade COM. Você pode inserir tipos de COM de modo que seu aplicativo não exigir um assembly de interoperabilidade primária (PIA) no computador de destino. A opção de /link instrui o compilador para inserir as informações de tipo COM do assembly referenciado de interoperabilidade no código compilado resultante. O tipo da é identificado pelo valor de CLSID (GUID). No, o aplicativo pode executar em um computador de destino que tenha os mesmos tipos de COM com os mesmos valores de CLSID. Os aplicativos que automatizam o Microsoft Office são um bom exemplo. Como os aplicativos como o Office mantém geralmente o mesmo valor de CLSID por versões diferentes, o aplicativo pode usar os tipos de referenciados como é instalado COM o .NET Framework 4 ou posterior no computador de destino e seu aplicativo usa métodos, propriedades, ou os eventos que são incluídos em referenciado COM tipo.

A opção de /link inserir apenas interfaces, estruturas, e delegados. As classes COM da inserção não têm suporte.

Dica

Quando você cria uma instância de COM inserido digite em seu código, você deve criar a instância usando a interface apropriado.Tentar criar uma instância de um tipo inserida da usando o CoClass causa um erro.

Para definir a opção de /link em Visual Studio, adicionar uma referência de assembly e define a propriedade de Embed Interop Types a true. A opção da propriedade de Embed Interop Types é false.

Se você vincular a um assembly (COM o assembly Ao próprio) que faz referência a outro assembly COM assembly (B), você também tem que indique ao assembly B se qualquer um dos seguintes for verdadeiro:

  • Um tipo do Assembly A herda de um tipo ou implementa uma interface do Assembly B.

  • Um campo, propriedade, evento ou método que possui um tipo de retorno ou tipo de parâmetro de Assembly B é chamado.

Como a opção do compilador de /reference , a opção do compilador de /link usa o arquivo de resposta de Csc.rsp, que faz referência aos assemblies usados com frequência de .NET Framework . Use a opção do compilador de /noconfig se você não quiser que o compilador para usar o arquivo de Csc.rsp.

A forma abreviada de /link é /l.

Produtos e tipos genéricos inseridos

As seções a seguir descrevem as restrições no genérico nos aplicativos que incorporam tipos de interoperabilidade.

Interfaces Genéricas

As interfaces genéricas que são inseridas de um assembly de interoperabilidade não podem ser usadas. Isso é mostrado no exemplo a seguir.

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

Tipos que tem parâmetros genéricas

Tipos que tem um parâmetro cujo tipo genérico seja digitado de um assembly de interoperabilidade não pode ser usado se esse tipo for de um assembly externo. Essa restrição não se aplica às interfaces. Por exemplo, considere a interface de Range que é definida no assembly de Microsoft.Office.Interop.Excel . Se uma biblioteca inserir tipos de interoperabilidade de assembly de Microsoft.Office.Interop.Excel e expõe um método que retorna um tipo genérico que possui um parâmetro cujo tipo é a interface de Range , esse método deve retornar uma interface genérica, conforme mostrado no seguinte exemplo de código.

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 de cliente pode chamar o método que retorna a interface genérica de IList sem erro.

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();
    }
}

Exemplo

O código a seguir cria o arquivo de origem OfficeApp.cs e os assemblies de referência de COMData1.dll e de COMData2.dll para gerar OfficeApp.exe.

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

Consulte também

Tarefas

Instruções passo a passo: inserindo tipos de assemblies gerenciados (C# e Visual Basic)

Referência

/reference (opções do compilador C#)

/noconfig (opções do compilador C#)

Visão geral sobre interoperabilidade (Guia de Programação em C#)

Conceitos

Compilação pela linha de comando com csc.exe

Outros recursos

Opções do compilador de C#