Ответ 1
Я чувствую вашу боль.
На самом деле это ограничение Roslyn в настоящее время, так как оно вставляет все в класс, даже если это другой класс.
Я уже говорил с командой Roslyn, и они скоро будут поддерживать методы распространения.
Я играю с 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 в каком-то классе, который вызывает расширение вложенности, есть ли какой-либо путь вокруг этого?
Я чувствую вашу боль.
На самом деле это ограничение Roslyn в настоящее время, так как оно вставляет все в класс, даже если это другой класс.
Я уже говорил с командой Roslyn, и они скоро будут поддерживать методы распространения.
К сожалению, поскольку компиляция чего-то "на лету" требует класса, scriptcs
был разработан, чтобы взять исходный код, который имел значение, и обернуть его в класс. Вам нужно будет изменить версию scriptcs
для ваших нужд - или рассмотрите вклад в проект.
Однако я тоже люблю scriptcs
и считаю это одним из самых фантастических проектов там сегодня!
Я тоже пробовал это раньше, когда использовал scriptcs
, и мое сердце разбилось, когда оно не сработало. Если бы у меня было больше пропускной способности, я бы добавил это дополнение самостоятельно.
AFAIK это не ограничение с Roslyn.