我尝试使用ClearScript加载编译器TypeScript以编译一些基本的TypeScript代码。将TypeScript编译器加载到ClearScript中,“WScript未定义”,不可能的任务?
不幸的是,在执行打字稿编译器源代码,当我得到这个错误:
'WScript' is undefined
这是LINQPad节目我用,将ClearScript的DLL和TypeScript compiler file沿着.linq程序:
void Main()
{
using (var js = new Microsoft.ClearScript.Windows.JScriptEngine(Microsoft.ClearScript.Windows.WindowsScriptEngineFlags.DisableSourceManagement))
{
var typeScriptSource = File.ReadAllText(Path.Combine(Path.GetDirectoryName(Util.CurrentQueryPath), "tsc.js"));
js.Execute(typeScriptSource);
const string typeScriptCode = @"
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return ""Hello, "" + this.greeting;
}
}
function test()
{
var greeter = Greeter(""world"");
return greeter.greet();
}
";
js.Script.TypeScript.Compile(typeScriptCode);
object result = js.Script.test();
result.Dump();
}
}
#region Copy ClearScript to correct location
static UserQuery()
{
foreach (var filename in new[] { "ClearScriptV8-32.dll", "ClearScriptV8-64.dll", "v8-ia32.dll", "v8-x64.dll" })
{
try
{
string sourcePath = Path.Combine(Path.GetDirectoryName(Util.CurrentQueryPath), filename);
string targetPath = Path.Combine(Path.GetDirectoryName(typeof(Util).Assembly.Location), filename);
File.Copy(sourcePath, targetPath, true);
}
catch (IOException ex)
{
unchecked
{
const int fileInUseHresult = (int)0x80070020;
if (ex.HResult != fileInUseHresult)
throw;
}
}
}
}
#endregion
该错误发生在这条线:
js.Execute(typeScriptSource);
我已经创建了一个包含所有内容的.zip文件,您需要LINQPad来加载.linq文件和实验。 ClearScript的dll是从未经修改的源创建的,但如果你不相信我,你应该可以自己复制这些(如果你没有这些)。
它可在这里:Dropbox Link to SO19023498.zip。
我已经试过什么:
我第一次尝试执行此代码:
var WScript = new ActiveXObject("WSH.WScript");
这只能产生这样的错误:
Automation server can't create object
我没有看到
WSH.WScript
注册表在HKEY_CLASSES_ROOT下,这可能是它。我试着搞清楚如何从.NET创建对象并将其设置到脚本上下文中,但我显然没有在正确的位置查找。
请注意,我不知道如果调用编译打字稿代码是正确的,也许它返回结果的JavaScript代码,但程序在该步骤之前失败。 –
WScript对象不是可创建的,尽管您可以用C#类很容易地模拟它。 tsc.js脚本还需要ActiveXObject,它是一个JScript-ism,但如果你想使用V8(我假设你这样做,因为你要经历安装ClearScript的V8 DLLs),也可能被模拟出来。尽管如此,所有的工作都是有点工作的,所以我会推荐Ela的方法如下。 – BitCortex