脚本#,如何诊断“检查您的C#源编译并且您没有使用不受支持的功能”

时间:2011-10-28 02:19:13

标签: 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 = new Ext.Window

而不是你做

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

您可以看到各种尝试。所有编译但都被S#反弹

4 个答案:

答案 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: !!!!显示我们的代码!!!!