-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