/link ( Opçõesdo compilador de C#)
Faz o compilador disponibilizar informações de tipo COM nos assemblies do especificado para o projeto que você está compilando no momento.
/link:fileList
// -or-
/l:fileList
Argumentos
- 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
O /link opção permite que você implantar um aplicativo que incorporou o tipo de informações. O aplicativo pode usar tipos que implementam as informações de tipo incorporados sem exigir uma referência ao assembly em tempo de execução em um assembly em tempo de execução. Se forem publicadas várias versões do assembly em tempo de execução, o aplicativo que contém a informação sobre tipos incorporados pode trabalhar com várias versões sem ter que ser recompilado. Para um exemplo, consulte Demonstra Passo a passo: Tipos de incorporação de Assemblies gerenciados (C# e Visual Basic).
Usando o /link opção é especialmente útil quando você estiver trabalhando com interoperabilidade de COM. Você pode incorporar tipos COM para que seu aplicativo não requer mais um assembly de interoperabilidade primária (PIA) no computador de destino. O /link opção instrui o compilador para incorporar as informações de tipo COM da interop assembly referenciado para o código compilado resultante. O tipo de COM é identificado pelo valor CLSID (GUID). Como resultado, seu aplicativo pode ser executado em um computador de destino que tenha instalado os mesmos tipos de COM os mesmos valores CLSID. Os aplicativos que automatizam os Microsoft Office são um bom exemplo. Porque aplicativos como o Office em geral mantêm o mesmo valor CLSID entre diferentes versões, seu aplicativo pode usar tipos COM referenciado tão longos quanto.NET Framework 4 ou posterior está instalado no computador de destino e o seu aplicativo usa os métodos, propriedades ou eventos que estão incluídos no referido tipos COM.
O /link opção incorpora apenas interfaces, estruturas e delegados. Não há suporte para classes COM a incorporação.
Observação |
---|
Quando você cria uma instância do tipo COM incorporado no seu código, você deve criar a instância usando a interface apropriada. Tentativa de criar uma instância do tipo COM incorporado usando o CoClass causa um erro. |
Para definir o /link opção na Visual Studio, adicione uma referência de assembly e definir o Embed Interop Types propriedade para true. O padrão para o Embed Interop Types é a propriedade false.
Se você vincular a um assembly de COM (um Assembly) que faz referência a outro assembly de COM (Assembly B), você também deve vincular ao Assembly B, se uma das seguintes opções for verdadeira:
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 o /reference opção de compilador, o /link opção de compilador usa o arquivo de resposta de Csc.rsp, que freqüentemente as referências usadas .NET Framework assemblies. Use o /noconfig opção de compilador se não quiser que o compilador para usar o arquivo Csc.rsp.
A forma abreviada de /link é /l.
Genéricos e tipos incorporados
As seções a seguir descrevem as limitações no uso de tipos genéricos em aplicativos que incorporam os tipos de interoperabilidade.
Interfaces Genéricas
Interfaces genéricas que são incorporados a partir de um assembly de interoperabilidade não podem ser usados. Isto é mostrado no exemplo a seguir.
// The following code causes an error if ISampleInterface is an embedded interop type.
ISampleInterface<SampleType> sample;
Tipos que possuem parâmetros genéricos
Tipos que têm um parâmetro genérico cujo tipo é incorporado a partir de um assembly de interoperabilidade não podem ser usados se que é do tipo de um assembly externo. Essa restrição não se aplicam a interfaces. Por exemplo, considere a Range interface é definido na Microsoft.Office.Interop.Excel assembly. Se uma biblioteca incorpora os tipos de interoperabilidade da Microsoft.Office.Interop.Excel assembly e expõe um método que retorna um tipo genérico que tem um parâmetro cujo tipo é o Range interface, que o 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 o IList interface genérica 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 compila o arquivo de origem OfficeApp.cs e assemblies de referência de COMData1.dll e COMData2.dll para produzir OfficeApp.exe.
csc /link:COMData1.dll,COMData2.dll /out:OfficeApp.exe OfficeApp.cs
Consulte também
Tarefas
Demonstra Passo a passo: Tipos de incorporação de Assemblies gerenciados (C# e Visual Basic)
Referência
/Reference ( Opçõesdo compilador de C#)
/noconfig ( Opçõesdo compilador de C#)
Visão geral da interoperabilidade (guia de programação TRANSLATION FROM VPE FOR CSHARP)
Conceitos
Comando -linha criando com CSC