Share via


/link (Visual Basic)

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

Terme

Définition

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é.

Utilisez /libpath pour spécifier le répertoire dans lequel se trouvent une ou plusieurs de vos références d'assembly.

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

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

Types génériques et imbriqués

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.
Dim sample As ISampleInterface(Of SampleType)

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.

Imports System.Collections.Generic
Imports Microsoft.Office.Interop.Excel

Class Utility
    ' The following code causes an error when called by a client assembly.
    Public Function GetRange1() As List(Of Range)


...


End Function

' The following code is valid for calls from a client assembly.
Public Function GetRange2() As IList(Of Range)


...


    End Function
End Class

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

Module Client
    Public Sub Main()
        Dim util As New Utility()

        ' The following code causes an error.
        Dim rangeList1 As List(Of Range) = util.GetRange1()

        ' The following code is valid.
        Dim rangeList2 As List(Of Range) = CType(util.GetRange2(), List(Of Range))
    End Sub
End Module

Exemple

Le code suivant compile le fichier source OfficeApp.vb et référence des assemblys issus de COMData1.dll et COMData2.dll pour générer OfficeApp.exe.

vbc /link:COMData1.dll,COMData2.dll /out:OfficeApp.exe OfficeApp.vb

Voir aussi

Tâches

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

Référence

/reference (Visual Basic)

/noconfig

/libpath

Exemples de lignes de commande de compilation (Visual Basic)

Concepts

Introduction à COM Interop (Visual Basic)

Autres ressources

Compilateur Visual Basic