Получение ошибки при запуске скрипта C # с использованием пакета NuGet; Я думаю, что пакет NuGet работает под старой версией .NET - PullRequest
0 голосов
/ 08 сентября 2018

Я использую библиотеку 0Zero.Sandbox из NuGet для песочницы сценария C #, но я получаю эту ошибку, когда определяю метод с выражением тела:

Ошибка (CS1002):; ожидается

А вот моя функция:

public T Evaluate<T>(string code)
{
    var str =
$@"using System;
namespace MyScripts
{{
    public static class Script
    {{
        public static {typeof(T)} Function() => {code};
    }}
}}";
    new SandBoxer(str, false).SandBox.Call("MyScripts.Script", "Function", out T result);
    return result;
}

Я думаю, что происходит, когда пакет NuGet работает под старой версией .NET, которая не поддерживает методы выражения выражений, но я не знаю, как заставить его работать под последней версией, как мой настоящий проект. Как бы я это сделал? Если я заменю метод выражения тела на обычный метод:

public static {typeof(T)} Function() {{ return {code}; }}

все работает нормально ... Или я просто упускаю очевидную синтаксическую ошибку? Я не думаю, что это так, потому что я могу скомпилировать свою функцию просто отлично, используя Roslyn, не получая никаких ошибок ...

1 Ответ

0 голосов
/ 08 сентября 2018

Библиотека, работающая под любой версией .net, на которую ориентировано ваше приложение. Однако он может анализировать только более старую версию языка C #. Версия фреймворка и версия на языке C # не связаны друг с другом, они могут развиваться по отдельности.

Если это так, библиотека должна быть обновлена, чтобы иметь возможность анализировать более новую версию. Похоже, что этот пакет последний раз обновлялся после выпуска C # 6.0, так что это была бы последняя версия языка, которую он мог понять, если бы он когда-либо обновлялся для этого.

...