Próbowałem użyć ClearScript do załadowania kompilatora TypeScript, aby skompilować pewien podstawowy kod TypeScript.Ładowanie kompilatora TypeScript do ClearScript, "WScript jest niezdefiniowany", niemożliwe zadanie?
Niestety, podczas wykonywania źródło maszynopis kompilatora otrzymuję ten błąd:
'WScript' is undefined
jest to program LINQPad Użyłem, umieść ClearScript dll i TypeScript compiler file obok programu .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
błąd występuje na tej linii:
js.Execute(typeScriptSource);
Mam utworzony plik .zip ze wszystkim, potrzebujesz LINQPad do załadowania pliku .linq i eksperymentowania. Dll programu ClearScript są tworzone z niezmodyfikowanego źródła, ale jeśli nie masz do mnie zaufania, powinieneś móc je odtworzyć (jeśli ich nie masz).
Jest dostępna tutaj: Dropbox Link to SO19023498.zip.
Co próbowałem:
Próbowałem wykonaniu tego kodu pierwszy:
var WScript = new ActiveXObject("WSH.WScript");
Ten produkowany tylko ten błąd:
Automation server can't create object
nie widzę
WSH.WScript
w rejestrze pod HKEY_CLASSES_ROOT, więc to może być to.Próbowałem dowiedzieć się, jak utworzyć obiekt z .NET i ustawienie go w kontekście skryptu, ale nie jestem patrząc we właściwe miejsce.
Należy pamiętać, że nie wiem, czy wezwanie do kompilacji kodu maszynopis jest poprawna, może to zwraca wynikowy kodu javascript, ale program zawodzi przed tym krokiem. –
Obiekt WScript nie jest możliwy do utworzenia, chociaż można go łatwo emulować przy użyciu klasy C#. Skrypt tsc.js wymaga również obiektu ActiveXObject, który jest JScript-ism, ale można go również wyłudzić, jeśli chcesz użyć V8 (co, jak zakładam, robisz, ponieważ przechodzisz przez bóle, aby zainstalować biblioteki DLL V8 ClearScript). Wszystko to jednak wymagałoby trochę pracy, więc polecam podejście Ela poniżej. – BitCortex