Ссылка и использование JScript.NET "только функции" сборка exe - PullRequest
6 голосов
/ 21 августа 2010

1. Скомпилированная сборка от ОАО

Я скомпилировал то, что предназначено для клиентского JavaScript, используя JScript-компилятор (jsc.exe) на стороне сервера, пытаясь создать что-то, что можно протестировать из проекта модульного тестирования, и, возможно, даже то, что может быть отлажен на стороне сервера.

Скомпилированный файл содержит только функции следующим образом (только для примера) и прекрасно компилируется в BitField.exe. Обратите внимание, что в исходном коде нет класса-оболочки или пакета.

------ НАЧАТЬ ФАЙЛ (BitField.js) -------

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

------- КОНЕЦ ФАЙЛА -------

jsc /fast-  /out:BitField.exe Bitfield.js

Результат в сборке BitField.exe.

Удачи! Ну вроде ...


2. Узел тестирования / точка доступа?

Во-вторых, я создал тестовый проект (в C #) и на него ссылаются в сборке BitField.exe. (Тип проекта не имеет значения, но я предоставляю больше описания, чтобы нарисовать полную картину.)

Кажется, проблема в следующем: Я не могу найти пространство имен или точку, в которой я могу получить доступ к функциям BitField внутри сборки BitField.exe из моего проекта C # test . Сборка не кажется "нормальной".

Другими словами мне нужно в C #

using ???WHAT???

Примечание : я не хочу использовать «расширения» JScript, то есть ключевые слова, которые не будут выполняться на стороне клиента (в веб-браузере), например, class, package и т.д., потому что я хочу, чтобы код был максимально чистым для копирования и вставки обратно в среду сценариев на стороне клиента (независимо от того, что «чистый» код прекрасно компилируется с помощью jsc.exe без использования этих расширений). Когда я пытаюсь обернуть функции в package и class, он начинает выдавать ошибки компиляции, так что это еще одна причина не использовать их - потому что они, похоже, заставляют меня изменить мой код.

Есть предложения, как использовать функции скомпилированной сборки JScript (путем ссылки на нее в другой сборке), если в ней нет явных контейнеров?


Обновление / Доказательство

.NET Reflector view
alt text

1 Ответ

2 голосов
/ 01 октября 2010

Поработав с ним некоторое время и попробовав различные комбинации переключателей командной строки для 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 будет выглядеть следующим образом:

merge-in-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();

Затем пакетный файл дляобернуть его и скомпилировать - это действительно просто:

compile-js.bat

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

Конечно, если вы хотите создать несколько файлов, у вас будетнемного параметризировать вещи, но, надеюсь, этого достаточно, чтобы продемонстрировать идею.

...