Ich habe ein Beispielprojekt mit C # 6.0-Extras erstellt - Null-Weitergabe und Initialisierung der Eigenschaften als Beispiel, Zielversion .NET 4.0 festgelegt und es funktioniert.
public class Cat
{
public int TailLength { get; set; } = 4;
public Cat Friend { get; set; }
public string Mew() { return "Mew!"; }
}
class Program
{
static void Main(string[] args)
{
var cat = new Cat {Friend = new Cat()};
Console.WriteLine(cat?.Friend.Mew());
Console.WriteLine(cat?.Friend?.Friend?.Mew() ?? "Null");
Console.WriteLine(cat?.Friend?.Friend?.TailLength ?? 0);
}
}
- Laut Wikipedia ist .NET Framework für C # 6.0 4.6.
- Diese Frage (und der Visual Studio 2015 CTP-Test) besagt, dass die CLR-Version 4.0.30319.0 ist.
- Auf dieser MSDN-Seite wird angegeben , dass .NET 4, 4.5, 4.5.2 CLR 4 verwendet. Es gibt keine Informationen zu .NET 4.6.
Bedeutet dies, dass ich C # 6.0-Funktionen für meine Software verwenden kann, die auf .NET 4.0 abzielt? Gibt es irgendwelche Einschränkungen oder Nachteile?
Antworten:
Ja (meistens). Für C # 6.0 ist der neue Roslyn-Compiler erforderlich, der neue Compiler kann jedoch für ältere Framework-Versionen kompilieren. Dies ist nur auf neue Funktionen beschränkt, für die keine Unterstützung durch das Framework erforderlich ist .
Während Sie beispielsweise die Zeichenfolgeninterpolationsfunktion in C # 6.0 mit früheren Versionen von .Net verwenden können (da dies zu einem Aufruf von führt
string.Format
):Sie benötigen .Net 4.6, um es zu verwenden,
IFormattable
da nur die neue Framework-Version Folgendes hinzufügtSystem.FormattableString
:Die von Ihnen genannten Fälle benötigen keine Typen aus dem Framework, um zu funktionieren. Der Compiler ist also in der Lage, diese Funktionen für alte Framework-Versionen vollständig zu unterstützen.
quelle
IFormattable
String-Interpolation vorstellen .Ich möchte mich nur darauf konzentrieren, wie man Wikipedia und andere Links versteht.
Wenn Wikipedia sagt, dass C # 6.0 mit .NET Framework 4.6 kompatibel ist, bedeutet dies einfach, dass die Produktionsversion des Compilers (msc.exe) Teil der .NET Framework 4.6-Version ist. Über Multi-Targeting können solche Compiler niedrigere Versionen von .NET Framework-Versionen unterstützen. Seit Roslyn ein Open-Source-Projekt wurde, ist der Compiler natürlich eine vollständig einzelne Komponente.
Wenn etwas auf die CLR-Version von 4.0.30319 (.0) verweist, kann es sich tatsächlich um .NET Framework 4. * (4.0, 4.0. *, 4.5, 4.5. *, 4.6, 4.6. *) Handeln, da alle das implementieren CLR Version 4 Spezifikation. Ganz zu schweigen davon, dass Xamarin / Mono dieselbe CLR-Spezifikation implementiert.
Die MSDN-Seite ist noch nicht vollständig aktualisiert, aber auf einigen Seiten ist .NET Framework 4.6 bereits im Abschnitt Versionsinformationen aufgeführt.
Insgesamt sind Sprachspezifikationen (sowie C # -Compiler), CLR-Spezifikationen und .NET Framework-Versionen nicht eng miteinander verbunden. Es bietet Entwicklern genügend Flexibilität, um neue Compiler für ältere CLRs und .NET Frameworks zu verwenden.
quelle
Ja, Sie können neuere Compiler für ältere Frameworks verwenden und Zugriff auf die neuen Compilerfunktionen erhalten (sofern für diese Funktionen keine in .NET 4.6 eingeführten neuen Typen erforderlich sind).
Andere Beispiele hierfür sind Methoden mit Standardparametern, die mit C # 4.0 (.NET 4.0) eingeführt wurden. Sie können sie jedoch in .NET 2.0- (C # 2.0) und .NET 3.5- (C # 3.0) Projekten verwenden.
Sie können auch Erweiterungsmethoden (eingeführt in C # 3.0) in .NET 2.0 oder .NET 3.0 verwenden, wenn Sie eine kleine Problemumgehung durchführen , um den Compiler glücklich zu machen, damit er ein Attribut finden kann, das in .NET 3.5 eingeführt wurde.
quelle
Wenn Sie Build-Attribute verwenden, müssen Sie den Pfad zum neuen Builder ändern:
Setzen Sie CPATH = C: \ Programme (x86) \ MSBuild \ 14.0 \ Bin
[Rebuild.bat]
quelle
Antwort von @oobe ist eigentlich wichtig. Ich konnte meine Lösung nur nach Verwendung der Datei MSBuild.exe aus C: \ Programme (x86) \ MSBuild \ 14.0 \ Bin über eine Batchdatei erstellen .
quelle