Использование функций C# 7 внутри представления в ASP.NET основной проект MVC



Я искал другие вопросы, связанные с этим, но ни один из них, кажется, не совсем то, что я ищу.



У меня есть сайт, работающий на ASP.NET ядро с новой структурой проекта в VS2017. Файлы кода, использующие функции C#7, компилируются нормально. Но попытка использовать эти функции в представлении приводит к ряду ошибок в синтаксисе. Я попытался установить Roslyn, чтобы использовать его при компиляции представлений, так как из того, что я могу сказать, функции C#7 доступны в пакете Roslyn nuget 2.x и выше. Но теперь я получаю обратную связь, которая явно говорит




Ошибка CS8059: функция "объявление переменной out" недоступна в C# 6. Пожалуйста, используйте языковую версию 7 или выше.




В прошлом я проверял сеть.конфиг, но нет никакой паутины.config в an ASP.NET основной проект, отличный от почти пустого в корне для обработки запроса от IIS.



Как я могу указать, что мои представления должны быть скомпилированы с Roslyn, поскольку это не делается до времени выполнения? По крайней мере, я предполагаю, что это решит мою проблему в данный момент.



Редактировать:
Этот вопрос не является дубликатом этого, как я уже упоминал в начале, я также искал существующие вопросы. Это, в частности, включение функций C#7 в вашем приложении во время компиляции и только для ASP.NET применение. Я использую ASP.NET ядро, которое не имеет паутины.config с любыми настройками компиляции, определенными в нем. Кроме того, то, что я пытаюсь сделать это для представлений, которые компилируются во время выполнения и могут будьте в другой системе.



Решение:



Для тех, кто заинтересован, вы должны добавить Roslyn в свой проект (который я знал), но вы также должны настроить RazorViewEngineOptions для использования CSharpParseOptions, которые указывают языковую версию (по умолчанию 6). Я сделал это, но сделал неправильно. Мне нужно было назначить результат WithLanguageVersion() обратно поверх ParseOptions, чтобы заменить их.



services.AddMvc().AddRazorOptions(options => options.ParseOptions = options.ParseOptions.WithLanguageVersion(LanguageVersion.CSharp7));
679   2  

2 ответов:

Не могли бы вы попробовать следующее (рекомендуется людьми на ASP.NET основная команда):

  1. Установите Microsoft.CodeAnalysis.CSharp (версия 2.0.0) и System.ValueTuple (версия 4.3.0) пакеты
  2. При Запуске.cs, в методе ConfigureServices, настройте Razor на использование C# 7, выполнив следующее:

    services.AddMvc().AddRazorOptions(options =>
         options.ParseOptions = new CSharpParseOptions(LanguageVersion.CSharp7));
    

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

Comments

    Ничего не найдено.