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

#script#

#сценарий#

Вопрос:

Я получаю это сообщение

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

И не знаю, как понять, что я делаю неправильно. Кто-нибудь знает?

Я понимаю общую концепцию того, что он говорит, но мне нужно что-то более конкретное

РЕДАКТИРОВАТЬ: я не просил, чтобы конкретный экземпляр был диагностирован. Я спрашивал, есть ли переключатель компилятора, который дал бы больше информации

В любом случае, вот неисправный код

     [ScriptName("Ext")]
    [IgnoreNamespace]
    [Imported()]
    public partial class Ext //: ext.data.Store
    {
        [ScriptName("create")]
        public static object Create(string name, object config)
        {
            return null;
        }
    }    
public sealed class viewport
    {

        public static viewport MakeViewPort()
        {
            return new viewport();
//return (viewport)extwrap.Ext.Create("Ext.container.ViewPort", null);
        }
    }
    public class Class1
    {
        public void foo()
        {

            jslate.viewport vp = jslate.viewport.MakeViewPort(); <=== fails here


        }
    }
 

Я пытаюсь обойти тот факт, что extjs4 не позволяет

var win = новое внешнее окно

вместо этого вы делаете

 var win = Ext.create('Ext.window')
 

Вы можете увидеть различные попытки этого. Все компилируются, но отбрасываются S#

Комментарии:

1. Я бы начал с того, что убедился, что ваш исходный код C # компилируется. Если это произойдет, я бы убедился, что вы не используете функцию, которая не поддерживается Script# . Серьезно? Я бы начал с того, что вспомнил, что никто из нас не может видеть ваш код или ваш экран с такого расстояния, и вы не предоставили никакой информации, кроме того же сообщения об ошибке, которое вы нам дали. Извините, но голосование за закрытие как «Не настоящий вопрос» без дополнительной информации.

2. @pm100 Я обновил свой ответ общим советом, который поможет мне в этой ситуации.

Ответ №1:

Ошибка, с которой вы столкнулись, — это тот случай, когда, к сожалению, компилятор потерпел неудачу и, следовательно, не смог сообщить о лучшей ошибке. Вы увидите аналогичные внутренние ошибки компилятора для других языков (вкл. c #) если вы делаете что-то, что делает его действительно несчастным. Хотя я полностью согласен, что было бы полезно генерировать лучшие ошибки везде, где это возможно, есть несколько случаев, когда обнаружение неподдерживаемой конструкции так же хорошо, как и выполнение работы по поддержке конструкции.

Я надеюсь, что вы можете и используете последнюю версию компилятора — ситуация с ошибками постоянно улучшается от сборки к сборке… например, сообщение о строке # c #, компиляция остальной части кода c # и выдача инструкции об ошибке в результирующем javascript для строки с ошибкой вместо подхода «все или ничего», а также улучшение отчетов об ошибках в пути msbuild.

В данном конкретном случае я подозреваю использование имен типов, определяемых пространством имен (extwrap.Ext и jslate.viewport) в приведенном выше коде являются причиной ошибки. На самом деле это ограничение было указано в скрипте # readme (который был доступен ранее, но был удален, поскольку часть документа устарела… извините за это … нужно вернуть что-то в оперативный режим или включить в настройку.)

Кроме того, к вашему сведению, переосмысление некоторых основных частей подхода к компиляции script #, чтобы раз и навсегда решить кучу проблем. Я хотел бы начать это, а затем опубликовать исходные тексты для компилятора. Внедрение этого фундаментального изменения — это следующий шаг в переносе полного проекта на GitHub… для тех, кто отслеживает прогресс там.

Комментарии:

1. Я решил проблему, используя .net reflector pro (который декомпилируется до полностью отлаживаемого исходного кода внутри VS), а затем выполняет break при возникновении исключения. Конечно, если бы у нас был исходный код компилятора, было бы намного проще отлаживать, и мы могли бы публиковать исправления :-). Это было связано с определителями пространства имен.

2. КСТАТИ, я предполагал, что ssc читает IL, а не исходный код. Отсюда некоторые из моих предыдущих вопросов о том, «почему ssc не может генерировать код и для ссылочных сборок». Интересно отметить, что JSIL считывает IL; избегает неприятного синтаксического анализа и получает var, лямбды и т. Д. Бесплатно

Ответ №2:

Наиболее распространенной причиной, которую я вижу для этой ошибки, является неполное имя типа, которое по состоянию на Script # 0.7.3 поддерживается не полностью. Например:

 namespace NSA.NSB
{
    class MyType { ... }
}

...

NSB.MyType myObj1 = new NSB.MyType(); // generates the error
NSA.NSB.MyType myObj2 = new NSA.NSB.MyType(); // does not generate the error
 

Говоря в более общем плане, я заметил, что иногда подробные сообщения об ошибках не отображаются полностью в Visual Studio. Если вместо этого вы используете компилятор командной строки ( ssc.exe ), иногда вы можете увидеть более подробное сообщение об ошибке или любые выданные исключения, чтобы помочь отладить причину ошибки. Один из моих более крупных проектов Script # время от времени выдает ошибку, которую вы видите, поэтому я на самом деле поддерживаю .bat свою сторону .csproj , чтобы отладить причину.

Мой сценарий командной строки обычно выглядит так, хотя вы можете запросить ssc все его параметры.

 @SET SS="c:program files (x86)ScriptSharpv1.0"
%SS%ssc /debug ^
/D:MYDEFINE ^
/ref:%SS%Frameworkmscorlib.dll ^
/ref:%SS%FrameworkScript.Web.dll ^
/ref:%SS%FrameworkScript.jQuery.dll ^
/out:Output.js ^
.PropertiesAssemblyInfo.cs ^
.RestOfMySourceCode.cs ^
...
 

Ответ №3:

Я часто обнаруживал, что Script Sharp автоматически завершается сбоем, если в коде есть сведения о пространстве имен.

Я не уделил достаточно внимания, чтобы запомнить, какие экземпляры его расстраивают. Но обычно эти сбои сборки происходят, когда я сравниваю перечисления (т.Е. if (enum1 == EnumTypes .Что-то))

Или когда вы ссылаетесь на что-то с префиксом пространства имен. т.е. Foo .Bar bar = Foo.Bar.Create (бла);

Я не могу вспомнить, было ли это что-то, что точно не работает, но это что-то похожее на это

Комментарии:

1. Лучший способ избежать этих ошибок — часто создавать базу кода.

Ответ №4:

Я полагаю, что Script #, вероятно, выводит оскорбительную строку #, не так ли? Это может дать вам подсказку 🙂

Вот пример аналогичного предупреждения из Script # Blog:

http://www.nikhilk.net/ScriptSharp-Update-Nov-2009.aspx

Форум в stackoverflow не позволяет мне создавать новый тег scriptsharp, поэтому я публикую здесь. Похоже, что извлечение значений переменных среды еще не поддерживается. Использование System.Гаджеты.EnvironmentService.GetEnvironmentVariable для создания «System.Environment.GetEnvironmentVariable (..)» в JS выдает ошибку компиляции «Проверьте, что ваш исходный код C # компилируется и что вы не используете неподдерживаемую функцию».

Также я вижу, что реализация просто возвращает null. Если не поддерживается, могу ли я как-то встроить этот JS в код?

Приветствия Брюса

PS : !!!!ПОКАЖИТЕ НАМ КОД!!!!