什么是使用JScript.Net的人?
我有兴趣知道谁使用JScript.Net和什么样的应用程序。 每当我阅读MSDN .Net文档时,我总是注意到JScript示例,但多年来我一直是一个C#开发人员,我从来没有真正知道任何人使用它。
人们使用这种应用程序的是什么types的应用程序,以及如何在灵活性,function和一般用法方面测量C#?
[ 编辑:只是为了澄清 – 我不问什么JScript.Net 是什么,我问什么人实际使用它 – 即有兴趣知道实际的使用情况,以及人们如何发现它的工作]
罗布 – 我已经在我的代码中的一个地方愤怒地使用JScript.NET,这本质上是公开其eval方法的function。 这是一个简化版本:
static public class Evaluator { private const string _jscriptSource = @"package Evaluator { class Evaluator { public function Eval(expr : String) : String { return eval(expr); } } }"; static private object _evaluator; static private Type _evaluatorType; static Evaluator() { InstantiateInternalEvaluator(); } static private void InstantiateInternalEvaluator() { JScriptCodeProvider compiler = new JScriptCodeProvider(); CompilerParameters parameters; parameters = new CompilerParameters(); parameters.GenerateInMemory = true; CompilerResults results; results = compiler.CompileAssemblyFromSource(parameters, _jscriptSource); Assembly assembly = results.CompiledAssembly; _evaluatorType = assembly.GetType("Evaluator.Evaluator"); _evaluator = Activator.CreateInstance(_evaluatorType); } static public object EvaluateToObject(string statement) { try { return _evaluatorType.InvokeMember( "Eval", BindingFlags.InvokeMethod, null, _evaluator, new object[] {statement} ); } catch (Exception) { InstantiateInternalEvaluator(); return null; } }
您显然可以为其他返回types创build重载。 我不能声称这是我的原始想法! 例如,用于这个例子就是评估一个stringexpression式,如3 + 4
到7
而不用expression式parsing。
我build议大家不要使用它,或只使用顺势疗法的剂量。 不幸的是,我必须为了遗留原因而使用它,正如之前所述,它是为.NET 1.1开发的,并且没有升级,因此不支持generics,不支持委托,不能声明事件等等。非常普遍,目前还没有开发(虽然有时微软仍然修复我提交的错误)。 但这是一个小问题:编译器中存在主要问题,有效的代码可能会很容易崩溃,然后你所拥有的就是在jsc.exe深度的某个地方抛出一个exception,而没有提示哪个文件导致了崩溃,更不用说哪一行了的代码。 下面是一个例子(我将一个强types数组转换为ICollection):
***INTERNAL COMPILER ERROR*** Microsoft.Vsa.VsaException: InternalCompilerError (0x80133021): System.NotSupportedException: Not supported in a non-reflected type. at System.Reflection.Emit.SymbolType.GetMember(String name, MemberTypes type, BindingFlags bindingAttr) at System.Type.GetMember(String name, BindingFlags bindingAttr) at Microsoft.JScript.Convert.GetToXXXXMethod(IReflect ir, Type desiredType, Boolean explicitOK) at Microsoft.JScript.Convert.EmittedCallToConversionMethod(AST ast, ILGenerator il, Type source_type, Type target_type) at Microsoft.JScript.Convert.Emit(AST ast, ILGenerator il, Type source_type, Type target_type, Boolean truncationPermitted) at Microsoft.JScript.Binding.TranslateToILCall(ILGenerator il, Type rtype, ASTList argList, Boolean construct, Boolean brackets) at Microsoft.JScript.Lookup.TranslateToILCall(ILGenerator il, Type rtype, ASTList argList, Boolean construct, Boolean brackets) at Microsoft.JScript.Call.TranslateToIL(ILGenerator il, Type rtype) at Microsoft.JScript.Binding.TranslateToILSet(ILGenerator il, AST rhvalue) at Microsoft.JScript.Lookup.TranslateToILSet(ILGenerator il, Boolean doBoth, AST rhvalue) at Microsoft.JScript.VariableDeclaration.TranslateToIL(ILGenerator il, Type rtype) at Microsoft.JScript.Block.TranslateToIL(ILGenerator il, Type rtype) at Microsoft.JScript.FunctionObject.TranslateToIL(CompilerGlobals compilerGlobals) at Microsoft.JScript.FunctionDeclaration.TranslateToILInitializer(ILGenerator il) at Microsoft.JScript.Block.TranslateToILInstanceInitializers(ILGenerator il) at Microsoft.JScript.Class.TranslateToCOMPlusClass() at Microsoft.JScript.Class.TranslateToIL(ILGenerator il, Type rtype) at Microsoft.JScript.Package.TranslateToIL(ILGenerator il, Type rtype) at Microsoft.JScript.Block.TranslateToIL(ILGenerator il, Type rtype) at Microsoft.JScript.ScriptBlock.TranslateToIL(ILGenerator il, Type rtype) at Microsoft.JScript.ScriptBlock.TranslateToILClass(CompilerGlobals compilerGlobals, Boolean pushScope) at Microsoft.JScript.VsaStaticCode.TranslateToIL() at Microsoft.JScript.Vsa.VsaEngine.DoCompile() at Microsoft.Vsa.BaseVsaEngine.Compile()
祝你好运,如果你必须find这样的消息的问题。
JScript.NET有一些function对于一些项目来说可能是有趣的,比如原型devise(添加新的属性,我也想方法到任何对象的现有实例),从.NET 1.1(也许1.0)等已经有一种Lamdafunction等。但是为了达到与.NET 1.1完全不同的行为,他们必须在运行时辅助程序中包装所有的东西,JScript.NET有一个自己的String类,在需要的时候它会被转换成System.String。 与数组一样,JScript也有自己的实现,只要使用数组作为参数调用框架函数就必须将其转换。
我经历过这样有趣的事情,如果我直接作为parameter passing给方法( DoSomething(myRequest.Execute())
,请求的结果是System.String[][]
)但整个事情工作正常,如果我把结果首先分配给一个variables,然后将其传递给该方法,或者如果您尝试使用System.Array.Sort(..)
sorting数组它是简单地忽略,所以上。
我觉得JScript.NET是一个案例研究,以certificate也可以实现一个非常不同的哲学语言,而微软放弃了它,因为他们意识到它的方法没有很好的select,但他们吸取了教训,做了一个与PowerShell有一个相似的哲学的出色工作。
但是要简短地说一句:不要使用JScript.NET,如果你不必使用C#或VB.NET等现代语言,而且如果你需要脚本function,我推荐使用CSScript。
JScript .NET是为索尼媒体编辑产品系列编写应用程序扩展所支持的语言之一。 声音伪造&拉斯维加斯。
特别是Sound Forge有一个窗口,您可以使用它来编辑和运行脚本来处理audio文件。
事实certificate,Microsoft使用一种(或所有).NET支持的语言将脚本添加到应用程序中变得非常简单。 VB,JScript和C#。 只需要暴露应用程序中的一些对象,并将这些对象(实际上是程序集)与用户的脚本文本一起交给编译器。
他们有一个针对Sound Forge脚本编写者的networking论坛
使用业务stream程pipe理工具Metastorm BPM,您可以使用JScript.Net来扩展您的工作stream程。 例如,您可以将自定义.Net .dll添加到引擎,并使用JScript.Net在您的stream程中与它们交互。
我的经历相当积极。 我已经实现了一些小的胶水脚本,但我更喜欢随脚本使用JScript.Net到VBScript(第二种支持的脚本语言)。
我使用它很多,几乎完全,ASP.NET和相关的networking的东西。
你可以使用它几乎所有的东西,你可以使用其他的.NET语言。 它使MSIL,就像其他人一样;)编译与“快速”选项,原始扩展和eval的一些原生的JavaScript特性的轮stream,它执行就像在CLR上的任何其他代码。
当然,这并不是一个完整的家庭成员,因为.NET 1.1在function上似乎有点落后,工具支持是不存在的,而且文档是完全适用的。 这就是为什么我非常喜欢它的一部分,实际上,让我觉得我正在编程。
如果你有很多(j)脚本需要转换为.NET,这是一个明显的select,因为你通常需要很less的重写才能工作。 否则没有什么特别的理由selectJScript.NET而不是其他的.NET语言,还有很多理由不这样做。
这一切都归结为个人喜好,因为它们都以相同的CLR代码结束,而不pipe语言如何。 我发现JScript.NET容易,自然地写,并且像我尝试过的其他语言一样灵活简单,所以我使用它,直到遇到一个语言无法处理的问题。 还没有发生。
我迟到了,但我想补充一下:
我看到JScript.NET对于服务器端代码很有用。 使用服务器端的东西是非常自然的,这与服务器端使用的东西基本相同。 另外,它使得使用JSON变得更容易,所以如果你正在创build一个通过JSON进行通信的Web服务,那么它可以是一个福音。
我写了一个Web服务,在C#中工作,但是由于这些原因,我正在考虑迁移到JScript.NET。
那么,我正在尝试使用它。 我不能说我已经成功了。
我在任何环境下都没有做过很多networking编码,但是这里是我的2美分。
我想公开一些数据库表到一个网页,所以我扔了一个快速的经典ASP(是的,是啊,我知道)页面,从SQL Server中拉出的数据,并作为一个JSON对象返回表。 而不是find一个用于VBScript的JSON序列化程序我只是在J(ava)脚本中写入双方,并在服务器上导入json2.js以提供序列化。 它运作良好; 诚实地说,花了不到一个小时的时间就吐出了一张漂亮的JSON表格,其中的50分钟是让JScript直接导入json2.min.js
,而不是扔掉<% %>
包装器,重命名它json2.min.asp
。
但是大家都说现在在这个时代使用传统的ASP是病态的和错误的,所以我试图用ASP.NET + Jscript.NET + ADO.NET来取代我的快速和肮脏的ASP + Jscript + ADO实现。 经过一些轰动的键盘时刻,我有IIS4上的ASP.NET v4.0.30319,并有一个“hello,world”页面,通过<@ language = "JScript">
指令做一些简单的循环javascript。 到现在为止还挺好。
我正在按照最佳实践在这里我会包装所有在一个类等,但因为我只是试图走出车道我试图做一个快速端口我现有的代码,从其他导入各种有用的Javascript从其他使用ASP的文件include
语句。
包括一些简单的东西使用<--#incude file="somejsconstants.asp" -->
工作正常,让我从该文件访问常量。 但是我试图用<--#incude file="json2.min.asp" -->
JSON序列化程序,并且启动了适当修改为独立aspx页面的json2.js
版本,抛出同样的错误。 (编译器错误是Objects of type 'jscript_aspx' do not have such a member
。)JScript.NET似乎Objects of type 'jscript_aspx' do not have such a member
使用闭包,这是在今天的javascript库中几乎无所不在的构造。
从上面的post可以清楚地看到,在.NET平台中有很多方法来序列化JSON对象,但是我的直觉是,如果由Douglas Crockford编写的JavaScript上的JScript.NET barfs,那么这是一个古怪的,不兼容的酒糟,不值得投资时间。我不妨跟随ASP.NET群众和使用C#。
作为batch file和控制台应用程序的增强,因为它允许一个简洁的杂交(没有不必要的输出),由于它的指令。保存下面的例子与.bat
扩展名并检查其结果:
@if (@X)==(@Y) @end /* JScript comment @echo off setlocal for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d /o:-n "%SystemRoot%\Microsoft.NET\Framework\*jsc.exe"') do ( set "jsc=%%v" ) if not exist "%~n0.exe" ( "%jsc%" /nologo /out:"%~n0.exe" "%~dpsfnx0" ) %~n0.exe %* endlocal & exit /b %errorlevel% */ import System; Console.WriteLine("hello from jscript.net");
这里可以find一些例子 。
我不知道它是如何比较性能的,但我知道JScript.NET是Unity 3D可以使用的语言之一。
JScript .NET是一种现代脚本语言 ,具有广泛的应用程序。 它是一个真正的面向对象的语言,但仍然保持其“脚本”的感觉 。 JScript .NET保持与以前版本的JScript的完全后向兼容性,同时结合了很好的新特性,并提供对公共语言运行库和.NET Framework(从JScript.NET )的访问。
此外,你可能会发现这个stackoverflowpost也很有帮助: 可以使用JScript.NET脚本.NET应用程序吗?
至于谁在使用,我真的不知道(我很确定那里有)。
阅读JScript.NET简介 。
我个人的想法是,对于那些习惯于使用普通JScript编写的Web开发人员而言,想要获得.NET的好处,而不需要学习一种新的语言,或者希望将所有代码写入一种语言。
我只是假定它被微软用来夸大.NET在启动时支持的语言数量,以用于营销目的。
JScript.NET维基百科页面是相当说明性的: http : //en.wikipedia.org/wiki/JScript_.NET
总之,它似乎是与.NET库的JavaScript。
- 不断从Visual Studio中获取“从工具包中加载工具箱内容”而IT需要付出!
- 如何在.net中以编程方式设置连接stringconfiguration?
- 如何实现类似于SO的url重写
- 根据Winforms / C#中的文本和字体大小确定标签大小
- Powershell v3 Invoke-WebRequest HTTPS错误
- .NET中的glob模式匹配
- entity framework – 无法将lambdaexpression式转换为“string”types,因为它不是委托types
- 使用ASP.NET MVC与多个参数进行路由
- 编译dynamicexpression式所需的一个或多个types无法find。 您是否缺less对Microsoft.CSharp.dll和System.Core.dll的引用?