#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 : !!!!ПОКАЖИТЕ НАМ КОД!!!!