-link (Visual Basic)
Fait que le compilateur rend disponible pour le projet en cours de compilation les informations de type COM des assemblys spécifiés.
Syntaxe
-link:fileList
ou
-l:fileList
Arguments
Terme | Définition |
---|---|
fileList |
Obligatoire. Liste délimitée par des virgules des noms de fichiers d’assembly. Si le nom de fichier contient un espace, placez-le entre des 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émentent les informations de type incorporées sans nécessiter 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 devoir être recompilée. Pour un exemple, consultez Procédure pas à pas : incorporation de types provenant d’assemblys managés.
L’utilisation de l’option -link
est particulièrement utile quand vous travaillez avec COM Interop. Vous pouvez incorporer des types COM afin que votre application ne nécessite plus un assembly PIA (Primary Interop Assembly) sur l’ordinateur cible. L’option -link
indique au compilateur d’incorporer les informations de type COM provenant de l’assembly Interop référencé dans le code compilé résultant. Le type COM est identifié par la valeur du CLSID (GUID). Par conséquent, votre application peut s’exécuter sur un ordinateur cible où les mêmes types COM ont été installés avec les mêmes valeurs de CLSID. Les applications qui automatisent Microsoft Office sont un bon exemple. Étant donné que les applications comme Office gardent habituellement la même valeur de CLSID à travers différentes versions, votre application peut utiliser les types COM référencés dès lors que le .NET Framework 4 ou ultérieur est installé sur l’ordinateur cible, et que votre application utilise les méthodes, propriétés ou événements qui sont inclus dans les types COM référencés.
L’option -link
incorpore seulement les interfaces, les structures et les délégués. L’incorporation de classes COM n’est pas prise en charge.
Notes
Quand 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. Une 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 définissez la propriété Embed Interop Types
sur true. La valeur par défaut pour la propriété Embed Interop Types
est false.
Si vous liez à un assembly COM (Assembly A) qui référence lui-même un autre assembly COM (Assembly B), vous devez également lier à l’Assembly B si une des conditions suivantes est vraie :
Un type de l’Assembly A hérite d’un type ou implémente une interface de l’Assembly B.
Un champ, une propriété, un événement ou une méthode qui a un type de retour ou un type de paramètre de l’Assembly B est appelé.
Utilisez -libpath pour spécifier le répertoire dans lequel se trouvent une ou plusieurs références d’assembly.
Comme l’option -reference du compilateur, l’option -link
utilise le fichier réponse Vbc.rsp, qui référence les assemblies .NET Framework fréquemment utilisés. Utilisez l’option -noconfig du compilateur si vous ne voulez 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 interop.
Interfaces génériques
Vous ne pouvez pas utiliser des interfaces génériques incorporées depuis un assembly d’interopérabilité. Cela est illustré par l'exemple suivant.
' 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
Vous ne pouvez pas utiliser des types qui ont un paramètre générique dont le type est incorporé depuis un assembly d’interopérabilité si ce type provient d’un assembly externe. Cette restriction ne s’applique pas aux interfaces. Prenons l’exemple de l’interface Range qui est définie dans l’assembly Microsoft.Office.Interop.Excel. Si une bibliothèque incorpore les types interop de l’assembly Microsoft.Office.Interop.Excel et expose une méthode qui retourne un type générique qui a un paramètre dont le type est l’interface Range, cette méthode doit retourner une interface générique, comme 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
La ligne de commande suivante compile le fichier source OfficeApp.vb
et des assemblies de référence à partir de COMData1.dll
et de COMData2.dll
pour produire OfficeApp.exe
.
vbc -link:COMData1.dll,COMData2.dll -out:OfficeApp.exe OfficeApp.vb