2011-08-14 25 views
6

我想使用Jint加载JavaScript文件,但我似乎无法弄清楚。该文件说我可以做一些像engine.run(file1),但它似乎并没有加载任何文件。我需要用文件名做一些特别的事吗?如何在C#中使用Jint加载JavaScript文件?

这是我的JavaScript文件:

// test.js 
status = "test"; 

这里是我的C#

JintEngine js = new JintEngine(); 
js.Run("test.js"); 
object result = js.Run("return status;"); 
Console.WriteLine(result); 
Console.ReadKey(); 

如果我把代码手动Run它的工作原理。

object result = js.Run("return 2 * 21;"); // prints 42 

回答

3

我找到了一个解决方法通过将文件手动加载到文本自己,而不是这里提到的名字加载它:http://jint.codeplex.com/discussions/265939

 StreamReader streamReader = new StreamReader("test.js"); 
     string script = streamReader.ReadToEnd(); 
     streamReader.Close(); 

     JintEngine js = new JintEngine(); 

     js.Run(script); 
     object result = js.Run("return status;"); 
     Console.WriteLine(result); 
     Console.ReadKey(); 
0

尝试

using(FileStream fs = new FileStream("test.js", FileMode.Open)) 
{ 
    JintEngine js = JintEngine.Load(fs); 
    object result = js.Run("return status;"); 
    Console.WriteLine(result); 
} 
+0

System.Runtime.Serialization.SerializationException了未处理 消息=输入流不是一个有效的二进制格式。起始内容(以字节为单位)为:73-74-61-74-75-73-20-3D-20-22-74-65-73-74-22-3B-0D ... Source = mscorlib StackTrace: at System.Runtime.Serialization.Formatters.Binary.SerializationHeaderRecord.Read(__ BinaryParser input) at System.Runtime.Serialization.Formatters.Binary .__ BinaryParser.ReadSerializationHeaderRecord() –

+0

@Daniel,我不确定,但点是'Run()'期望一个脚本执行而不是文件名;尝试将文件的内容手动读入一个字符串('File.ReadAllText()'),然后尝试用该字符串调用'Run()'。 –

2

我个人使用:

js.Run(new StreamReader("test.js")); 

紧凑,只是工作。

0

甚至更​​简洁地(使用您的代码)

JintEngine js = new JintEngine(); 
string jstr = System.IO.File.ReadAllText(test.js); 
js.Run(jstr); 
object result = js.Run("return status;"); 
Console.WriteLine(result); 
Console.ReadKey(); 
相关问题