Я искал другие вопросы, связанные с этим, но никто, кажется, не совсем то, что я ищу.
У меня есть веб-сайт, работающий на ядре ASP.NET с новой структурой проекта в VS2017. Файлы кода с использованием функций С# 7 компилируются в порядке. Но попытка использовать эти функции в представлении View приводит к ряду ошибок в синтаксисе. Я попытался установить Roslyn, чтобы его можно было использовать при компиляции представлений, поскольку из того, что я могу сказать, функции С# 7 доступны в пакете Roslyn nuget 2.x и выше. Но теперь я получаю обратную связь, в которой явно говорится
error CS8059: Объявление переменной 'out variable' не доступно на С# 6. Используйте язык версии 7 или выше.
В прошлом я бы проверял файл web.config, но в проекте ASP.NET Core нет проекта web.config, кроме почти пустого в корне для обработки запроса от IIS.
Как указать, что мои представления должны быть скомпилированы с Roslyn, поскольку это не выполняется до выполнения? По крайней мере, я предполагаю, что это исправит мою проблему на данный момент.
Edit: Этот вопрос не дублирует это, как я уже упоминал в начале, я также искал существующие вопросы. Это специально включает возможности С# 7 в вашем приложении во время компиляции и только для приложения ASP.NET. Я использую ASP.NET Core, который не имеет web.config с любыми параметрами компиляции, определенными в нем. Кроме того, я пытаюсь сделать это для представлений, которые компилируются во время выполнения и могут находиться в другой системе.
Решение:
Для всех, кого это интересует, вам нужно добавить Roslyn в свой проект (который я знал), но вам также нужно настроить RazorViewEngineOptions
на использование CSharpParseOptions
, который указывает версию языка (по умолчанию - 6). Я сделал это, но я не сделал это правильно. Мне нужно было назначить результат WithLanguageVersion()
повторной вершины ParseOptions
, чтобы заменить их.
services.AddMvc().AddRazorOptions(options => options.ParseOptions = options.ParseOptions.WithLanguageVersion(LanguageVersion.CSharp7));