Dela via


-link (Visual Basic)

Gör att kompilatorn gör COM-typinformation i de angivna sammansättningarna tillgängliga för det projekt som du för närvarande kompilerar.

Syntax

-link:fileList  

eller

-l:fileList  

Argument

Period Definition
fileList Obligatoriska. Kommaavgränsad lista över sammansättningsfilnamn. Om filnamnet innehåller ett blanksteg omger du namnet inom citattecken.

Kommentarer

Med -link alternativet kan du distribuera ett program med inbäddad typinformation. Programmet kan sedan använda typer i en körningssammansättning som implementerar information om inbäddade typer utan att kräva en referens till körningssammansättningen. Om olika versioner av runtime-sammansättningen publiceras kan programmet som innehåller den inbäddade typinformationen fungera med de olika versionerna utan att behöva kompileras om. Ett exempel finns i Genomgång: Bädda in typer från hanterade sammansättningar.

-link Det är särskilt användbart att använda alternativet när du arbetar med COM-interop. Du kan bädda in COM-typer så att programmet inte längre kräver en primär interop-sammansättning (PIA) på måldatorn. Alternativet -link instruerar kompilatorn att bädda in COM-typinformationen från den refererade interop-sammansättningen i den resulterande kompilerade koden. COM-typen identifieras av CLSID-värdet (GUID). Därför kan programmet köras på en måldator som har installerat samma COM-typer med samma CLSID-värden. Program som automatiserar Microsoft Office är ett bra exempel. Eftersom program som Office vanligtvis har samma CLSID-värde i olika versioner kan ditt program använda de refererade COM-typerna så länge .NET Framework 4 eller senare installeras på måldatorn och programmet använder metoder, egenskaper eller händelser som ingår i de refererade COM-typerna.

Alternativet -link bäddar bara in gränssnitt, strukturer och ombud. Det går inte att bädda in COM-klasser.

Kommentar

När du skapar en instans av en inbäddad COM-typ i koden måste du skapa instansen med hjälp av lämpligt gränssnitt. Försök att skapa en instans av en inbäddad COM-typ med hjälp av CoClass orsakar ett fel.

Om du vill ange alternativet -link i Visual Studio lägger du till en sammansättningsreferens och anger Embed Interop Types egenskapen till true. Standardvärdet för egenskapen Embed Interop Types är falskt.

Om du länkar till en COM-sammansättning (sammansättning A) som själv refererar till en annan COM-sammansättning (sammansättning B) måste du också länka till sammansättning B om något av följande är sant:

  • En typ från sammansättning A ärver från en typ eller implementerar ett gränssnitt från sammansättning B.

  • Ett fält, en egenskap, en händelse eller en metod som har en returtyp eller parametertyp från sammansättning B anropas.

Använd -libpath för att ange den katalog där en eller flera av sammansättningsreferenserna finns.

Precis som kompilatoralternativet -link -reference använder kompilatoralternativet Vbc.rsp-svarsfilen, som refererar till ofta använda .NET Framework-sammansättningar. Använd kompilatoralternativet -noconfig om du inte vill att kompilatorn ska använda Vbc.rsp-filen.

Den korta formen av -link är -l.

Generiska och inbäddade typer

I följande avsnitt beskrivs begränsningarna för användning av generiska typer i program som bäddar in interop-typer.

Allmänna gränssnitt

Generiska gränssnitt som är inbäddade från en interop-sammansättning kan inte användas. Detta visas i följande exempel.

' The following code causes an error if ISampleInterface is an embedded interop type.
Dim sample As ISampleInterface(Of SampleType)

Typer som har allmänna parametrar

Typer som har en allmän parameter vars typ är inbäddad från en interop-sammansättning kan inte användas om den typen kommer från en extern sammansättning. Den här begränsningen gäller inte för gränssnitt. Tänk till exempel på det Range gränssnitt som definieras i Microsoft.Office.Interop.Excel sammansättningen. Om ett bibliotek bäddar in interop-typer från Microsoft.Office.Interop.Excel sammansättningen och exponerar en metod som returnerar en allmän typ som har en parameter vars typ är Range gränssnittet, måste metoden returnera ett allmänt gränssnitt, enligt följande kodexempel.

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

I följande exempel kan klientkoden anropa metoden som returnerar det IList allmänna gränssnittet utan fel.

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

Exempel

Följande kommandorad kompilerar källfil OfficeApp.vb och referenssammansättningar från COMData1.dll och COMData2.dll för att skapa OfficeApp.exe.

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

Se även