Script# and compiler problems

﹥>﹥吖頭↗ 提交于 2019-12-07 05:38:41

问题


I've just come across a pretty strange problem with VS2010 and Script#, which most of the time I am able to re-create.

In my simple scenario I have 2 projects in my solution; a standard Asp.Net MVC2 Web Application, and a Script# jQuery Class Library. I created a static class (attributed with [Imported]) with a static method on it, the intention being that I can map this class in code to an external Javascript library, as described in the documentation.

However, it seems that whenever I decorate such a class with [IgnoreNamespace] to achieve this goal, the project stops successfully compiling but doesn't give me any feedback as to why it's failing (no errors in the error window, for example). It's not easy to get rid of either, as Visual Studio seems to get into a permanent state of not build failure; removing the classes and project files doesn't solve it, nor restarting visual studio. The only way I can get VS to build the project successfully is to delete the project entirely, create a new one then add the files back in, which is annoying to say the least.

With a verbose build output setting, I get the following:

Target "AfterCompile" in file "C:\Program Files (x86)\ScriptSharp\v1.0\ScriptSharp.targets" from project "e:\project\local\ScriptSharpDemo\Scripts\Scripts.csproj" (target "Compile" depends on it): Task "ScriptCompilerTask" Done executing task "ScriptCompilerTask" -- FAILED. Done building target "AfterCompile" in project "Scripts.csproj" -- FAILED.

.. which doesn't tell me whole lot.

There have been a couple of times where I have managed to create this type of class and then successfully build, but mostly I can reproduce this problem pretty reliably.

At this point I'm inclined to think that the bug lies with Script#, but would just like to have that confirmed, and to find a possible work around if there is one.


回答1:


Just in case anyone is having a similar issue, I've found the cause of the problem.

When adding a class using this method, or copying in a file from another project for use within Script#, this causes a reference to System.dll to be added to the project. This (understandably) causes the project to stop compiling without error.

It would be nice to have a warning about this or for Script# to somehow detect when this situation occurs and/or create a new template for when I use 'Add class' or import a file, but it is just a convenience issue and at least now I can painlessly get my project compiling again just by removing this reference.




回答2:


When trying to make my project build again, I came across the following, possible solutions:

  • The "Home\HomePage.cs" and "Shared\Utility.cs" must not be deleted and remain where they wre initially created
  • The "Home\HomePage.cs" and "Shared\Utility.cs" must be the last entries in the "*.csproj"-file. After them, no "Compile" tag should follow
  • Problematic calls to "Script.Literal" might cause silent fails - especially be careful when having parameters (like Script.Literal("{0}.doFoo()", variable))
  • The same seems to be true for "String.Format" when the format parameters are invalid
  • Namespaces and folders seem to cause many problems, putting all classes into the same namespace and all classes into the same folder might help



回答3:


I tried all of the suggestions that have been given here, but continued to see the issue. Eventually, I determined that the cause in my situation was that I had added an [IntrinsicProperty] attribute to one of my properties. Removing it solved the issue. Don't ask me why this was causing a problem, but I thought I would share this solution in case others run into it.



来源:https://stackoverflow.com/questions/3935465/script-and-compiler-problems

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!