/link (C#-Compileroptionen)/link (C# Compiler Options)

Bewirkt, dass der Compiler dem Projekt, das Sie aktuell kompilieren, COM-Typinformationen in den angegebenen Assemblys bereitstellt.Causes the compiler to make COM type information in the specified assemblies available to the project that you are currently compiling.

SyntaxSyntax

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

ArgumenteArguments

fileList
Erforderlich.Required. Durch Trennzeichen getrennte Liste von Assemblydateinamen.Comma-delimited list of assembly file names. Wenn der Dateiname ein Leerzeichen enthält, müssen Sie den Namen in Anführungszeichen einschließen.If the file name contains a space, enclose the name in quotation marks.

HinweiseRemarks

Die Option /link ermöglicht es Ihnen, eine Anwendung mit eingebetteten Typinformationen bereitzustellen.The /link option enables you to deploy an application that has embedded type information. Die Anwendung kann dann Typen in einer Runtime-Assembly verwenden, die die eingebetteten Typinformationen implementieren, ohne dass ein Verweis auf die Runtime-Assembly erforderlich ist.The application can then use types in a runtime assembly that implement the embedded type information without requiring a reference to the runtime assembly. Wenn verschiedene Versionen der Runtime-Assembly veröffentlicht werden, kann die Anwendung, die die eingebetteten Typinformationen enthält, mit den verschiedenen Versionen arbeiten, ohne neu kompiliert werden zu müssen.If various versions of the runtime assembly are published, the application that contains the embedded type information can work with the various versions without having to be recompiled. Ein Beispiel finden Sie unter Exemplarische Vorgehensweise: Einbetten von Typen aus verwalteten Assemblys.For an example, see Walkthrough: Embedding Types from Managed Assemblies.

Die Option /link ist besonders nützlich, wenn Sie COM-Interop verwenden.Using the /link option is especially useful when you are working with COM interop. Sie können COM-Typen einbetten, sodass für Ihre Anwendung keine primäre Interopassembly (PIA) auf dem Zielcomputer mehr erforderlich ist.You can embed COM types so that your application no longer requires a primary interop assembly (PIA) on the target computer. Die Option /link weist den Compiler an, die COM-Typinformationen aus der Interopassembly, auf die verwiesen wird, in den resultierenden kompilierten Code einzubetten.The /link option instructs the compiler to embed the COM type information from the referenced interop assembly into the resulting compiled code. Der COM-Typ wird durch den CLSID (GUID)-Wert identifiziert.The COM type is identified by the CLSID (GUID) value. Dadurch kann Ihre Anwendung auf einem Zielcomputer ausgeführt werden, auf dem die gleichen COM-Typen mit den gleichen CLSID-Werten installiert sind.As a result, your application can run on a target computer that has installed the same COM types with the same CLSID values. Anwendungen, die Microsoft Office automatisieren, sind ein gutes Beispiel.Applications that automate Microsoft Office are a good example. Da Anwendungen wie Office in der Regel den gleichen CLSID-Wert in den verschiedenen Versionen behalten, kann die Anwendung die COM-Typen, auf die verwiesen wird, verwenden, wenn .NET Framework 4 oder höher auf dem Zielcomputer installiert ist und die Anwendung Methoden, Eigenschaften oder Ereignisse verwendet, die in den COM-Typen, auf die verwiesen wird, enthalten sind.Because applications like Office usually keep the same CLSID value across different versions, your application can use the referenced COM types as long as .NET Framework 4 or later is installed on the target computer and your application uses methods, properties, or events that are included in the referenced COM types.

Die Option /link bettet nur Schnittstellen, Strukturen und Delegaten ein.The /link option embeds only interfaces, structures, and delegates. Das Einbetten von COM-Klassen wird nicht unterstützt.Embedding COM classes is not supported.

Hinweis

Wenn Sie eine Instanz eines eingebetteten COM-Typs in Ihrem Code erstellen, müssen Sie die Instanz mithilfe der entsprechenden Schnittstelle erstellen.When you create an instance of an embedded COM type in your code, you must create the instance by using the appropriate interface. Der Versuch, eine Instanz eines eingebetteten COM-Typs mit der Co-Klasse zu erstellen, verursacht einen Fehler.Attempting to create an instance of an embedded COM type by using the CoClass causes an error.

Fügen Sie zum Festlegen der Option /link in Visual StudioVisual Studio einen Assemblyverweis hinzu, und legen Sie die Embed Interop Types-Eigenschaft auf true fest.To set the /link option in Visual StudioVisual Studio, add an assembly reference and set the Embed Interop Types property to true. Der Standardwert der Embed Interop Types-Eigenschaft ist false.The default for the Embed Interop Types property is false.

Wenn Sie eine Verknüpfung mit einer COM-Assembly (Assembly A) erstellen, die selbst auf eine andere COM-Assembly (Assembly B) verweist, müssen Sie auch eine Verknüpfung mit Assembly B erstellen, wenn eine der folgenden Aussagen zutrifft:If you link to a COM assembly (Assembly A) which itself references another COM assembly (Assembly B), you also have to link to Assembly B if either of the following is true:

  • Ein Typ von Assembly A erbt von einem Typ oder implementiert eine Schnittstelle aus Assembly B.A type from Assembly A inherits from a type or implements an interface from Assembly B.

  • Es wird ein Feld, eine Eigenschaft, ein Ereignis oder eine Methode aufgerufen, das/die über einen Rückgabetyp oder Parametertyp von Assembly B verfügt.A field, property, event, or method that has a return type or parameter type from Assembly B is invoked.

Wie die /reference-Compileroption verwendet auch die /link-Compileroption die Antwortdatei „Csc.rsp“, die auf häufig verwendete .NET Framework.NET Framework-Assemblys verweist.Like the /reference compiler option, the /link compiler option uses the Csc.rsp response file, which references frequently used .NET Framework.NET Framework assemblies. Verwenden Sie die /noconfig-Compileroption, wenn Sie nicht möchten, dass der Compiler die Datei „Csc.rsp“ verwendet.Use the /noconfig compiler option if you do not want the compiler to use the Csc.rsp file.

Die Kurzform von /link ist /l.The short form of /link is /l.

Generika und eingebettete TypenGenerics and Embedded Types

In den folgenden Abschnitten werden die Einschränkungen bei der Verwendung von generischen Typen in Anwendungen, die Interop-Typen einbetten, beschrieben.The following sections describe the limitations on using generic types in applications that embed interop types.

Generische SchnittstellenGeneric Interfaces

Generische Schnittstellen, die von einer Interopassembly eingebettet werden, können nicht verwendet werden.Generic interfaces that are embedded from an interop assembly cannot be used. Dies wird im folgenden Beispiel gezeigt.This is shown in the following example.

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

Typen, die generische Parameter aufweisenTypes That Have Generic Parameters

Typen, die über einen generischen Parameter verfügen, dessen Typ aus einer Interop-Assembly eingebettet wird, können nicht verwendet werden, wenn dieser Typ aus einer externen Assembly stammt.Types that have a generic parameter whose type is embedded from an interop assembly cannot be used if that type is from an external assembly. Diese Einschränkung gilt nicht für Schnittstellen.This restriction does not apply to interfaces. Nehmen Sie z.B. die Range Schnittstellen, die in der Microsoft.Office.Interop.Excel-Assembly definiert wird.For example, consider the Range interface that is defined in the Microsoft.Office.Interop.Excel assembly. Wenn eine Bibliothek Interop-Typen aus der Microsoft.Office.Interop.Excel-Assembly einbettet und eine Methode verfügbar macht, die einen generischen Typ zurückgibt, der einen Parameter mit dem Typ Range-Schnittstelle hat, muss diese Methode eine generische Schnittstelle zurückgeben, wie im folgenden Codebeispiel gezeigt.If a library embeds interop types from the Microsoft.Office.Interop.Excel assembly and exposes a method that returns a generic type that has a parameter whose type is the Range interface, that method must return a generic interface, as shown in the following code example.

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() {
    }
}

Im folgenden Beispiel kann der Clientcode die Methode aufrufen, die die generische Schnittstelle IList ohne Fehler zurückgibt.In the following example, client code can call the method that returns the IList generic interface without error.

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();
    }
}

BeispielExample

Der folgende Code kompiliert die Quelldatei OfficeApp.cs und Verweisassemblys aus COMData1.dll und COMData2.dll, um OfficeApp.exe zu produzieren.The following code compiles source file OfficeApp.cs and reference assemblies from COMData1.dll and COMData2.dll to produce OfficeApp.exe.

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

Siehe auchSee Also

C#-CompileroptionenC# Compiler Options
Exemplarische Vorgehensweise: Einbetten von Typen aus verwalteten AssemblysWalkthrough: Embedding Types from Managed Assemblies
/reference (C#-Compileroptionen)/reference (C# Compiler Options)
/ noconfig (C#-Compileroptionen)/noconfig (C# Compiler Options)
Erstellen über die Befehlszeile mit csc.exeCommand-line Building With csc.exe
Überblick über die InteroperabilitätInteroperability Overview