首页 > 代码库 > 在c#中运行js脚本(将js文件生成为.dll文件)

在c#中运行js脚本(将js文件生成为.dll文件)

原文链接:http://www.cnblogs.com/xhan/archive/2010/10/22/1857992.html

 

前言:

本来在搞一个Google翻译的接口--向Google翻译发送请求--返回翻译数据...

 

结果发现发送请求中的一个参数(tk)是需要验证的,验证不通过,报403错误...

 

网上搜到一个可以自己生成tk值的方法,不过是js写的...省事的想将js代码直接拿来用...

 

就看到了博客中的一个例子...

0--

function b(a, b) {    for (var d = 0; d < b.length - 2; d += 3) {        var c = b.charAt(d + 2),            c = "a" <= c ? c.charCodeAt(0) - 87 : Number(c),            c = "+" == b.charAt(d + 1) ? a >>> c : a << c;        a = "+" == b.charAt(d) ? a + c & 4294967295 : a ^ c    }    return a}function tk(a,TKK) {    for (var e = TKK.split("."), h = Number(e[0]) || 0, g = [], d = 0, f = 0; f < a.length; f++) {        var c = a.charCodeAt(f);        128 > c ? g[d++] = c : (2048 > c ? g[d++] = c >> 6 | 192 : (55296 == (c & 64512) && f + 1 < a.length && 56320 == (a.charCodeAt(f + 1) & 64512) ? (c = 65536 + ((c & 1023) << 10) + (a.charCodeAt(++f) & 1023), g[d++] = c >> 18 | 240, g[d++] = c >> 12 & 63 | 128) : g[d++] = c >> 12 | 224, g[d++] = c >> 6 & 63 | 128), g[d++] = c & 63 | 128)    }    a = h;    for (d = 0; d < g.length; d++) a += g[d], a = b(a, "+-a^+6");    a = b(a, "+-3^+b+-f");    a ^= Number(e[1]) || 0;    0 > a && (a = (a & 2147483647) + 2147483648);    a %= 1E6;    return a.toString() + "." + (a ^ h)}

打开vs命令行 运行 "jsc /t:library C:\common.js"

生成报错···JS1234:在库的内部只允许类型和包定义

更正此错误

  • 确保该代码只包含类、接口和包。

1--在最外面一层添加class..

class jsCommon{    function b(a, b) {        for (var d = 0; d < b.length - 2; d += 3) {            var c = b.charAt(d + 2),                c = "a" <= c ? c.charCodeAt(0) - 87 : Number(c),                c = "+" == b.charAt(d + 1) ? a >>> c : a << c;            a = "+" == b.charAt(d) ? a + c & 4294967295 : a ^ c        }        return a    }    function tk(a,TKK) {        for (var e = TKK.split("."), h = Number(e[0]) || 0, g = [], d = 0, f = 0; f < a.length; f++) {            var c = a.charCodeAt(f);            128 > c ? g[d++] = c : (2048 > c ? g[d++] = c >> 6 | 192 : (55296 == (c & 64512) && f + 1 < a.length && 56320 == (a.charCodeAt(f + 1) & 64512) ? (c = 65536 + ((c & 1023) << 10) + (a.charCodeAt(++f) & 1023), g[d++] = c >> 18 | 240, g[d++] = c >> 12 & 63 | 128) : g[d++] = c >> 12 | 224, g[d++] = c >> 6 & 63 | 128), g[d++] = c & 63 | 128)        }        a = h;        for (d = 0; d < g.length; d++) a += g[d], a = b(a, "+-a^+6");        a = b(a, "+-3^+b+-f");        a ^= Number(e[1]) || 0;        0 > a && (a = (a & 2147483647) + 2147483648);        a %= 1E6;        return a.toString() + "." + (a ^ h)    }}

打开vs命令行 运行 "jsc /t:library C:\common.js"

成功生成...???

3--尴尬-生成到哪里了···

最后研究下jsc的一些文档吧···找到一份说明:http://www.planabc.net/2011/06/04/use_jscript_to_create_windows_apps_and_libraries/

 

    jsc [选项] <源文件> [[选项] <源文件>…]    JScript 编译器选项    – 输出文件 –    /out:<file> 指定二进制输出文件的名称    /t[arget]:exe 创建控制台应用程序(默认)    /t[arget]:winexe 创建 Windows 应用程序    /t[arget]:library 创建库程序集    /platform:<platform> 限制此代码可以在其上运行的平台;必须是 x86、Itanium、x64 或 anycpu。默认为 anycpu    – 输入文件 –    /autoref[+|-] 基于导入的命名空间和完全限定名称自动引用程序集(默认情    况下为 on)    /lib:<path> 指定要在其中搜索引用的附加目录    /r[eference]:<file list> 从指定的程序集文件引用元数据 <file list>: <assembly name>[;<assembly name>…]    – 资源 –    /win32res:<file> 指定 Win32 资源文件(.res)    /res[ource]:<info> 嵌入指定的资源 <info>: <filename>[,<name>[,public|private]]    /linkres[ource]:<info> 将指定的资源链接到此程序集 <info>: <filename>[,<name>[,public|private]]    – 代码生成 –    /debug[+|-] 发出调试信息    /fast[+|-] 禁用语言功能以使代码更好地生成    /warnaserror[+|-] 将警告视为错误    /w[arn]:<level> 设置警告等级(0-4)    – 杂项 –    @<filename> 有关更多选项,请阅读响应文件    /? 显示帮助    /help 显示帮助    /d[efine]:<symbols> 定义条件编译符号    /nologo 不显示编译器版权标志    /print[+|-] 提供 print() 函数    – 高级 –    /codepage:<id> 使用指定的代码页 ID 打开源文件    /lcid:<id> 将指定的 LCID 用于消息和默认代码页    /nostdlib[+|-] 不导入标准库(mscorlib.dll)并将 autoref 默认值更改为 off    /utf8output[+|-] 以 UTF-8 字符编码形式发出编译器输出    /versionsafe[+|-] 为没有标记为“override”或“hide”的成员指定默认值

打开vs命令行 运行 "jsc /t:library /out:d:\common.dll C:\common.js"

生成生成!!!

 

3.在c#项目中引用common.dll 和Micosoft.JScript.dll

 

 

4.   

 

xx x = new xx();

xx....

over。。。

 

在c#中运行js脚本(将js文件生成为.dll文件)