/link (opzioni del compilatore C#)

Indica al compilatore di rendere disponibili al progetto in corso di compilazione tutte le informazioni sui tipi COM presenti nei file specificati.

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

Argomenti

  • fileList
    Obbligatorio. Elenco delimitato da virgole di nomi di file di assembly. Se il nome del file contiene uno spazio, racchiuderlo tra virgolette.

Note

L'opzione /link consente di distribuire un'applicazione che ha incorporato informazioni sul tipo. L'applicazione può quindi utilizzare i tipi in un assembly di runtime che implementa le informazioni sul tipo incorporate senza richiedere un riferimento all'assembly di runtime. Se vengono pubblicate diverse versioni dell'assembly di runtime, l'applicazione che contiene le informazioni sul tipo incorporate può funzionare con le diverse versioni senza che sia necessaria la ricompilazione. Per un esempio, vedere Procedura dettagliata: incorporamento dei tipi da assembly gestiti (C# e Visual Basic).

L'utilizzo dell'opzione /link è particolarmente utile quando si utilizza l'interoperabilità COM. È possibile incorporare tipi COM in modo che l'applicazione non richieda più un assembly di interoperabilità primario (PIA) nel computer di destinazione. L'opzione /link indica al compilatore di incorporare le informazioni sul tipo COM dall'assembly di interoperabilità a cui si fa riferimento nel codice compilato risultante. Il tipo COM viene identificato dal valore CLSID (GUID). Di conseguenza, l'applicazione può essere eseguita in un computer di destinazione in cui sono stati installati gli stessi tipi COM con gli stessi valori CLSID. Le applicazioni che consentono di automatizzare Microsoft Office costituiscono un valido esempio. Poiché applicazioni come Office mantengono in genere lo stesso valore CLSID in versioni diverse, l'applicazione può utilizzare i tipi COM a cui si fa riferimento purché .NET Framework 4 o versioni successive sia installato nel computer di destinazione e l'applicazione utilizzi metodi, proprietà o eventi inclusi nei tipi COM a cui si fa riferimento.

L'opzione /link incorpora solo interfacce, strutture e delegati. L'incorporamento di classi COM non è supportato.

Nota

Quando si crea un'istanza di un tipo COM incorporato nel codice, è necessario creare l'istanza utilizzando l'interfaccia appropriata. Il tentativo di creare un'istanza di un tipo COM incorporato utilizzando la coclasse provoca un errore.

Per impostare l'opzione /link in Visual Studio, aggiungere un riferimento all'assembly e impostare la proprietà Embed Interop Types su true. Il valore predefinito della proprietà Embed Interop Types è false.

Se si esegue il collegamento a un assembly COM (assembly A) che fa riferimento a un altro assembly COM (assembly B), è necessario eseguire il collegamento anche all'assembly B se si verifica una delle seguenti condizioni:

  • Se un tipo dell'assembly A eredita da un tipo o implementa un'interfaccia dall'assembly B.

  • Se viene richiamato un campo, una proprietà, un evento o un metodo che presenta un tipo restituito o un tipo di parametro proveniente dall'assembly B.

Come l'opzione del compilatore /reference, l'opzione del compilatore /link utilizza il file di risposta Csc.rsp che fa riferimento agli assembly .NET Framework utilizzati di frequente. Utilizzare l'opzione del compilatore /noconfig se non si desidera che il compilatore utilizzi il file Csc.rsp.

La forma breve di /link è /l.

Generics e tipi incorporati

Nelle sezioni seguenti vengono descritte le limitazioni all'utilizzo di tipi generici in applicazioni che incorporano tipi di interoperabilità.

Interfacce generiche

Le interfacce generiche incorporate da un assembly di interoperabilità non possono essere utilizzate, come illustrato nell'esempio seguente.

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

Tipi con parametri generici

I tipi che dispongono di un parametro generico il cui tipo è incorporato da un assembly di interoperabilità non possono essere utilizzati se tale tipo proviene da un assembly esterno. La restrizione, tuttavia, non si applica alle interfacce. Si consideri, ad esempio, l'interfaccia Range definita nell'assembly Microsoft.Office.Interop.Excel. Se una libreria incorpora tipi di interoperabilità dall'assembly Microsoft.Office.Interop.Excel ed espone un metodo che restituisce un tipo generico che dispone di un parametro il cui tipo è l'interfaccia Range, tale metodo deve restituire un'interfaccia generica, come illustrato nell'esempio di codice seguente.

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() {


...


    }
}

Nell'esempio seguente, il codice client può chiamare il metodo che restituisce l'interfaccia generica IList senza errori.

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

Esempio

Nel codice riportato di seguito viene compilato il file di origine OfficeApp.cs e viene fatto riferimento agli assembly di COMData1.dll e COMData2.dll per generare OfficeApp.exe.

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

Vedere anche

Attività

Procedura dettagliata: incorporamento dei tipi da assembly gestiti (C# e Visual Basic)

Riferimenti

/reference (opzioni del compilatore C#)

/noconfig (opzioni del compilatore C#)

Cenni preliminari sull'interoperabilità (Guida per programmatori C#)

Concetti

Compilazione dalla riga di comando con csc.exe

Altre risorse

Opzioni del compilatore C#