Freigeben über


-link (Visual Basic)

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  

Siehe auch