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

Как определить метод расширения в script cs csx script

Я играю с ScriptCS (это потрясающе!), но я не мог понять , как определить расширения в файле .csx script.

Возьмем этот пример:

using System.IO;

public static class Extensions
{
    public static string Remove(this string source, params string[] toRemove)
    {
        foreach(var r in toRemove)
        {
            source = source.Replace(r,"");
        }
        return source;
    }
}

string[] entries = 
    Directory
        .GetFiles(
            @"C:\Users\blah\blah",
            "*.mp4",
            SearchOption.AllDirectories)
    .Select( p => p.Remove("Users"))
    .ToArray();

foreach(var e in entries)
{
    Console.WriteLine(e);
}

Это приводит к ошибке:

ошибка CS1109: методы расширения должны быть определены в статическом статическом уровне класс; Расширения - это вложенный класс

Я предполагаю, что ScriptCS обертывает csx в каком-то классе, который вызывает расширение вложенности, есть ли какой-либо путь вокруг этого?

4b9b3361

Ответ 1

Я чувствую вашу боль.

На самом деле это ограничение Roslyn в настоящее время, так как оно вставляет все в класс, даже если это другой класс.

Я уже говорил с командой Roslyn, и они скоро будут поддерживать методы распространения.

Ответ 2

К сожалению, поскольку компиляция чего-то "на лету" требует класса, scriptcs был разработан, чтобы взять исходный код, который имел значение, и обернуть его в класс. Вам нужно будет изменить версию scriptcs для ваших нужд - или рассмотрите вклад в проект.

Однако я тоже люблю scriptcs и считаю это одним из самых фантастических проектов там сегодня!

Я тоже пробовал это раньше, когда использовал scriptcs, и мое сердце разбилось, когда оно не сработало. Если бы у меня было больше пропускной способности, я бы добавил это дополнение самостоятельно.

AFAIK это не ограничение с Roslyn.