C# 脚本和编译器问题

C# 脚本和编译器问题,c#,visual-studio-2010,compiler-construction,script#,C#,Visual Studio 2010,Compiler Construction,Script#,我刚刚在VS2010和脚本#方面遇到了一个非常奇怪的问题,大多数时候我都能够重新创建它 在我的简单场景中,我的解决方案中有2个项目;一个标准的Asp.Net MVC2 Web应用程序和一个脚本#jQuery类库。我创建了一个静态类(属性为[Imported]),上面有一个静态方法,目的是我可以在代码中将这个类映射到一个外部Javascript库,如文档中所述 然而,似乎每当我用[IgnoreNamespace]来装饰这样一个类以实现这一目标时,项目都会停止成功编译,但不会给我任何关于失败原因的反

我刚刚在VS2010和脚本#方面遇到了一个非常奇怪的问题,大多数时候我都能够重新创建它

在我的简单场景中,我的解决方案中有2个项目;一个标准的Asp.Net MVC2 Web应用程序和一个脚本#jQuery类库。我创建了一个静态类(属性为[Imported]),上面有一个静态方法,目的是我可以在代码中将这个类映射到一个外部Javascript库,如文档中所述

然而,似乎每当我用[IgnoreNamespace]来装饰这样一个类以实现这一目标时,项目都会停止成功编译,但不会给我任何关于失败原因的反馈(例如,错误窗口中没有错误)。这两者都不容易摆脱,因为VisualStudio似乎陷入了一种不构建失败的永久状态;删除类和项目文件无法解决此问题,也无法重新启动visual studio。我能让VS成功构建项目的唯一方法是完全删除该项目,创建一个新项目,然后再添加文件,至少可以说这很烦人

通过详细的生成输出设置,我得到以下结果:

项目“e:\project\local\ScriptSharpDemo\Scripts\Scripts.csproj”中文件“C:\Program Files(x86)\ScriptSharp\v1.0\ScriptSharp.targets”中的目标“AfterCompile”(目标“编译”取决于此): 任务“脚本编译器任务” 已完成执行任务“ScriptCompilerTask”--失败。 已完成在项目“Scripts.csproj”中构建目标“AfterCompile”--失败

。。这并不能告诉我全部情况

有几次我成功地创建了这种类型的类,然后成功地构建了它,但大多数情况下我可以非常可靠地重现这个问题


在这一点上,我倾向于认为错误在于脚本#,但我只想确认这一点,并找到可能的解决方法(如果有)。

为了防止任何人出现类似问题,我找到了问题的原因

使用此方法添加类或从另一个项目复制文件以在脚本#中使用时,这会导致向项目添加对System.dll的引用。这(可以理解)会导致项目停止编译而不会出错


如果有这样的警告或者脚本#能够在出现这种情况时以某种方式进行检测和/或在我使用“添加类”或导入文件时创建新模板,那就太好了,但这只是一个方便的问题,至少现在我可以通过删除此引用轻松地重新编译项目。

在尝试重新构建项目时,我遇到了以下可能的解决方案:

  • “Home\HomePage.cs”和“Shared\Utility.cs”不得删除,并保留在最初创建的位置
  • “Home\HomePage.cs”和“Shared\Utility.cs”必须是“*.csproj”-文件中的最后一个条目。在它们之后,不应跟随任何“Compile”标记
  • 对“Script.Literal”的有问题的调用可能会导致静默失败-在使用参数(如
    Script.Literal(“{0}.doFoo()”,variable)
    )时尤其要小心
  • 当格式参数无效时,“String.Format”似乎也是如此
  • 名称空间和文件夹似乎会导致许多问题,将所有类放在同一名称空间中,将所有类放在同一文件夹中可能会有所帮助

我尝试了这里给出的所有建议,但仍然看到了问题所在。最后,我确定造成我这种情况的原因是我在我的一个属性中添加了[IntrinsicProperty]属性。移除它解决了这个问题。不要问我为什么这会导致问题,但我想我会分享这个解决方案,以防其他人遇到它。

您应该精简您试图导入的类并将其发布到此处。此外,您是否使用最新版本的编译器?如果还没有,请尝试0.6.1.0。谢谢您的回复。我意识到,只有在尝试将新类插入脚本项目时选择“添加类…”项,而不是选择“添加项…”然后从中选择脚本类时,才会出现此问题。一旦您使用第一个方法添加一个类,它就会使项目不可用。这是有道理的;显然,我必须使用正确的方法向项目中添加一项。即使生成的文件看起来完全相同,S#显然知道其中的区别,并且不喜欢它。不幸的是,当你在这个区域时,很容易犯错误:(我又遇到了这个问题,但这次我用正确的方法添加了一个新类。我刚去添加项->脚本->类,尝试重建项目,现在显示构建失败,没有任何错误消息。我尝试删除文件,清理/重建项目,但没有任何效果。我想你从来没有遇到过这个问题。)在您的开发过程中?是否有某种编译器缓存可以清除,以便重新开始构建,而无需重新创建整个项目?我使用的是0.6.2,但如上所述,0.6.1也是如此。