Подтвердить что ты не робот

Использование функций С# 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));
4b9b3361

Ответ 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, который вы можете использовать для указания языковой версии, почему это не выполняется?