6 Stimmen

Kann IL produziert von C# 4.0 Compiler auf CLR 2.0 laufen?

Kann IL produziert von C# 4.0 Compiler auf CLR 2.0 laufen?

Um klarzustellen, ich bin nicht fragen, über VS 2010 Multi-Targeting (wo VS die richtige Compiler-Version wählt), ich möchte wissen, ob csc.exe 4.0 unterstützt Multi-Targeting...

7voto

Marc Gravell Punkte 970173

Wenn alles andere fehlschlägt, versuchen Sie es. Ich habe gerade die folgenden in VS2010b2 getestet, kompiliert Targeting 2.0:

using System;    
class Program {
    static void Main() {
        Write();
        Write(msg: "world");
        Console.ReadLine();
    }
    static void Write(string msg = "Hello") {
        Console.WriteLine(msg);
    }
}

Dabei werden zwei neue C# 4.0 Sprache Funktionen, die die Meta-Daten verwenden, die auch in .NET 2.x/3.x/CLR 2 vorhanden ist; es führt gut auf meinem normalen (CLR 2) Maschine (meine VS2010b2 ist eine VM). Daraus schließe ich "ja, für einige Funktionen". Offensichtlich, wenn Sie ein Framework-abhängiges Feature verwenden ( dynamic usw.) wird es nicht gut ausgehen.

Edit: zu Ihrem Kommentar; ich habe versucht csc in der Befehlszeile, und standardmäßig ist dies tut Ziel CLR 4; Ich werde versuchen, ob ich es bekommen kann, um CLR 2 Ziel (wie VS offensichtlich kann). Leider enthält es nicht mehr die (gefälschte, btw) Befehlszeile im Build-Ausgabefenster...

Update: einige "Eingeweihte" meldeten sich zurück:

Übergeben Sie /nostdlib und einen Verweis auf die 2.0 mscorlib.dll.

Und das ist auch gut so:

C:\Windows\Microsoft.NET\Framework\v4.0.21006>csc /nostdlib /reference:%SystemRo
ot%\microsoft.net\framework\v2.0.50727\mscorlib.dll /out:c:\my.exe /target:exe "
C:\Users\Marc\Documents\Visual Studio 2010\Projects\ConsoleApplication6\ConsoleA
pplication6\program.cs"
Microsoft (R) Visual C# 2010 Compiler version 4.0.21006.1
Copyright (C) Microsoft Corporation. All rights reserved.

funktioniert einwandfrei (exe funktioniert auf meinem Nicht-4.0-Rechner). Kredit: Kevin Pilch-Bisson

1voto

Bob Punkte 93584

C# 4.0 verwendet die .NET CLR 4.0, so dass es keine Binärkompatibilität mit der CLR 2.0 geben wird. Sie werden in der Lage sein, das 2.0-Framework aber Ziel.

1voto

Bevan Punkte 42255

Das hängt vom jeweiligen Compiler ab.

Bisherige Anzeichen deuten darauf hin, dass der C# 4.0-Compiler in der Lage sein wird, auf die .NET 2.0-Laufzeit zu zielen, IL zu generieren, die mit dieser Laufzeit kompatibel ist, und sicherzustellen, dass Sie nur auf Assemblies verweisen, die auch unter .NET 2.0 laufen.

Beachten Sie jedoch, dass Targeting eine Wahl ist - und es gibt keine Garantie, dass ein anderer Compiler die gleiche Funktion hat.

Ich vermute, dass dies eine Entscheidung ist, die von dem Team getroffen wird, das den Compiler implementiert.

Es ist zum Beispiel wahrscheinlich, dass die C#- und VB.NET-Compiler-Teams Multitargeting unterstützen werden (obwohl sie sich vielleicht davon zurückziehen und es als eine Visual Studio-Funktion belassen, bei der VS verschiedene Compiler für verschiedene Ziele auswählt).

Andere Anbieter, die das .NET-Framework verwenden, treffen möglicherweise andere Entscheidungen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X