Hat C# 6.0 arbeiten .NET 4.0?
Erstellte ich ein Beispiel-Projekt mit C#6.0 goodies - null-die Ausbreitung und die Eigenschaften der Initialisierung als ein Beispiel, target-version .NET 4.0 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);
}
}
- Wikipedia sagt .NET framework für C# 6.0 4.6.
- Diese Frage (und Visuelle Studio 2015 CTP-test) sagt CLR-version ist 4.0.30319.0.
- Dieser MSDN-Seite sagt, dass .NET 4, 4.5, 4.5.2 verwendet CLR 4. Es gibt keine Informationen über .NET 4.6.
Bedeutet es, dass ich C# 6.0 features für meine software, die Ziele .NET 4.0? Gibt es irgendwelche Einschränkungen oder Nachteile?
.Net-Versionen 2.0 - 3.5 CLR v2.0. Neuere Versionen verwenden CLR v4.0.
Bedenken Sie, dass, Optimierung wise: Sie sind das hinzufügen einer separaten if-null-check für jede Katze wie diese
Meine Güte. Ich habe die Entwicklung einer WCF-targeting-v4.6 nur "erinnert", dass die Produktions-server nicht aktualisiert werden, bis 2018. Ich dachte ein Monat im Wert von Arbeit erfordern würde, ein paar Tage von refactoring. Fertig in fünf Minuten.Danke, Microsoft! 😀
Bedenken Sie, dass, Optimierung wise: Sie sind das hinzufügen einer separaten if-null-check für jede Katze wie diese
Meine Güte. Ich habe die Entwicklung einer WCF-targeting-v4.6 nur "erinnert", dass die Produktions-server nicht aktualisiert werden, bis 2018. Ich dachte ein Monat im Wert von Arbeit erfordern würde, ein paar Tage von refactoring. Fertig in fünf Minuten.Danke, Microsoft! 😀
InformationsquelleAutor MajesticRa | 2015-03-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja (meistens). C# 6.0 benötigt der neue Roslyn-compiler, aber der neue compiler kompilieren können, targeting älteren framework-Versionen. Das ist nur beschränkt auf die neuen features, die benötigen keine Unterstützung durch das framework.
Zum Beispiel, während Sie können die string-interpolation-feature in C# 6.0 mit früheren Versionen von .Net (wie es die Ergebnisse in einem Aufruf
string.Format
):Müssen Sie .Net 4.6 für die Verwendung mit
IFormattable
als nur die neue framework-version fügtSystem.FormattableString
:Den Fällen, die Sie erwähnt brauchen keine Typen aus dem framework zu arbeiten. Also der compiler ist vollständig in der Lage, die Unterstützung dieser Funktionen für alte framework-Versionen.
Gibt es irgendwo eine übersicht, um zu sehen, welche C# 6-Funktionen arbeiten .NET 4.0? Ein anderer Weg, diese Frage wäre: welche neuen Funktionen erfordern Unterstützung von Rahmen und welche nicht?
Ich kann nicht glauben, von anderen eine andere als die
IFormattable
string-interpolation.Ich denke, wir können sagen, dass alle syntaktischen Zucker verwendet werden kann, und gezielt auf die älteren framework-Versionen. ist es ok zu sagen, dass?
ja. Syntaktischer Zucker ist genau die Eigenschaften, die nur abhängig von compiler-Funktionen und nicht um Rahmenvorschriften.
InformationsquelleAutor i3arnon
Nur wollen, zu konzentrieren, zu verstehen, wie die Wikipedia und andere links.
Wenn Wikipedia sagt, dass C# 6.0 ist mit .NET Framework 4.6, es bedeutet einfach, dass die Produktion version des Compilers (msc.exe) werden Teil der .NET Framework (release 4.6). Über multi-targeting, solche Compiler kann unterstützen Sie den unteren Versionen .NET Framework-Versionen. Natürlich, da Roslyn wurde ein open-source-Projekt, der compiler ist jetzt vollständig von einer einzelnen Komponente.
Wenn etwas bezieht, die CLR-version 4.0.30319(.0), kann es eigentlich werden .NET Framework 4.* (4.0, 4.0.*, 4.5, 4.5.*, 4.6, 4.6.*), wie Sie alle implementieren der CLR-version-4-Spezifikation. Nicht zu erwähnen, Xamarin/Mono implementieren auch die gleichen CLR-Spezifikation.
Auf der MSDN-Seite ist noch nicht vollständig aktualisiert, aber einige Seite bereits hat .NET Framework 4.6 aufgelistet in der Version Information Abschnitt.
In allen, language-specs (wie auch der C# - compiler, die CLR-specs, und .NET Framework-Versionen sind nicht fest miteinander gekoppelt. Es gibt Entwicklern die nötige Flexibilität zu nutzen, neue Compiler, um ältere CLRs und .NET Frameworks.
InformationsquelleAutor Lex Li
Ja, Sie können die Verwendung neuerer Compiler für ältere frameworks und erhalten Sie Zugriff auf die neue compiler-features (solange diese Funktionen nicht benötigen neue Typen eingeführt .NET 4.6).
Andere Beispiele sind die Methoden mit default-Parameter wurde eingeführt, mit C# 4.0 (.NET 4.0), aber Sie sind in der Lage, Sie zu verwenden in .NET 2.0 (C# 2.0) und .NET 3.5 (C# 3.0) Projekte.
Sind Sie in der Lage, auch mit Extension-Methoden (Einführung in C# 3.0) in .NET 2.0 oder .NET 3.0 wenn Sie eine kleine Abhilfe, um den compiler glücklich, so dass Sie finden können ein Attribut eingeführt wurde .NET 3.5.
InformationsquelleAutor Scott Chamberlain
Wenn Sie Gebäude ascripts erinnern, um den Pfad zu ändern, um neue builder:
set CPATH=C:\Program Files (x86)\MSBuild\14.0\Bin
[Neu erstellen.bat]
InformationsquelleAutor oobe
Antwort von @oobe ist eigentlich importatnt. Könnte ich bauen meine Lösung über eine batch-Datei, die nur nach der Verwendung der MSBuild.exe von C:\Program Files (x86)\MSBuild\14.0\Bin.
InformationsquelleAutor Suryakant Soni