Использование функций С# 7 внутри представления в проекте ASP.NET MVC Core
Я искал другие вопросы, связанные с этим, но никто, кажется, не совсем то, что я ищу.
У меня есть веб-сайт, работающий на ядре 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));
Ответы
Ответ 1
Не могли бы вы попробовать следующее (рекомендованное людьми в основной команде ASP.NET):
- Установите пакеты Microsoft.CodeAnalysis.CSharp(версия 2.0.0) и System.ValueTuple(версия 4.3.0)
-
В Startup.cs в методе ConfigureServices настройте Razor на использование С# 7, выполнив следующие действия:
services.AddMvc().AddRazorOptions(options =>
options.ParseOptions = new CSharpParseOptions(LanguageVersion.CSharp7));
Ответ 2
Итак, я узнал, что есть некоторые варианты компиляции, которые вы вызываете в вызове ConfigureServices()
.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc().AddRazorOptions(x => x.ParseOptions.WithLanguageVersion(LanguageVersion.CSharp7));
}
Проблема LanguageVersion.CSharp7
дает ошибку, если вы не добавляете Roslyn. Поэтому я предполагаю, что это необходимо.
После добавления Roslyn все компилируется отлично, но в представлении все еще появляется ошибка.
@{
//My view code
string s = "1";
int.TryParse(s, out int i);
}
Итак, если MVC предоставляет RazorOptions, который вы можете использовать для указания языковой версии, почему это не выполняется?