我刚刚在 VS2010 和 Script# 中遇到了一个非常奇怪的问题,大多数时候我都能够重新创建该问题。
在我的简单场景中,我的解决方案中有 2 个项目;一个标准的 Asp.Net MVC2 Web 应用程序和一个 Script# jQuery 类库。我创建了一个带有静态方法的静态类(归属于 [Imported]),目的是我可以将代码中的此类映射到外部 Javascript 库,如文档中所述。
但是,似乎每当我用 [IgnoreNamespace] 装饰这样的类来实现此目标时,该项目都会停止成功编译,但不会给我任何关于失败原因的反馈(例如,错误窗口中没有错误) 。摆脱这两者都不容易,因为 Visual Studio 似乎进入了一种永久的不构建失败状态;删除类和项目文件并不能解决问题,也不能重新启动 Visual Studio。我能让 VS 成功构建项目的唯一方法是完全删除该项目,创建一个新项目,然后将文件添加回来,这至少可以说很烦人。
通过详细的构建输出设置,我得到以下信息:
项目“e:\project\local\ScriptSharpDemo\Scripts\Scripts.csproj”中文件“C:\Program Files (x86)\ScriptSharp 1.0\ScriptSharp.targets”中的目标“AfterCompile”(目标“Compile”取决于它) ): 任务“ScriptCompilerTask” 完成执行任务“ScriptCompilerTask”——失败。 完成在项目“Scripts.csproj”中构建目标“AfterCompile”——失败。
..这并没有告诉我全部。
有几次我成功地创建了这种类型的类,然后成功构建,但大多数情况下我都可以非常可靠地重现这个问题。
在这一点上,我倾向于认为该错误在于 Script#,但只想确认这一点,并找到可能的解决方案(如果有)。
以防万一有人遇到类似问题,我已经找到了问题的原因。
使用此方法添加类或从另一个项目复制文件以在 Script# 中使用时,这会导致对 System.dll 的引用添加到项目中。这(可以理解)会导致项目无错误地停止编译。
最好有一个关于此问题的警告,或者让 Script# 以某种方式检测这种情况何时发生和/或在我使用“添加类”或导入文件时创建一个新模板,但这只是一个方便问题,至少现在我只需删除这个引用就可以轻松地让我的项目再次编译。
当尝试再次构建我的项目时,我遇到了以下可能的解决方案:
Script.Literal("{0}.doFoo()", variable)
)我尝试了此处给出的所有建议,但仍然发现该问题。 最终,我确定我的情况的原因是我向我的属性之一添加了 [IntrinsicProperty] 属性。 删除它解决了这个问题。 不要问我为什么这会导致问题,但我想我会分享这个解决方案,以防其他人遇到它。