基本的な TypeScript コードをコンパイルするために、 ClearScriptを使用してTypeScriptコンパイラをロードしようとしました。
残念ながら、TypeScript コンパイラ ソースを実行すると、次のエラーが発生します。
「WScript」は未定義です
これは私が使用したLINQPadプログラムです。ClearScript dll とTypeScript コンパイラ ファイルを .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 ファイルを作成しました。.linq ファイルを読み込んで実験するには、LINQPadが必要です。ClearScript dll は変更されていないソースから作成されていますが、私を信用しない場合は、自分でそれらを再現できるはずです (持っていない場合)。
ここから入手できます: SO19023498.zip への Dropbox リンク。
私が試したこと:
最初にこのコードを実行してみました:
var WScript = new ActiveXObject("WSH.WScript");
これにより、次のエラーのみが生成されました。
Automation server can't create object
WSH.WScript
HKEY_CLASSES_ROOT の下のレジストリに表示されなかったので、それが原因である可能性があります。.NET からオブジェクトを作成し、それをスクリプト コンテキストに設定する方法を見つけようとしましたが、適切な場所を探していないようです。