Roslyn feature/patterns branch (С# 7) - Как включить функции экспериментального языка
Я хочу экспериментировать с потенциальными возможностями языка С# 7.
У меня есть виртуальная машина, в которую я загрузил кодовую базу Roslyn (ветки функций/шаблонов) и построил, как описано в Roslyn github здесь: Строительство и тестирование в Windows.
Я могу успешно запустить новый экспериментальный экземпляр Visual Studio (установите VisualStudioSetup в качестве запуска и запустите проект).
Когда я пытаюсь использовать новые функции языка (сопоставление с образцом и локальные функции), я получаю ошибку в редакторе как squiggly, а также ошибку при создании:
![Ошибка совпадения шаблонов]()
![Локальная ошибка функции squiggly]()
Ошибка CS8058 Функция "локальные функции" является экспериментальной и не поддерживается; использовать '/features: localFunctions' для включения.
Ошибка CS8058 Функция "сопоставление образцов" является экспериментальной и не поддерживается; используйте '/features: patterns' для включения.
Где я могу поместить эти параметры?
Я попытался добавить его к аргументам командной строки, но получаю сообщение об ошибке.
![Roslyn Args]()
![Ошибка Roslyn Args]()
Ответы
Ответ 1
Это ошибка 7812, которую я еще не исправил. К сожалению.
Внутренне команда компилятора в основном просто проверяет вещи посредством модульных тестов или компилятора командной строки; если нам действительно нужно протестировать среду IDE, мы просто удалим проверку, передающую флаг функции.
Ответ 2
Извините, я не сделал R & D с указанным кодом, который вы загрузили.
Но в предварительном просмотре Visual Studio '15' (объявленном 30 марта 2016 года) я исправил это очень легко. Это может помочь другим людям.
Я получал ошибку
Ошибка CS8058 Функция "локальные функции" является экспериментальной и неподдерживаемой; использовать '/features: localFunctions' для включения.
Чтобы исправить это, выберите название проекта и щелкните правой кнопкой мыши → Окно свойств → Сборка, а затем
добавьте следующие два параметра в текстовое поле "Условные символы компиляции" __ DEMO __, __ DEMO_EXPERIMENTAL __
![введите описание изображения здесь]()
нажмите кнопку "Сохранить", чтобы сохранить его. Теперь создайте приложение, и ваша сборка будет успешной.
Несмотря на то, что в конце, если я добавлю один из __ DEMO__ и __DEMO_EXPERIMENTAL __, он работает нормально.
Ответ 3
Я нашел способ включить новые языковые функции.
Проследив код, я обнаружил, где выполняется проверка функции (функция IsFeatureEnabled), и изменил ее, чтобы всегда возвращать true.
Затем я перестроил из командной строки, как и раньше. И после этого новые возможности языка активируются, когда я запускаю экспериментальный экземпляр Visual Studio.
ДО:
![Функция останова точки]()
ПОСЛЕ:
internal bool IsFeatureEnabled(MessageID feature)
{
// Force all demo features:
return true;
// in "demo" mode enable all language features.
if (PreprocessorSymbols.Contains("__DEMO__"))
{
return true;
}