Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Bewirkt, dass der Compiler COM-Typinformationen in den angegebenen Assemblys für das Projekt verfügbar macht, das Sie gerade kompilieren.
Syntax
-link:fileList
oder
-l:fileList
Argumente
| Begriff | Definition |
|---|---|
fileList |
Erforderlich. Durch Trennzeichen getrennte Liste der Assemblydateinamen. Wenn der Dateiname ein Leerzeichen enthält, schließen Sie den Namen in Anführungszeichen ein. |
Bemerkungen
Mit der -link Option können Sie eine Anwendung bereitstellen, die eingebettete Typinformationen enthält. Die Anwendung kann dann Typen in einer Laufzeitassembly verwenden, die die eingebetteten Typinformationen implementieren, ohne dass ein Verweis auf die Laufzeitassembly erforderlich ist. Wenn verschiedene Versionen der Laufzeitassembly veröffentlicht werden, kann die Anwendung, die die Eingebetteten Typinformationen enthält, mit den verschiedenen Versionen arbeiten, ohne neu kompiliert werden zu müssen. Ein Beispiel finden Sie unter Walkthrough: Embedding Types from Managed Assemblies.
Die Verwendung der -link Option ist besonders nützlich, wenn Sie mit COM-Interoperabilität arbeiten. Sie können COM-Typen einbetten, damit Ihre Anwendung keine primäre Interopassembly (PIA) mehr auf dem Zielcomputer benötigt. Die -link Option weist den Compiler an, die COM-Typinformationen aus der referenzierten Interopassembly in den resultierenden kompilierten Code einzubetten. Der COM-Typ wird durch den CLSID (GUID)-Wert identifiziert. Daher kann Ihre Anwendung auf einem Zielcomputer ausgeführt werden, auf dem dieselben COM-Typen mit denselben CLSID-Werten installiert sind. Anwendungen, die Microsoft Office automatisieren, sind ein gutes Beispiel. Da Anwendungen wie Office in der Regel denselben CLSID-Wert in verschiedenen Versionen beibehalten, kann Ihre Anwendung die referenzierten COM-Typen verwenden, solange .NET Framework 4 oder höher auf dem Zielcomputer installiert ist und Ihre Anwendung Methoden, Eigenschaften oder Ereignisse verwendet, die in den referenzierten COM-Typen enthalten sind.
Die -link Option bettet nur Schnittstellen, Strukturen und Stellvertretungen ein. Das Einbetten von COM-Klassen wird nicht unterstützt.
Hinweis
Wenn Sie eine Instanz eines eingebetteten COM-Typs in Ihrem Code erstellen, müssen Sie die Instanz mithilfe der entsprechenden Schnittstelle erstellen. Wenn Sie versuchen, eine Instanz eines eingebetteten COM-Typs mithilfe der CoClass zu erstellen, tritt ein Fehler auf.
Um die -link Option in Visual Studio festzulegen, fügen Sie einen Assemblyverweis hinzu, und legen Sie die Embed Interop Types Eigenschaft auf "true" fest. Der Standardwert für die Embed Interop Types Eigenschaft ist "false".
Wenn Sie eine Verknüpfung mit einer COM-Assembly (Assembly A) herstellen, die selbst auf eine andere COM-Assembly (Assembly B) verweist, müssen Sie auch eine Verknüpfung mit Assembly B herstellen, wenn eine der folgenden Bedingungen zutrifft:
Ein Typ von Assembly A erbt von einem Typ oder implementiert eine Schnittstelle von Assembly B.
Ein Feld, eine Eigenschaft, ein Ereignis oder eine Methode mit einem Rückgabetyp oder Parametertyp aus Assembly B wird aufgerufen.
Verwenden Sie "-libpath ", um das Verzeichnis anzugeben, in dem sich mindestens ein Assemblyverweise befindet.
Wie bei der Compileroption "-reference " verwendet die -link Compileroption die Antwortdatei Vbc.rsp, die auf häufig verwendete .NET Framework-Assemblys verweist. Verwenden Sie die Compileroption "-noconfig ", wenn der Compiler die Vbc.rsp-Datei nicht verwenden soll.
Die kurze Form von -link ist -l.
Generika und eingebettete Typen
In den folgenden Abschnitten werden die Einschränkungen bei der Verwendung generischer Typen in Anwendungen beschrieben, die Interoptypen einbetten.
Generische Schnittstellen
Generische Schnittstellen, die aus einer Interopassembly eingebettet sind, können nicht verwendet werden. Dies wird im folgenden Beispiel gezeigt.
' The following code causes an error if ISampleInterface is an embedded interop type.
Dim sample As ISampleInterface(Of SampleType)
Typen mit generischen Parametern
Typen mit einem generischen Parameter, deren Typ aus einer Interopassembly eingebettet ist, können nicht verwendet werden, wenn dieser Typ von einer externen Assembly stammt. Diese Einschränkung gilt nicht für Schnittstellen. Betrachten Sie beispielsweise die Range Schnittstelle, die in der Microsoft.Office.Interop.Excel Assembly definiert ist. Wenn eine Bibliothek Interoptypen aus der Microsoft.Office.Interop.Excel Assembly einbettet und eine Methode verfügbar macht, die einen generischen Typ mit einem Parameter zurückgibt, dessen Typ die Range Schnittstelle ist, muss diese Methode eine generische Schnittstelle zurückgeben, wie im folgenden Codebeispiel gezeigt.
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
Im folgenden Beispiel kann Clientcode die Methode aufrufen, die die IList generische Schnittstelle ohne Fehler zurückgibt.
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
Beispiel
Die folgende Befehlszeile kompiliert Quelldatei OfficeApp.vb und Referenzassemblys aus COMData1.dll und COMData2.dll erstellt OfficeApp.exesie.
vbc -link:COMData1.dll,COMData2.dll -out:OfficeApp.exe OfficeApp.vb