Обновил существующий тип проекта веб-сайта Visual Studio 2015, я изменил Framework на 4.6.
Затем я ожидал, что все эти новые функции будут доступны в моем коде файлов.
К сожалению, я получаю такие ошибки:
Ошибка CS8026: функция "свойство, содержащее выражение" недоступна в C # 5. Используйте язык версии 6 или выше.
или например:
Ошибка CS8026: функция «интерполированные строки» недоступна в C # 5. Используйте язык версии 6 или выше.
Я быстро проверил в Google и нашел парня, который оставлял несколько комментариев в блоге ScottGu (введите на странице поиск «8026»).
Поскольку я не понимаю его решения, плюс я хочу, чтобы решение было более заметным, я создал эту публикацию SO.
Мой вопрос:
Как я могу создать проект Visual Studio 2015 типа « Веб-сайт» (т.е. не веб-приложение ) для распознавания функций C # 6?
источник
Ответы:
Я тестировал это с помощью ASP.NET MVC 5 (проверено 5.2.3), и ваш опыт может отличаться от других веб-фреймворков, но вам просто нужно добавить Roslyn CodeDOM | Пакет NuGet
Поставщики CodeDOM для компилятора .NET ...
https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/
Пакет NuGet должен добавить файлы DLL и добавить следующее в ваш web.config.
Если он все еще отсутствует. Попробуйте добавить себя.
источник
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
и их зависимостиMicrosoft.Net.Compilers
Смотрите также этот блог из Сайед Ибрагим Хашими о том , как сделать это с помощью VS IDE.
Обновить.
В VS 2017 и 2019 эта функция перемещена в Сборка -> Компиляция ASP.NET .
источник
Я установил DotNetCompilerPlatform, как предложил @jbtule, но все равно получал те же ошибки.
Я закрыл решение, удалил папки bin и obj, затем открыл решение и перестроил. Теперь возможности C # 6 работают.
источник
Install-Package ...
). Также нацелена на 4.6.bin
иobj
.Возможные решения, взятые из комментариев к публикации в блоге ScottGu (ищите на странице "8026"):
Предложение решения 1 (Дэвид Тейлор)
Добавьте эти элементы dom кода RTM в web.config:
Затем добавьте файлы Roslyn и Microsoft.CodeDom.Providers. *. Dll в каталог BIN.
Его достаточно легко настроить, но мне было странно, что для него не был настроен шаблон по умолчанию, если вы выбрали .NET 4.6 при создании нового «веб-сайта» в VS 2015 RTM.
Предложение решения 2 (Мартин)
В дополнение к приведенному выше комментарию Дэвида Тейлора, похоже, что настройки system.codedom верны, когда веб-приложение создается с TargetFramework по умолчанию v4.5.2. Изменение TargetFramework на v4.6, по-видимому, приводит к изменению настроек компилятора для CSharp, что вызывает проблему.
Мои обходные пути были следующими:
Домашняя страница должна загрузиться должным образом.
Для информации: содержимое system.codedom сразу после изменения TargetFramework на v4.6. было следующим (обратите внимание на использование типа "Microsoft.CSharp.CSharpCodeProvider"):
источник
Microsoft.CSharp.CSharpCodeProvider
версия 4.0 означает, что он не использует Rosyln, поэтому не будет работать для C # 6.0.<LangVersion>
вcsproj
файле установлено значение6
. Это может вызвать проблемы, если это что-то еще.Это не для проекта веб-сайта . Вот как вы это делаете для проекта ASP.NET MVC.
Вы можете переключать C # 6 в пользовательском интерфейсе Visual Studio. Это настолько простой вариант, что сначала стоит попробовать.
источник
<% Eval(whatever) %>
.Вот как это выглядит в VS2017 с проектом веб-сайта:
источник
Я получил эту ошибку после внесения НУЛЕВЫХ изменений в мой проект WebAPI. Я удалил и переустановил пакет NuGet DotNetCompilerPlatform, что устранило проблему.
источник