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.

Другие вопросы по тегам