JavaScript 엔진을 .NET에 임베드 [닫기]


217

누군가 js 엔진을 .net 환경에 포함시키고 실제로 통합하려고 시도했는지 궁금합니다. Spidermonkey-dotnet 프로젝트를 찾아서 실제로 사용할 수 있습니다 ( 많은 고통과 노력을 겪은 후에도 꽤 오래되고 완성되지 않았기 때문에). 이 분야에 경험이있는 사람이 있습니까? SquirrelFish, V8과 같은 엔진

Mozilla의 Spidermonkey에 만족하지는 않지만 (핵심 ASP.NET 응용 프로그램 내부의 사용자 정의 구성 요소에 Rails와 같은 미니 프레임 워크에 사용), 여전히 옵션을 조금 더 탐색하고 싶습니다. 커맨드 라인 솔루션은 내가 필요한 것이 아니며 CLR 이외의 다른 것에 의존 할 수 없으며 JavaScript / C # 객체에서 메소드를 호출해야합니다.

// c# class
public class A
{
    public string Hello(string msg)
    {
        return msg + " whatewer";
    }
}

// js snippet
var a = new A();
console.log(a.Hello('Call me')); // i have a console.log implemented, don't worry, it's not a client-side code :)

명확히하기 위해-실제로 서버 측 자바 스크립트로 응용 프로그램 자체 를 프로그래밍하려고하지 않습니다 . 사용자 지정 사용자 하위 응용 프로그램을 작성하는 데만 사용됩니다 (일종의 DSL로 볼 수 있음). 일반 사람들이 C #보다 js로 프로그래밍하는 것이 훨씬 쉽고 안전합니다.

답변:


98

Javascript .NET을 사용해보십시오 . 그것은 GitHub의 그것에서 호스팅되는 원래는 CodePlex에서 호스팅되었습니다 여기 )

프로젝트 토론 : http://javascriptdotnet.codeplex.com/discussions

Google V8을 구현합니다. .NET 코드에서 직접 JavaScript를 컴파일하고 실행하고 JavaScript 코드에서도 사용할 CLI 객체를 제공 할 수 있습니다. JavaScript에서 기본 코드를 생성합니다.


+1. 간단하고 훌륭하게 작동하는 것 같습니다.
JC 이나시오

6
이것이 프로젝트 토론 게시판에서 죽었다는 주장이 있습니다. 기본 예제를 넘어서는 문서는 좋지 않으며 스크립트에서 JavaScript 이벤트 핸들러를 .Net 이벤트에 추가하는 데 어려움을 겪고 있습니다.
Alan Macdonald

6
Noesis (원래 개발 회사)는이 프로젝트에 대한 관심을 잃었지만 결국 지역 사회를 통제하기로 결정했습니다. 결과적으로 많은 버그 수정이 포함 된 새로운 릴리스가 있습니다. 불행히도 .Net의 JavaScript 콜백은 아직 지원되지 않습니다.
Oliver Bock

미래에 대한 또 다른 참고 사항 : Nuget 패키지가 어떻게 든 멍에 든 것 같습니다 ... 현재 패키지를 설치할 때 "작동하지 않습니다".
Chris Pfohl

3
javascriptdotnet이 죽었으므로 대신 ClearScript를 사용하십시오 (이 답변 참조 )
JB. 모니카와 함께

86

오픈 소스 JavaScript 인터프리터 Jint ( http://jint.codeplex.com )는 원하는 것을 정확하게 수행합니다.

편집 :
프로젝트가 완전히 다시 작성되었으며 이제 https://github.com/sebastienros/jint의 Github에서 호스팅됩니다


6
DLR 위에 구축 된 또 다른 가능성 : .NET 용 RemObjects 스크립트 remobjects.com/script.aspx blogs.remobjects.com/blogs/ck/2010/02/23/p1175
aprilchild

델파이 프리즘 / 산소로 작성되었으며 소스 코드로 제공되므로 위에서 언급 한 제품의 라이센스를 구입하지 않은 경우 유용하지 않습니다. 내가 잘못? 어디서나 바이너리 형식의 버전이 있다면 시도해보고 싶습니다.
Andrew Savinykh

2
RemObjects 스크립트는 Oxygene로 작성되었지만 실제로는 Oxygene 라이센스가 필요하지 않습니다. 하나는 remobjects.com/free 에서 바이너리 설치 프로그램을 얻을 수 있습니다. 다른 경우에는 무료 Oxygene 명령 줄 컴파일러를 얻을 수도 있습니다 소스에서 직접 재구성해야했습니다. .NEt 플랫폼의 가장 큰 장점 중 하나는 결국 언어 독립성입니다. 라이브러리를 작성하기 위해 사용하는 언어는 중요하지 않습니다.
marc hoffman

1
2011 년 마지막 릴리스 ... 쥬라기가 더 좋아 보입니다.
Roman Starkov

3
실제로 2014 년 마지막 릴리스 : github.com/sebastienros/jint
Sébastien Ros-MSFT

54

당신은 또한에 관심이있을 수 있습니다 GitHub에서 호스팅되고 Ms-Pl 라이센스로 게시 된 Microsoft ClearScript에 .

저는 Microsoft 팬 보이는 아니지만 V8 지원에는 Javascript.Net과 거의 동일한 기능이 있으며 더 중요한 것은 프로젝트가 계속 유지되고 있음을 인정해야합니다. 내가 아는 한, 대리자 지원은 Spidermonkey-dotnet보다 더 잘 작동합니다.

추신 : 그것은 또한 JScript와 VBScript를 지원하지만 우리는이 오래된 것들에 관심이 없었습니다.

추신 : 그것은 .NET 4.0 및 4.5 이상과 호환됩니다


3
+1 나는이 프로젝트를 전혀 몰랐다. 유망한 것은 같은 일을하려는 다른 대부분의 프로젝트처럼 죽지 않기를 희망하는 것처럼 보인다!
피터

Windows.JScript 엔진을 사용하여 ClearScript에서 다른 점을 발견 한 한 가지는 .net 객체가 대소 문자를 구분한다는 것입니다. 이전 ScriptControl 객체는 중요하지 않았습니다.
Brain2000

다음은 ClearScript와 관련된 문제입니다. 실행하면 누락 된 dll이 있다고 불평합니다. 그런 다음 추가 Visual Studio 구성 요소를 설치하라는 메시지가 표시됩니다. 코드를 실행할 관리자 권한이 없다는 점을 제외하고는 아무런 문제가 없습니다. 그것이 dll에 완전히 자체 포함되어 있다면 좋을 것입니다.
TatiOverflow

38

쥬라기를 확인하는 사람도 있습니다.

http://jurassic.codeplex.com/

편집 : 이것은 github으로 옮겨졌습니다 (그리고 언뜻보기에 활성화 된 것처럼 보입니다)

https://github.com/paulbartrum/jurassic


3
이것은 f.ex. V8 엔진을 사용하는 대신 네이티브 .NET 코드가 있고 여전히 지원되는 것으로 보이는 몇 가지 프로젝트 중 하나 인 것 같습니다 (Ecmascript.net, jscript.net 및 기타 여러 가지 죽은). +1하고 링크 주셔서 감사합니다!
atlaste

2
이 답변에 나열된 모든 단일 프로젝트를 확인한 후 쥬라기에 왔습니다. 여전히 적극적으로 유지 관리되는 2 개 또는 3 개 중 하나이며, 진정한 JS이며 높은 테스트를 거쳤으며 순수한 .NET입니다.
Roman Starkov

Jurassic에 대한 지원을 추가하겠습니다. 또한 실행 컨텍스트의 실행 상태를 직렬화하는 기능도 있습니다. 즉, JavaScript 런타임, 변수 등을 그대로 유지할 수 있습니다. 어떤 경우에는 매우 유용한 기능입니다.
Jerome Haltom

안녕하세요 와사비, 실행 컨텍스트의 실행 상태를 직렬화하는 방법에 대한 아무것도 찾을 수 없었습니다. 어떻게 달성 했습니까?
헤닝


7

관리하려는 JScript 가 귀하의 요구에 더 적합한 것처럼 보이지만 JScript.NET은 조사해 볼 가치가 있지만 JScript.NET은 조사해 볼 가치가 있습니다. .

개인적으로, 나는 어떻게 든 V8을 통합하는 것이 멋지다고 생각했지만, 소스 코드를 다운로드하는 것은 지나치지 않았다. 실제로 무언가를 할 시간이 있었으면 좋겠다.


실제로 Managed JScript는 내 요구에 가장 가까운 것입니다. 나는 그것이 Silverlight에 있다는 것을 알았고 그것이 릴리스되었음을 몰랐습니다. JScript.NET은 옵션이 아닙니다. 사용자에게 전체 .NET 스택에 대한 액세스 권한을 부여하고 싶지 않습니다. 애플리케이션에 사용할 수있는 몇 가지 핵심 내장 객체 만 있으면됩니다.
aprilchild

17
2009 년이고 Managed JScript는 이제 죽었습니다.
Alexander Abramov

5

언어에 문제가없는 경우 (샌드 박스로 스크립팅 된 언어) .NET 용 LUA가 있습니다. .NET 프레임 워크의 Silverlight 버전도 샌드 박스로 제공됩니다.


5

코드 플렉스에서 Javascript .NET을 살펴보십시오 ( http://javascriptdotnet.codeplex.com/버전 0.3.1의 ) 관심을 가질만한 새롭고 멋진 기능이 있습니다.

샘플 코드를 확인하십시오.

// Initialize the context
JavascriptContext context = new JavascriptContext();

// Setting the externals parameters of the context
context.SetParameter("console", new SystemConsole());
context.SetParameter("message", "Hello World !");
context.SetParameter("number", 1);

// Running the script
context.Run("var i; for (i = 0; i < 5; i++) console.Print(message + ' (' + i + ')'); number += i;");

// Getting a parameter
Console.WriteLine("number: " + context.GetParameter("number"));

이것은 .Net 객체에서 작동합니까? 예 : Employee 클래스가있는 경우 객체를 V8에 전달하고 JavaScript에서 Employee 객체를 조작 할 수 있습니까?
조이 조지 Kunjikkuru


5

대신 훨씬 간단한 솔루션을 생각해 냈습니다.

나는 내장 된 .dll자바 스크립트를 사용하여 파일을 다음 프롬프트 VS2013 개발자 명령에서 사용할 수있는 자바 스크립트 컴파일러를 사용하여 컴파일.

일단 우리는 폴더에 폴더 .dll를 추가하고 \Support자바 스크립트 문을 평가하는 데 필요한 프로젝트에서 참조했습니다.

자세한 단계 .dll:

  1. 다음 내용만으로 메모장에 파일을 작성하십시오.

    class EvalClass { function Evaluate(expression: String) { return eval(expression); } } 
  2. 파일을 다른 이름으로 저장 C:\MyEval.js

  3. VS2005 명령 프롬프트를 엽니 다 (시작, 프로그램, VS2005, VS2005 도구)

  4. Cd\도착하려면 입력C:\

  5. 유형

    jsc /t:library C:\MyEval.js
  6. 라는 새 파일이 생성 MyEval.dll됩니다.

  7. MyEval.dll프로젝트에 복사 하여 참조하십시오 (도 참조 Microsoft.Jscript.dll).

  8. 그러면 다음과 같이 호출 할 수 있어야합니다.

    Dim jScriptEvaluator As New EvalClass
    Dim objResult As Object
    objResult = jScriptEvaluator.Evaluate(“1==1 && 2==2”)

objResult는 True입니다.


4

방금 RemObjects Script for .Net을 시도했습니다 .

구문 var a=A.createA();대신 JavaScript에서 정적 팩토리 ( ) 를 사용해야했지만 작동 var a=new A()합니다. (ExposeType 함수는 스태틱 만 노출합니다!) 많은 문서와 소스가 Delphi Prism으로 작성 되었기 때문에 저와 RedGate 리플렉터에게는 다소 드문 일입니다.

따라서 : 사용 및 설정이 쉽지만 고급 시나리오에는 큰 도움이되지 않습니다.

또한 디렉토리에 어셈블리를 삭제하는 대신 무언가를 설치해야한다는 것은 나에게 부정적인 것입니다 ...



2

C #에서 ActiveX 스크립팅 엔진 호스트 의 구현은 다음 같습니다. C #으로 JS 구문 분석 및 실행

네이티브 32 비트 또는 64 비트 프로세스에서 C #에서 직접 Javascript (또는 VBScript)를 사용할 수 있습니다. 전체 소스는 ~ 500 줄의 C # 코드입니다. 설치된 JScript (또는 VBScript) 엔진 DLL에만 내재 된 종속성이 있습니다.

예를 들어, 다음 코드는

Console.WriteLine(ScriptEngine.Eval("jscript", "1+2/3"));

1.66666666666667을 표시합니다



1

모든 주요 오픈 소스 JS 엔진 (JavaScriptCore, SpiderMonkey, V8 및 KJS)이 내장 API를 제공한다고 생각합니다. 내가 실제로 직접적으로 익숙한 유일한 것은 순수한 C API를 제공하는 JavaScriptCore (SquirrelFish가 사는 JS 엔진의 이름)입니다. 메모리가 제공되는 경우 (내가 .NET을 사용한 지 오래되었습니다) .NET은 C API에서 링크를 상당히 잘 지원합니다.

솔직히 다른 엔진의 API가 어떤지 잘 모르겠지만 모두 제공한다는 것을 알고 있습니다.

즉, JSC는 실제로 OS와 함께 제공되는 유일한 엔진이지만 OS는 MacOS : D이므로 JSC.NET은 목적에 따라 JScript.NET이 가장 좋을 수 있습니다.


2
예, 모든 주요 엔진은 일반적으로 내장 가능하지만 장애물이 너무 많습니다. 포함 가이드를 공부하고 C (++) API를 학습했습니다. 이미 통합에 대한 작업이 있기를 바랐습니다. JScript.NET을 사용할 수 없으며 실제 코드는 인터넷 사용자가 작성하고 실행합니다.
aprilchild

1

오래된 스레드를 열고 있지만 smnet (spidermonkey-dotnet)에 대해 많은 작업을 수행했습니다. 최근 몇 년 동안. 주요 개발 초점은 .net 객체를 spidermonkey 엔진에 매끄럽게 포함시키는 것입니다. js 값에서 .net 객체로의 다양한 변환을 지원합니다. 대의원과 행사를 포함한 일부 사람들.

꾸준한 개발이 진행되고 있음을 확인하는 것이 좋습니다 :). 버그 수정 및 새로운 기능으로 SVN 저장소를 최신 상태로 유지합니다. 소스 및 프로젝트 솔루션 파일은 다운로드시 성공적으로 빌드되도록 구성됩니다. 사용에 문제가 있으면 언제든지 토론을여십시오.

관리되는 자바 스크립트 솔루션을 원한다는 것을 이해하지만 모든 관리되는 자바 스크립트 중에서 강력하고 사용하기 쉬운 주요 기능이 부족합니다. 나는 IronJS가 조금 성숙하기를 기다리고 있습니다. 기다리는 동안 spidermonkey-dotnet =)로 재미있게 놀아요.

spidermonkey-dotnet 프로젝트 및 다운로드 페이지

편집 : 오늘 오후에 문서 위키 페이지를 만들었습니다.


1

ReoScript 사용해 보기C #으로 구현 된 오픈 소스 JavaScript 인터프리터 인 .

ReoScript를 사용하면 응용 프로그램에서 JavaScript를 실행할 수 있습니다. SetVariable, Function Extension, CLR Type 사용, .Net Event Binding 등과 같은 다양한 확장 메톤이 있습니다.

안녕하세요 세계 :

ScriptRunningMachine srm = new ScriptRunningMachine();
srm.Run(" alert('hello world!'); ");

다음은 winform을 생성하고 보여주는 스크립트의 예입니다.

import System.Windows.Forms.*;        // import namespace

var f = new Form();                   // create form
f.click = function() { f.close(); };  // close when user clicked on form

f.show();                             // show 

0

JSCRIPT.NET을 사용하여 js의 라이브러리 (dll)를 가져 오십시오. 그런 다음 .NET 응용 프로그램에서이 dll을 참조하면됩니다. 끝난!



0

V8.NET 은 기본 V8 엔진 기능을보다 밀접하게 감싸는 새로운 블록입니다 (2013 년 4 월 기준). 그것은 구현에 대한 더 많은 제어를 허용합니다.


-5

그것은 지금 가능하다 ASP.Net MVC4 Razor 보기 엔진. 코드는 다음과 같습니다.

// c# class
public class A
{
    public string Hello(string msg)
    {
        return msg + " whatewer";
    }
}

// js snippet
<script type="text/javascript">
var a = new A();
console.log('@a.Hello('Call me')'); // i have a console.log implemented, don't worry, it's not a client-side code :)
</script>

RazorMVC4 또는 다른 웹 응용 프로그램 만하지 않고 오프라인 데스크톱 응용 프로그램에서 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.