C# 7.1 не может быть опубликован
У меня есть веб-приложение ASP.NET Core C#. Я сделал некоторые изменения, которые теперь используют функции C# 7.1. Я изменил версию проекта, поэтому он компилируется и работает нормально. Однако, когда я пытаюсь опубликовать проект, я получаю сообщение об ошибке:
Функция "литерал по умолчанию" недоступна в C# 7.0. Пожалуйста, используйте языковую версию 7.1 или выше.
Команда компиляции, которую я вижу:
C:...\.nuget\packages\microsoft.net.compilers\2.6.1\tools\csc.exe /noconfig /unsafe- /checked- /nowarn:1701,1702,1705,1701,1702,2008 /nostdlib+ /errorreport:prompt /warn:4 /define:TRACE;RELEASE;NETCOREAPP2_0 /errorendlocation /preferreduilang:en-US /warnaserror+:NU1605`
Как и предполагалось в другом месте, я установил Microsoft.Net.Compilers
(v2.6.1), но это не имело никакого значения.
Есть ли параметр Visual Studio, который влияет конкретно на публикацию?
ОБНОВЛЕНИЕ: Похоже, консольное приложение не имеет этой проблемы. Если он успешно собирается, он также успешно публикуется. Однако веб-приложение не публикуется. Был ли кто-нибудь успешным в публикации веб-приложения ASP.NET Core с функциями C# 7.1?
5 ответов
Добавление <LangVersion>latest</LangVersion>
в ваш.pubxml файл позволил опубликовать Visual Studio 2017 (15.5.2 в моем случае).
Источник: https://developercommunity.visualstudio.com/solutions/166543/view.html
Обновить:
После обновления моего VS2017 с версии 15.4.5 до 15.5.2 я могу воспроизвести проблему, и я получаю ошибку
Функция "литерал по умолчанию" недоступна в C# 7.0. Пожалуйста, используйте языковую версию 7.1 или выше
Ответ от @Jeremy Cook решает проблему: <LangVersion>latest</LangVersion>
в.pubxml
И в старом, и в новом форматах проекта LangVersion
За это отвечает элемент в файле проекта. Вы можете изменить это через csproj
XML-файл или через пользовательский интерфейс в Visual Studio.
Обратите внимание, что этот параметр зависит от конфигурации вашей сборки. Чтобы убедиться, что вы можете и кодировать, и публиковать, используя C# 7.1 и более поздние версии, убедитесь, что вы настроили этот параметр независимо от конфигурации сборки (Debug
, Release
так далее).
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<LangVersion>latest</LangVersion>
</PropertyGroup>
</Project>
Для пользователей MAC я потратил много времени на выяснение. Вот что сработало для меня. Щелкните правой кнопкой мыши основной файл .csproj и выберите «Редактировать файл проекта», чтобы открыть его. Затем внутри ... добавьте последнюю строку и сохраните ее. Вот и все! Запустите свой код, и теперь он должен работать нормально.
Если вы переходите с ASP.NET Core 2.0 на ASP.NET Core 2.1, убедитесь, что у вас есть строка
<TargetFramework>netcoreapp2.1</TargetFramework>
в вашем .pubxml
файл.
Кажется, вы опубликованы в вашем местном магазине Nuget. Убедитесь, что хранилище Nuget настроено на использование C#7.1. А также проверьте, обновлен ли ваш пакет Nuget.exe до последней версии, которая может использовать C#7.1.