2013-06-05 2 views
12

Gram z ScriptCS (co jest niesamowite!), Ale nie mogłem dowiedzieć się, jak zdefiniować metodę rozszerzenia w pliku skryptu .csx.Jak zdefiniować metodę rozszerzenia w skrypcie scripts csx

Weźmy ten przykład:

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); 
} 

To daje błąd:

error CS1109: Extension methods must be defined in a top level static class; Extensions is a nested class

Zgaduję, że ScriptCS owija CSX w jakiejś klasie, która jest przyczyną rozszerzenia być zagnieżdżone, czy istnieje sposób obejścia tego?

+1

To jest ograniczenie w Roslyn. Zobacz: http://social.msdn.microsoft.com/Forums/en-US/roslyn/thread/7c0a18eb-d37a-40e2-a26c-edb59b8f5cf3/. Obecnie nie można zdefiniować metod rozszerzeń w plikach '.csx'. Musisz umieścić je w bibliotece dll i odwołać się do biblioteki dll. – nemesv

+0

@nemesv to wygląda answer-worthy =) Dziękuję – TJB

Odpowiedz

18

Czuję twój ból.

W rzeczywistości jest to ograniczenie Roslyn obecnie, ponieważ wszystko zawija się w klasę, nawet jeśli jest to inna klasa.

Rozmawiałem jednak z zespołem Roslyn i wkrótce będą wspierać metody rozszerzania.

+2

W tym numerze 3 lata później: jak powinniśmy interpretować słowo "wkrótce"? – fra

+0

To świetne pytanie. Za chwilę zaktualizujemy najnowszą wersję Roslyn (2.0). Dowiem się, czy to dodało wsparcie dla metod rozszerzenia w csx. –

+0

Dziękujemy za aktualizację – fra

2

Niestety, ponieważ kompilacja czegoś w locie wymaga klasy, scriptcs został zaprojektowany, aby wziąć surowy kod, który miał znaczenie i zawinąć go w klasę. Będziesz musiał zmodyfikować wersję scriptcs dla swoich potrzeb - lub rozważyć contributing to the project.

Jednak ja też kochamscriptcs i uważam, że jest to jeden z najbardziej fantastycznych projektów na świecie!

Ja też próbowałem tak wcześnie podczas korzystania z scriptcs i moje serce się zepsuło, kiedy to nie zadziałało. Gdybym miał więcej przepustowości, sam bym wniósł ten dodatek.

AFAIK to nie jest ograniczenie Roslyn.

+1

Jest to ograniczenie w API skryptowania Roslyn. –