Script # и пространства имен - ошибки компиляции - PullRequest
0 голосов
/ 11 марта 2011

Я сейчас играю со скриптом # (версия 0.6.3), который жалуется на следующий код:

Убедитесь, что ваш исходный код C # компилируется и что вы не используете неподдерживаемую функцию

[ProjectDir] \ пространство1 \ Bar.cs:

using Application1.Space2;

namespace Application1.Space1
{
    public sealed class Bar
    {
        private void Baz()
        {
            IFoo foo = null;
            foo.Do(); //Here
        }
    }
}

[ProjectDir] \ пространство2 \ IFoo.cs:

namespace Application1.Space2
{
    public interface IFoo
    {
        void Do();
    }
}

Код компилируется без ошибок под обычным csc.exe
Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 21 марта 2011

Я думаю, что это проблема с текущей версией. Если вы переместите файл класса в корень проекта, он будет работать?

РЕДАКТИРОВАТЬ: Исправление, это связано с изменением текущей версии. От @scriptsharp через twitter: «Проект веб-приложения создает несколько скриптов (для каждой папки). Если вам не нужна эта модель, просто используйте проект класса lib. HTH». Это раньше не делалось. Все еще точно не объясняет причину, по которой он выводит это ужасное сообщение об ошибке. Мне нравится, что это заставляет вас отделять логику приложения от объектной модели, но было бы неплохо, если бы это изменение было задокументировано где-то очевидным. Я люблю SS и очень надеюсь, что оно превратится в более серьезно разработанное / поддерживаемое приложение.

0 голосов
/ 14 марта 2011

Эта ошибка может произойти, если вы используете частичные пространства имен, например ::

using Application1;

namespace Application1.Space1
{
     public class Bar
     {
          public Space2.Foo GetFoo()
          {}
     }
}

Выше будет сгенерирована ошибка компилятора, а:

using Application1;

namespace Application1.Space1
{
     public class Bar
     {
          public Application1.Space2.Foo GetFoo()
          {}
     }
}

Скомпилируется без ошибок.

У меня также было это с:

object.method().property.method();

Исправлено с помощью:

variable = object.method();
variable.property.method();
...