Я создал пример проекта с вкусностями C # 6.0 - нулевое распространение и инициализация свойств в качестве примера, установил целевую версию .NET 4.0, и это ... работает.
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);
}
}
- Википедия говорит, что .NET Framework для C # 6.0 - 4.6.
- Этот вопрос (и CTP-тест Visual Studio 2015 ) говорит о версии CLR 4.0.30319.0.
- На этой странице MSDN говорится, что .NET 4, 4.5, 4.5.2 использует CLR 4. Информации о .NET 4.6 нет.
Означает ли это, что я могу использовать функции C # 6.0 для своего программного обеспечения, предназначенного для .NET 4.0? Есть ли какие-либо ограничения или недостатки?
Ответы:
Да (в основном) C # 6.0 требует нового компилятора Roslyn, но новый компилятор может компилировать для более старых версий фреймворка. Это ограничено только новыми функциями, которые не требуют поддержки со стороны платформы .
Например, хотя вы можете использовать функцию интерполяции строк в C # 6.0 с более ранними версиями .Net (так как это приводит к вызову
string.Format
):Вам нужен .Net 4.6, чтобы использовать его с
IFormattable
добавлением только новой версии фреймворкаSystem.FormattableString
:Случаи, которые вы упомянули, не нуждаются в типах из каркаса для работы. Таким образом, компилятор полностью способен поддерживать эти функции для старых версий платформы.
источник
IFormattable
интерполяции строк.Просто хочу сосредоточиться на том, как понимать Википедию и другие ссылки.
Когда Википедия говорит, что C # 6.0 с .NET Framework 4.6, это просто означает, что рабочая версия компилятора (msc.exe) будет частью выпуска .NET Framework 4.6. Благодаря многоцелевому таргетингу такие компиляторы могут поддерживать более ранние версии .NET Framework. Конечно, с тех пор, как Roslyn стал проектом с открытым исходным кодом, компилятор теперь является полностью отдельным компонентом.
Когда что-то ссылается на версию CLR 4.0.30319 (.0), фактически это может быть .NET Framework 4. * (4.0, 4.0. *, 4.5, 4.5. *, 4.6, 4.6. *), Поскольку все они реализуют Спецификация CLR версии 4. Не говоря уже о Xamarin / Mono, также реализуют ту же спецификацию CLR.
Страница MSDN еще не полностью обновлена, но на некоторых страницах уже есть .NET Framework 4.6, перечисленные в разделе «Информация о версии».
В целом, спецификации языка (а также компилятора C #), спецификации CLR и выпуски .NET Framework тесно не связаны друг с другом. Это дает разработчикам достаточно гибкости, чтобы использовать новые компиляторы для работы со старыми CLR и .NET Frameworks.
источник
Да, вы можете использовать новые компиляторы для более старых платформ и получить доступ к новым функциям компилятора (если эти функции не требуют новых типов, представленных в .NET 4.6).
Другими примерами этого являются методы с параметрами по умолчанию, которые были представлены в C # 4.0 (.NET 4.0), но вы можете использовать их в проектах .NET 2.0 (C # 2.0) и .NET 3.5 (C # 3.0).
Вы также можете использовать методы расширения (представленные в C # 3.0) в .NET 2.0 или .NET 3.0, если вы сделаете один небольшой обходной путь, чтобы компилятор был доволен, чтобы он мог найти атрибут, представленный в .NET 3.5.
источник
Если вы используете сборочные атрибуты, не забудьте изменить путь к новому сборщику:
установить CPATH = C: \ Program Files (x86) \ MSBuild \ 14.0 \ Bin
[Rebuild.bat]
источник
Ответ @oobe на самом деле важен. Я мог построить свое решение через командный файл только после использования MSBuild.exe из C: \ Program Files (x86) \ MSBuild \ 14.0 \ Bin .
источник