/link (Options du compilateur C#)

Force le compilateur à donner des informations de type COM dans les assemblys spécifiés disponibles pour le projet en cours de compilation.

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

Arguments

  • fileList
    Obligatoire. Liste délimitée par des virgules de noms de fichiers d'assembly. Si le nom de fichier contient un espace, mettez le nom entre guillemets.

Notes

L'option /link vous permet de déployer une application qui a des informations de type incorporées. L'application peut ensuite utiliser des types dans un assembly de runtime qui implémente les informations de type incorporées sans requérir une référence à l'assembly de runtime. Si différentes versions de l'assembly de runtime sont publiées, l'application qui contient les informations de type incorporées peut fonctionner avec les différentes versions sans avoir à être recompilée. Pour obtenir un exemple, consultez Procédure pas à pas : incorporation de types provenant d'assemblys managés (C# et Visual Basic).

L'utilisation de l'option /link est particulièrement utile lorsque vous travaillez avec COM Interop. Vous pouvez incorporer des types COM afin que votre application ne requière plus un assembly PIA (Primary Interop Assembly) sur l'ordinateur cible. L'option /link instruit le compilateur d'incorporer les informations de type COM de l'assembly d'interopérabilité référencé dans le code compilé résultant. Le type COM est identifié par la valeur CLSID (GUID). Par conséquent, votre application peut s'exécuter sur un ordinateur cible qui a installé les mêmes types COM avec les mêmes valeurs CLSID. Les applications qui automatisent Microsoft Office sont un bon exemple. Étant donné que les applications comme Office gardent habituellement la même valeur CLSID dans différentes versions, votre application peut utiliser les types COM référencés tant que le .NET Framework 4 ou version ultérieure est installé sur l'ordinateur cible et que votre application utilise les méthodes, les propriétés ou les événements inclus dans les types COM référencés.

L'option /link incorpore uniquement des interfaces, des structures et des délégués. L'incorporation de classes COM n'est pas prise en charge.

Notes

Lorsque vous créez une instance d'un type COM incorporé dans votre code, vous devez créer l'instance à l'aide de l'interface appropriée. La tentative de création d'une instance d'un type COM incorporé à l'aide de la coclasse provoque une erreur.

Pour définir l'option /link dans Visual Studio, ajoutez une référence d'assembly et affectez à la propriété Embed Interop Types la valeur true. La valeur par défaut de la propriété Embed Interop Types est false.

Si vous établissez une liaison à un assembly COM (Assembly A) qui lui-même référence un autre assembly COM (Assembly B), vous devez aussi établir une liaison à l'Assembly B si l'un ou l'autre des éléments suivants est vrai :

  • Un type utilisé à partir de l'assembly A hérite d'un type ou implémente une interface à partir de l'assembly B.

  • Un champ, une propriété, un événement ou une méthode dont le type de retour ou de paramètre est issu de l'assembly B est appelé.

Comme l'option de compilateur /reference, l'option de compilateur /link utilise le fichier réponse Csc.rsp, qui référence les assemblys .NET Framework fréquemment utilisés. Utilisez l'option de compilateur /noconfig si vous ne souhaitez pas que le compilateur utilise le fichier Csc.rsp.

La forme abrégée de /link est /l.

Types imbriqués et génériques

Les sections suivantes décrivent les limitations de l'utilisation de types génériques dans les applications qui incorporent des types d'interopérabilité.

Interfaces génériques

Les interfaces génériques incorporées depuis un assembly d'interopérabilité ne peuvent pas être utilisées. L'exemple suivant le démontre.

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

Types ayant des paramètres génériques

Les types qui ont un paramètre générique dont le type est incorporé depuis un assembly d'interopérabilité ne peuvent pas être utilisés si ce type est issu d'un assembly externe. Cette restriction ne s'applique pas aux interfaces. Par exemple, considérez l'interface Range définie dans l'assembly Microsoft.Office.Interop.Excel. Si une bibliothèque incorpore des types d'interopérabilité de l'assembly Microsoft.Office.Interop.Excel et expose une méthode qui retourne un type générique possédant un paramètre dont le type est l'interface Range, cette méthode doit retourner une interface générique, comme indiqué dans l'exemple de code suivant.

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


...


    }
}

Dans l'exemple suivant, le code client peut appeler la méthode qui retourne l'interface générique IList sans erreur.

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

Exemple

Le code suivant compile le fichier source OfficeApp.cs et référence des assemblys depuis COMData1.dll et COMData2.dll pour produire OfficeApp.exe.

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

Voir aussi

Tâches

Procédure pas à pas : incorporation de types provenant d'assemblys managés (C# et Visual Basic)

Référence

reference (Options du compilateur C#)

/noconfig (Options du compilateur C#)

Vue d'ensemble de l'interopérabilité (Guide de programmation C#)

Concepts

Génération à partir de la ligne de commande avec csc.exe

Autres ressources

Options du compilateur C#