Share via


-link (Visual Basic)

Zorgt ervoor dat de compiler COM-typegegevens in de opgegeven assembly's beschikbaar maakt voor het project dat u momenteel samenvoegt.

Syntaxis

-link:fileList  

or

-l:fileList  

Argumenten

Term Definitie
fileList Vereist. Door komma's gescheiden lijst met assemblybestandsnamen. Als de bestandsnaam een spatie bevat, plaatst u de naam tussen aanhalingstekens.

Opmerkingen

Met de -link optie kunt u een toepassing met ingesloten typegegevens implementeren. De toepassing kan vervolgens typen gebruiken in een runtime-assembly die de informatie over het ingesloten type implementeert zonder dat er een verwijzing naar de runtime-assembly nodig is. Als verschillende versies van de runtime-assembly worden gepubliceerd, kan de toepassing die de informatie over het ingesloten type bevat, met de verschillende versies werken zonder dat deze opnieuw hoeft te worden gecompileerd. Zie Walkthrough voor een voorbeeld: Typen insluiten vanuit beheerde assembly's.

Het gebruik van de -link optie is vooral handig wanneer u met COM-interoperabiliteit werkt. U kunt COM-typen insluiten, zodat uw toepassing geen primaire assembly voor interopassembly meer nodig heeft op de doelcomputer. Met -link de optie wordt de compiler geïnstrueerd om de COM-typegegevens van de interop-assembly waarnaar wordt verwezen, in te sluiten in de resulterende gecompileerde code. Het COM-type wordt geïdentificeerd door de GUID-waarde (CLSID). Als gevolg hiervan kan uw toepassing worden uitgevoerd op een doelcomputer waarop dezelfde COM-typen met dezelfde CLSID-waarden zijn geïnstalleerd. Toepassingen die Microsoft Office automatiseren, zijn een goed voorbeeld. Omdat toepassingen zoals Office meestal dezelfde CLSID-waarde in verschillende versies behouden, kan uw toepassing de COM-typen waarnaar wordt verwezen, gebruiken zolang .NET Framework 4 of hoger is geïnstalleerd op de doelcomputer en uw toepassing methoden, eigenschappen of gebeurtenissen gebruikt die zijn opgenomen in de com-typen waarnaar wordt verwezen.

Met de -link optie worden alleen interfaces, structuren en gemachtigden ingesloten. Het insluiten van COM-klassen wordt niet ondersteund.

Notitie

Wanneer u een exemplaar van een ingesloten COM-type in uw code maakt, moet u het exemplaar maken met behulp van de juiste interface. Een poging om een exemplaar van een ingesloten COM-type te maken met behulp van de CoClass veroorzaakt een fout.

Als u de -link optie in Visual Studio wilt instellen, voegt u een assemblyreferentie toe en stelt u de Embed Interop Types eigenschap in op true. De standaardwaarde voor de Embed Interop Types eigenschap is onwaar.

Als u een koppeling maakt naar een COM-assembly (Assembly A) die zelf verwijst naar een andere COM-assembly (Assembly B), moet u ook een koppeling maken naar Assembly B als een van de volgende voorwaarden waar is:

  • Een type van Assembly A neemt over van een type of implementeert een interface van Assembly B.

  • Een veld, eigenschap, gebeurtenis of methode met een retourtype of parametertype van Assembly B wordt aangeroepen.

Gebruik -libpath om de map op te geven waarin een of meer assemblyverwijzingen zich bevinden.

Net als de optie -reference compiler gebruikt de compileroptie -link het Vbc.rsp-antwoordbestand, dat verwijst naar veelgebruikte .NET Framework-assembly's. Gebruik de optie -noconfig compiler als u niet wilt dat de compiler het Vbc.rsp-bestand gebruikt.

De korte vorm is -link-l.

Algemene en ingesloten typen

In de volgende secties worden de beperkingen beschreven voor het gebruik van algemene typen in toepassingen die interoperabiliteitstypen insluiten.

Algemene interfaces

Algemene interfaces die zijn ingesloten vanuit een interoperabiliteitsassembly, kunnen niet worden gebruikt. Dit wordt weergegeven in het volgende voorbeeld.

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

Typen met algemene parameters

Typen met een algemene parameter waarvan het type is ingesloten vanuit een interoperabiliteitsassembly, kunnen niet worden gebruikt als dat type afkomstig is van een externe assembly. Deze beperking geldt niet voor interfaces. Denk bijvoorbeeld aan de Range interface die is gedefinieerd in de Microsoft.Office.Interop.Excel assembly. Als een bibliotheek interoptypen uit de Microsoft.Office.Interop.Excel assembly insluit en een methode beschikbaar maakt die een algemeen type retourneert met een parameter waarvan het type de Range interface is, moet die methode een algemene interface retourneren, zoals wordt weergegeven in het volgende codevoorbeeld.

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

In het volgende voorbeeld kan clientcode de methode aanroepen die de IList algemene interface zonder fouten retourneert.

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

Opmerking

Met de volgende opdrachtregel worden bronbestand OfficeApp.vb en referentieassembly's gecompileerd van COMData1.dll en COMData2.dll te produceren OfficeApp.exe.

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

Zie ook