/link (Možnosti C# kompilátoru)

Zapříčiní, že kompilátor pro projekt, který je aktuálně kompilován, zpřístupní pro specifikovaná sestavení typové informace v modelu COM.

/link:fileList
// -or-
/l:fileList

Argumenty

  • fileList
    Povinné. Seznam názvů souborů sestavení oddělený čárkami. Pokud název souboru obsahuje mezery, zadejte jej v uvozovkách.

Poznámky

Volba /link umožňuje nasadit aplikaci, která obsahuje vložené typové informace. Aplikace pak může za běhu použít typy, které implementují vložené typové informace, bez nutnosti získat referenci na toto sestavení získavané za běhu. Pokud jsou publikovány v různé verze sestavení získáváného za běhu, aplikace, která obsahuje vložené typové informace, může pracovat s různými verzemi, aniž by musela být znovu kompilována. Příklad naleznete v tématu Walkthrough: Embedding Types from Managed Assemblies.

Použití volby /link je užitečné zejména při práci s modelem zprostředkovatele komunikace s objekty COM. Je možné vložit typy modelu COM tak, že aplikace již nevyžaduje primární definiční sestavení (primary interop assembly (PIA)) na cílovém počítači. Volba /link instruuje kompilátor, aby vložil informace o typu modelu COM z odkazovaného definičního sestavení do výsledného zkompilovaného kódu. Typ modelu COM je identifikován hodnotou CLSID (GUID). V důsledku toho lze aplikaci spustit na cílovém počítači, na kterém jsou nainstalovány stejné typy modelu COM se stejnými hodnotami CLSID. Typickým příkladem jsou aplikace automatizující systém Microsoft Office. Protože aplikace, jako jsou Office, obvykle zachovávají stejnou hodnota CLSID mezi různými verzemi, Vaše aplikace může využít odkazovaných typů modelu COM v případě, že je na cílovém počítači nainstalováno rozhraní .NET Framework 4 nebo vyšší. Aplikace používá metody, vlastnosti nebo události, které jsou zahrnuty v odkazovaných typech modelu COM.

Volba /link vloží pouze rozhraní, struktury a delegáty. Vložení tříd modelu COM není podporováno.

Poznámka

Vytváříte-li instanci vloženého typu modelu COM ve svém kódu, musíte tuto instanci vytvořit pomocí příslušného rozhraní. Pokus o vytvoření instance vloženého typu modelu COM pomocí CoClass způsobí chybu.

Chcete-li nastavit volbu /link ve Visual Studio, přidejte odkaz na sestavení a nastavte vlastnost Embed Interop Types na true. Výchozí hodnota pro vlastnost Embed Interop Types je false.

Pokud jste propojeni se sestavením modelu COM (sestavení A), které se odkazuje na sestavení jiného modelu COM (sestavení B), musíte být propojeni také se sestavením B, pokud platí některé z následujících:

  • Typ ze sestavení A dědí z typu nebo implementuje rozhraní ze sestavení B.

  • Pole, vlastnost, událost nebo metoda, která má návratový typ nebo typ parametru ze sestavení B, je vyvolána.

Podobně jako možnost kompilátoru /reference i možnost kompilátoru /link používá Csc.rsp soubor odpovědí, jehož odkazy často používaly sestavení .NET Framework. Použijte možnost kompilátoru /noconfig v případě, že nechcete, aby kompilátor používal soubor Csc.rsp.

Zkratka pro /link je /l.

Generické typy a vložené typy.

Následující části popisují omezení týkající se použití generických typů v aplikacích, které vkládají interoperabilní typy.

Generická rozhraní

Nelze použít generická rozhraní, která jsou vložena z interoperabilního sestavení. Toto je znázorněno v následujícím příkladu.

// The following code causes an error if ISampleInterface is an embedded interop type.
ISampleInterface<SampleType> sample;

Typy s generickými parametry

Typy s generickým parametrem, jehož typ je vložen z interoperabilního sestavení, nelze použít, pokud je tento typ z externího sestavení. Toto omezení se nevztahuje na rozhraní. Zvažte například rozhraní Range, které je definováno v sestavení Microsoft.Office.Interop.Excel. Pokud knihovna vkládá interoperabilní typy ze sestavení Microsoft.Office.Interop.Excel a vystavuje metodu vracející generický typ, který má parametr, jehož typ je rozhraní Range, takováto metoda pak musí vracet generické rozhraní, jak je uvedeno v následujícím příkladu kódu.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Excel;

public class Utility
{
    // The following code causes an error when called by a client assembly.
    public List<Range> GetRange1() {


...


}

// The following code is valid for calls from a client assembly.
public IList<Range> GetRange2() {


...


    }
}

V následujícím příkladu kód klienta může volat metodu, která vrací generické rozhraní IList bez chyby.

public class Client
{
    public void Main()
    {
        Utility util = new Utility();

        // The following code causes an error.
        List<Range> rangeList1 = util.GetRange1();

        // The following code is valid.
        List<Range> rangeList2 = (List<Range>)util.GetRange2();
    }
}

Příklad

Následující kód zkompiluje zdrojový soubor OfficeApp.cs a odkaz na sestavení z COMData1.dll a COMData2.dll aby vytvořil OfficeApp.exe.

csc /link:COMData1.dll,COMData2.dll /out:OfficeApp.exe OfficeApp.cs

Viz také

Úkoly

Walkthrough: Embedding Types from Managed Assemblies

Odkaz

/reference (Možnosti C# kompilátoru)

/noconfig (Možnosti C# kompilátoru)

Interoperability Overview (C# Programming Guide)

Koncepty

Sestavování pomocí csc.exe v příkazovém řádku

Další zdroje

Možnosti C# kompilátoru