2010-05-21 16 views
6

From Jon Skeet's blog:Hat .NET einen Linker?

Was bedeutet der folgende Kommentar?

// The line below only works when linked rather than 
    // referenced, as otherwise you need a cast. 
    // The compiler treats it as if it both takes and 
    // returns a dynamic value. 
    string value = com.MakeMeDynamic(10); 

Ich verstehe, was Bezug auf eine Baugruppe ist. Sie können beim Kompilieren der Programmdateien darauf verweisen, indem Sie entweder den Befehl/ref: in der Befehlszeile verwenden oder Sie können der Assembly in Visual Studio einen statischen Verweis hinzufügen.

Aber wie verknüpfen Sie eine Assembly in .NET? Bedeutet er, laden Sie die Assembly mit Reflection (Assembly.LoadFile())? Oder die Win32 API LoadLibrary()? Oder hat .NET einen Linker, von dem ich noch nie gehört habe?

Antwort

10

Es ist im Grunde für COM Primary Interop Assemblys. In .NET 4 können Sie sie entweder als normal referenzieren oder sie "verknüpfen"/"einbetten" - in diesem Fall erhalten Sie nur die Teile der PIA, an denen Sie interessiert sind, in Ihre eigene Assembly eingebettet.

Von der Befehlszeile aus ist dies die Option /link: des C# 4-Compilers.

+0

Danke, Jon. Ich hätte den vollständigen Artikel von dir, den ich verlinkt habe, gelesen, bevor ich diese Frage gestellt habe. Ich habe es gerade gelesen und ein paar andere Artikel über die "No PIA" -Funktion gelesen. Ist also das/link: -Attribut ein Befehlszeilenäquivalent zum Festlegen der Eigenschaft "Einbetten von Interoptypen" der Assemblyreferenz auf True in Visual Studio 2010? (http://thedotnethub.blogspot.com/2009/11/clr4-no-pia.html) Ist auch die/link: -Option eine neue, die in C# 4.0 eingeführt wurde? –

+0

@Water: Ja, das ist das Äquivalent, und ja, es ist neu in .NET 4 und C# 4. –

+0

Sehr vielen Dank, Jon. Übrigens, ich lese die erste Ausgabe Ihres Buches "C# in Depth" und liebe jedes Detail. –