Работает ли C # 6.0 для .NET 4.0?
69991 просмотра
5 ответа
Я создал пример проекта с вкусностями 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? Есть ли какие-либо ограничения или недостатки?
Автор: MajesticRa Источник Размещён: 13.11.2019 11:34Ответы (5)
282 плюса
Да (в основном) C # 6.0 требует нового компилятора Roslyn, но новый компилятор может компилировать для более старых версий фреймворка. Это ограничено только новыми функциями, которые не требуют поддержки со стороны платформы .
Например, хотя вы можете использовать функцию интерполяции строк в C # 6.0 с более ранними версиями .Net (так как это приводит к вызову string.Format
):
int i = 3;
string s = $"{i}";
Вам нужен .Net 4.6, чтобы использовать его с IFormattable
добавлением только новой версии фреймворка System.FormattableString
:
int i = 3;
IFormattable s = $"{i}";
Случаи, которые вы упомянули, не нуждаются в типах из каркаса для работы. Таким образом, компилятор полностью поддерживает эти функции для старых версий фреймворка.
Автор: i3arnon Размещён: 08.03.2015 12:2951 плюса
Просто хочу сосредоточиться на том, как понимать Википедию и другие ссылки.
Когда Википедия говорит, что 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.
Автор: Lex Li Размещён: 08.03.2015 04:0528 плюса
Да, вы можете использовать новые компиляторы для более старых платформ и получить доступ к новым функциям компилятора (если эти функции не требуют новых типов, представленных в .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.
Автор: Scott Chamberlain Размещён: 08.03.2015 12:291 плюс
Если вы используете сборочные атрибуты, не забудьте изменить путь к новому сборщику:
установить CPATH = C: \ Program Files (x86) \ MSBuild \ 14.0 \ Bin
[Rebuild.bat]
set CPATH=C:\Program Files (x86)\MSBuild\14.0\Bin
call nuget_restore.bat
"%CPATH%\msbuild" YourSolution.sln /t:Rebuild /p:Configuration=Release /fileLogger /flp:logfile=JustErrors.log;errorsonly /verbosity:minimal
if %errorlevel% neq 0 goto ERROR
REM call deploy Release //Things like deploy files..
goto END
:ERROR
echo ERROR: %errorlevel%
pause
:END
Автор: oobe
Размещён: 03.01.2018 10:08
1 плюс
Ответ @oobe на самом деле важен. Я мог построить свое решение с помощью командного файла только после использования MSBuild.exe из C: \ Program Files (x86) \ MSBuild \ 14.0 \ Bin .
Автор: Suryakant Soni Размещён: 19.06.2018 08:25Вопросы из категории :
- c# Преобразовать десятичную в двойную?
- c# Как рассчитать чей-то возраст в C #?
- c# Как вы сортируете словарь по значению?
- c# В чем разница между int и Integer в Java и C #?
- c# Как создать новый экземпляр объекта из Типа
- c# Datatable против Dataset
- .net Действительно ли опечатанные классы действительно предлагают преимущества?
- .net Setting Objects to Null/Nothing after use in .NET
- .net Почему я не могу иметь абстрактные статические методы в C #?
- c#-6.0 Какие преимущества инициализаторы словаря добавляют по сравнению с инициализаторами коллекции?
- c#-6.0 Нулевой оператор распространения и foreach
- c#-6.0 В чем разница между автоматическими свойствами get-only и свойствами тела выражения?
- c#-6.0 Что означает знак вопроса и точка оператора? значит в C # 6.0?
- c#-6.0 Работает ли C # 6.0 для .NET 4.0?
- c#-6.0 C # 6.0 локализация интерполяции строк