gpt4 book ai didi

namespaces - 引用和使用 JScript.NET "functions only"exe 程序集

转载 作者:行者123 更新时间:2023-12-03 18:18:04 25 4
gpt4 key购买 nike

1. 从 JSC 编译的程序集

我已经使用服务器端的 JScript 编译器 (jsc.exe) 编译了旨在成为客户端 JavaScript 的内容,以尝试制作一些可以从单元测试项目中进行测试的内容,甚至可以进行调试的内容在服务器端。

编译后的文件仅包含以下函数(仅作为示例),并且可以很好地编译为 BitField.exe。请注意,源代码中没有包装类或包。

------ 开始文件(BitField.js)-------

function BitField(){
this.values = [];
}
// more functions ...

------- 结束文件 -------
jsc /fast-  /out:BitField.exe Bitfield.js

生成 BitField.exe 程序集。

成功! 嗯,有点……

2. 测试组件/接入点?

其次,我创建了一个测试项目(在 C# 中)并在 BitField.exe 程序集中成功引用。 (项目类型无关紧要,但我提供了更多描述以描绘全貌。)

问题好像是: 我在 C# 测试项目 中找不到可以访问 BitField.exe 程序集中的 BitField 函数的命名空间或点.该程序集似乎不是“正常”。

换句话说,我需要在 C#
using ???WHAT???

注意:我不想使用 JScript“扩展”,意思是不会在客户端(在 Web 浏览器中)运行的关键字,例如, class , package等等,因为我希望代码尽可能干净,以便复制和粘贴回客户端脚本环境(不管说“干净”的代码在不使用这些扩展的情况下都可以通过 jsc.exe 编译得很好)。当我尝试将函数包装在 package 中时和 class它开始产生编译错误,所以这是不使用它们的另一个原因——因为它们似乎让我改变了我的代码。

关于如何在没有显式容器的情况下使用已编译 JScript 程序集的功能(通过将其引用到另一个程序集)的任何建议?

更新/证明

.NET 反射器 View
alt text

最佳答案

在玩了一段时间之后,并尝试了 jsc.exe 的命令行开关的各种组合,我很确定您正在尝试做的事情不会像您希望的那样工作。如果您尝试将包含函数的 js 文件编译为 .Net 库程序集,则会出现错误:

BitField.js(1,1) : error JS1234: Only type and package definitions are allowed inside a library

但是,还有希望!这就是我要做的...

我会让你的“干净”BitField.js 文件保持原样,然后创建一个批处理文件,将它包装在一个 JScript 类中,并将它写到一个“脏”的 js 文件中。如果您将其视为将代码编译到 DLL 中的一部分,那就很简单了。将 BitField.js 包装到 BitFieldClass.js 的代码如下所示:

合并到class.js
var fso = new ActiveXObject("Scripting.FileSystemObject");
var ForReading = 1;
var inputFile = fso.OpenTextFile("BitField.js",ForReading, false);
var outputFile = fso.CreateTextFile("BitFieldClass.js", true);

outputFile.write("class BitFieldClass{\n");
while (!inputFile.AtEndOfStream)
{
var textLine = inputFile.ReadLine();
outputFile.write (textLine + "\n");
}
outputFile.write("}");
outputFile.close();

然后用批处理文件来包装它并编译它真的很简单:

编译js.bat
cscript merge-into-class.js
jsc /t:library /out:BitFieldClass.dll bitFieldClass.js

当然,如果你想处理多个文件,你必须稍微参数化一些东西,但希望这足以证明这个想法。

关于namespaces - 引用和使用 JScript.NET "functions only"exe 程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3535781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com