我收到此消息
“检查您的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 = new Ext.Window
而不是你做var win = Ext.create('Ext.window')
您可以看到各种尝试。所有编译但都被S#反弹
答案 0 :(得分:1)
我看到此错误的最常见原因是部分限定的类型名称,从脚本#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
),您有时可以看到更详细的错误消息或任何抛出的异常,以帮助调试错误原因。我的一个较大的脚本#项目偶尔会抛出你看到的错误,所以我实际上在.bat
旁边保留.csproj
以调试原因。
我的命令行脚本通常如下所示,但您可以查询ssc
的所有参数。
@SET SS="c:\program files (x86)\ScriptSharp\v1.0"
%SS%\ssc /debug ^
/D:MYDEFINE ^
/ref:%SS%\Framework\mscorlib.dll ^
/ref:%SS%\Framework\Script.Web.dll ^
/ref:%SS%\Framework\Script.jQuery.dll ^
/out:Output.js ^
.\Properties\AssemblyInfo.cs ^
.\RestOfMySourceCode.cs ^
...
答案 1 :(得分:1)
您遇到的错误是编译器失败的情况,因此无法报告更好的错误。如果你做了让它真的不开心的事情,你会看到其他语言(包括c#)的类似内部编译器错误。虽然我完全同意尽可能产生更好的错误是有用的,但在某些情况下,检测不受支持的构造与支持构造的工作一样好。
我希望您能够并使用最新的编译器版本 - 从构建到构建的错误体验不断改进......例如报告c#line#,编译其余的c#代码,以及发出生成的javascript中的失败行的错误语句,而不是全部或全部的方法,以及msbuild路径中更好的错误报告。
在这种特殊情况下,我怀疑在上面的代码中使用名称空间限定的类型名称(extwrap.Ext和jslate.viewport)是错误的原因。实际上这个限制列在脚本#自述文件中(以前可用,但由于文档的一部分已经过时而被删除...对不起...需要重新联机或包含在内在设置中。)
另外,作为fyi - 重新思考脚本#编译方法的一些核心部分,一劳永逸地处理一堆问题。我想开始这个,然后发布编译器的源代码。实现这一根本性变革的目的是为GitHub带来整个项目的下一步操作......以及跟踪那里的进展情况。
答案 2 :(得分:1)
如果代码中有命名空间详细信息,我经常发现Script Sharp会无声地失败。
我没有足够的注意力来记住哪些实例让人心烦意乱。但通常这些构建失败发生在我比较枚举时(即if(enum1 == EnumTypes.Something))
或者在引用带有前缀的命名空间时。 即Foo.Bar bar = Foo.Bar.Create(blah);
我不记得那是不是完全失败了 - 但它与此类似的东西
答案 3 :(得分:0)
我想Script#可能打印出违规行#,不是吗?这可能会给你一个线索:)
以下是来自脚本#Blog的类似警告的示例:
http://www.nikhilk.net/ScriptSharp-Update-Nov-2009.aspx
stackoverflow上的论坛不允许我创建新标签 scriptsharp,所以我在这里发帖。它似乎在检索 尚不支持环境变量值。运用 要生成的System.Gadgets.EnvironmentService.GetEnvironmentVariable JS中的“System.Environment.getEnvironmentVariable(..)”给出了一个 编译错误“检查您的C#源编译并确定您是 没有使用不受支持的功能。“
我也看到实现只返回null。如果不 支持,我能以某种方式将这个JS嵌入到代码中吗?
干杯布鲁斯
PS: !!!!显示我们的代码!!!!