.NET में एंबेडिंग जावास्क्रिप्ट इंजन [बंद]


217

अगर किसी ने कभी भी एम्बेड करने की कोशिश की है और वास्तव में .net वातावरण में किसी भी js इंजन को एकीकृत करने की कोशिश कर रहा है। मैं पा सकता हूं और वास्तव में उपयोग कर सकता हूं ( बहुत सारे दर्द और प्रयास के बाद, क्योंकि यह बहुत पुराना है और काफी समाप्त नहीं हुआ है) स्पिडर्मोनिक्स-डॉटनेट परियोजना। इस क्षेत्र में अनुभव के साथ कोई भी? इंजन जैसे कि गिलहरी, V8 ।।

ऐसा नहीं है कि मैं मोज़िला स्पिडरमोनकी (मुख्य ASP.NET अनुप्रयोग के अंदर कस्टम घटकों के लिए रेल-जैसे मिनीफ़्रामवर्क का उपयोग करके) से संतुष्ट नहीं हूं, लेकिन मैं विकल्पों के साथ थोड़ा और खोज करना पसंद करूंगा। कमांड-लाइन समाधान वे नहीं हैं जिनकी मुझे आवश्यकता होगी, मैं सीएलआर के अलावा किसी और चीज पर भरोसा नहीं कर सकता, मुझे / से जावास्क्रिप्ट / सी # ऑब्जेक्ट्स के तरीकों को कॉल करने की आवश्यकता है।

// 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

जावास्क्रिप्ट .NET का प्रयास करें । यह GitHub पर होस्ट किया गया है यह मूल रूप से CodePlex पर होस्ट किया गया था, यहां )

प्रोजेक्ट चर्चा: http://javascriptdotnet.codeplex.com/discussions

यह Google V8 को लागू करता है। आप इसके साथ .NET कोड से सीधे जावास्क्रिप्ट को संकलित और चला सकते हैं, और CLI ऑब्जेक्ट्स को जावास्क्रिप्ट कोड द्वारा भी उपयोग किया जा सकता है। यह जावास्क्रिप्ट से देशी कोड उत्पन्न करता है।


+1। यह सरल है, और महान काम करने लगता है।
JC Inacio

6
ऐसे दावे हैं कि यह परियोजना के चर्चा बोर्डों में मृत है, एक मूल उदाहरण से परे प्रलेखन खराब है और मैं स्क्रिप्ट में जावास्क्रिप्ट इवेंट हैंडलर को एक .Net घटना में जोड़ने के लिए संघर्ष कर रहा हूं।
एलन मैकडोनाल्ड

6
नोइसिस ​​(मूल विकासशील कंपनी) ने परियोजना में रुचि खो दी, लेकिन अंततः समुदाय को नियंत्रण देने का फैसला किया। नतीजतन अब एक नई रिलीज हुई है जिसमें कई बग फिक्स शामिल हैं। दुर्भाग्य से .net से जावास्क्रिप्ट कॉलबैक अभी तक समर्थित नहीं हैं।
ओलिवर बॉक

भविष्य के लिए एक और नोट: ऐसा प्रतीत होता है कि नुगेट पैकेज किसी भी तरह से बोर्क किया गया है ... जब आप पैकेज को स्थापित करते हैं तो यह "बस काम" नहीं करता है।
क्रिस Pfohl

3
चूंकि javascriptdotnet मर चुका है, इसके बजाय ClearScript का उपयोग करने पर विचार करें (यह उत्तर देखें )
JB। मोनिका के साथ।

86

ओपन सोर्स जावास्क्रिप्ट दुभाषिया जिंट ( http://jint.codeplex.com ) वही करता है जो आप खोज रहे हैं।

संपादित करें:
परियोजना पूरी तरह से फिर से लिखी गई है और अब इसे Github पर https://github.com/sebastienros/jint पर होस्ट किया गया है


6
DLR के शीर्ष पर निर्मित एक और संभावना: रेमोब्जेक्ट्स स्क्रिप्ट। NET के लिए remobjects.com/script.aspx blogs.remobjects.com/blogs/ck/2010/02/23/p1175
aprilchild

मुझे लगता है कि यह डेल्फी प्रिज्म / ऑक्सीजन पर लिखा गया है, और स्रोत कोड के रूप में प्रदान किया गया है, अगर आपने उपरोक्त उत्पादों के लिए लाइसेंस नहीं खरीदा है तो यह उतना उपयोगी नहीं है। क्या मै गलत हु? अगर बाइनरी फॉर्म में कहीं भी एक संस्करण है, तो मैं इसे आज़माना चाहूंगा।
एंड्रयू साविनिख

2
RemObjects की स्क्रिप्ट Oxygene में लिखी गई है, सही है, लेकिन इसका उपयोग करने के लिए आपको वास्तव में Oxygene लाइसेंस की आवश्यकता नहीं है - एक के लिए, आप remobjects.com/free से बाइनरी इंस्टॉलर प्राप्त कर सकते हैं , दूसरे के लिए आप मुफ्त Oxygene कमांड लाइन कंपाइलर भी प्राप्त कर सकते हैं यदि आपको इसे स्रोत से, स्वयं पुनर्निर्माण करने की आवश्यकता थी। .NEt मंच के महान लाभों में से एक भाषा स्वतंत्रता है, सब के बाद। इससे कोई फर्क नहीं पड़ता कि एक पुस्तकालय किस भाषा में लिखा गया है, इसका उपयोग करने के लिए।
हॉफमैन

1
2011 में अंतिम रिलीज ... जुरासिक बेहतर लगती है।
रोमन स्टार्कोव

3
2014 में अंतिम रिलीज़ वास्तव में: github.com/sebastienros/jint
Sébastien Ros - MSFT

54

आपको Microsoft ClearScript में भी रुचि हो सकती है जो GitHub पर होस्ट किया गया है और Ms-Pl लाइसेंस के तहत प्रकाशित किया गया है।

मैं कोई Microsoft फैनबॉय नहीं हूं, लेकिन मुझे यह स्वीकार करना चाहिए कि V8 सपोर्ट में Javascript.Net जैसी ही फ़ंक्शन के बारे में है, और अधिक महत्वपूर्ण है, परियोजना अभी भी बनी हुई है। जहां तक ​​मेरा सवाल है, प्रतिनिधियों का समर्थन भी स्पाइडरमैन-डॉटनेट की तुलना में बेहतर है।

ps: यह JScript और VBScript का भी समर्थन करता है, लेकिन हम इस पुराने सामान से दिलचस्पी नहीं रखते थे।

ps: यह .NET 4.0 और 4.5+ के साथ संगत है


3
+1 मैं इस परियोजना से पूरी तरह से अनभिज्ञ था, ऐसा लगता है कि यह आशा करता है कि यह एक ही काम करने की कोशिश कर रहे अधिकांश अन्य परियोजनाओं की तरह मर न जाए!
पीटर

Windows.JScript इंजन का उपयोग करके मैंने ClearScript में एक चीज को अलग पाया है। नेट ऑब्जेक्ट्स अब केस संवेदनशील हैं, जहां पुराने ScriptControl ऑब्जेक्ट में कोई फर्क नहीं पड़ता था।
ब्रेन २२

यहाँ ClearScript के साथ मेरी समस्या है। जब इसे चलाया जाता है तो शिकायत होती है कि लापता dll हैं। फिर मुझे अतिरिक्त दृश्य स्टूडियो घटकों को स्थापित करने के लिए कहा जाता है। कोई समस्या नहीं है सिवाय इसके कि मेरे पास कोई विशेषाधिकार नहीं होगा जहां मैं कोड चलाऊंगा। यह अच्छा होगा यदि यह पूरी तरह से एक dll में निहित था।
TatiOverflow

38

किसी ने भी जुरासिक को चेक आउट करने की कोशिश की:

http://jurassic.codeplex.com/

संपादित करें: यह जीथब पर चला गया है (और पहली नज़र में सक्रिय लगता है)

https://github.com/paulbartrum/jurassic


3
ऐसा लगता है कि यह उन कुछ परियोजनाओं में से एक है, जिनमें दोनों मूल नेट कोड हैं (बजाय f.ex. V8 इंजन का उपयोग करने के लिए) और अभी भी समर्थित प्रतीत होता है (Ecmascript.net, jscript.net और दूसरों का एक समूह लगता है) मृत)। लिंक के लिए +1 और धन्यवाद!
atlaste

2
इन उत्तरों में सूचीबद्ध हर एक परियोजना की जाँच करने के बाद, मैंने जुरासिक पर काम किया है। यह केवल दो या तीन में से एक है जो अभी भी सक्रिय रूप से बनाए रखा गया है, यह सच है जेएस, उच्च परीक्षण किया गया, और शुद्ध .NET है।
रोमन स्टार्कोव

जुरासिक के लिए मेरा समर्थन जोड़ देगा। यह निष्पादन के संदर्भ की रन स्थिति को क्रमबद्ध करने की क्षमता भी रखता है। इसका मतलब है कि आप सचमुच अपने जावास्क्रिप्ट रनटाइम, चर और सभी को बनाए रख सकते हैं। कुछ मामलों के लिए अत्यंत उपयोगी सुविधा।
जेरोम हाल्टोम

हाय वसाबी, मुझे कुछ भी पता नहीं था कि निष्पादन की स्थिति के रन स्टेट को कैसे क्रमबद्ध किया जाए। आपने वह कैसे हासिल किया?
हेनिंग

8

आप ironJS की कोशिश कर सकते हैं, आशाजनक लगता है, हालांकि यह भारी विकास में है। https://github.com/fholm/IronJS


हम वर्तमान में IronJS का उपयोग करते हैं, लेकिन यह इन दिनों एक मृत परियोजना है और कंपाइलर F # में लिखा गया है, जिसे मैं इधर-उधर कर सकता हूं, लेकिन इसके साथ प्रवीण नहीं हूं।
रुसबिशप

7

मुझे लगता है कि मैं अभी भी इस बारे में स्पष्ट नहीं हूं कि यह आप क्या करने की कोशिश कर रहे हैं, लेकिन JScript.NET देखने लायक हो सकता है, हालांकि प्रबंधित JScript ऐसा लगता है कि यह आपकी आवश्यकताओं के लिए अधिक उपयुक्त हो सकता है (यह JScript.NET की तुलना में जावास्क्रिप्ट की तरह अधिक है) ।

व्यक्तिगत रूप से, मुझे लगा कि किसी तरह V8 को एकीकृत करना अच्छा होगा, लेकिन मुझे स्रोत कोड डाउनलोड करने में कोई दिक्कत नहीं हुई; काश मेरे पास वास्तव में इसके साथ कुछ करने का समय होता।


वास्तव में प्रबंधित JScript मेरी जरूरतों के लिए सबसे करीबी चीज़ है। मुझे पता था कि यह सिल्वरलाइट में था, यह नहीं पता था कि यह जारी किया गया था। JScript.NET एक विकल्प नहीं है। मैं वास्तव में उपयोगकर्ताओं को पूरे .NET स्टैक तक पहुँच नहीं देना चाहता। मुझे बस कुछ अंतर्निहित वस्तुओं की आवश्यकता है जो वे अपने अनुप्रयोगों के लिए उपयोग कर सकते हैं।
अप्रैल

17
यह 2009 है और प्रबंधित JScript अब मर चुका है।
अलेक्जेंडर अब्रामोव

5

यदि भाषा कोई समस्या नहीं है (किसी भी सैंडबॉक्स की गई स्क्रिप्ट) तो .NET के लिए LUA है । .NET फ्रेमवर्क का सिल्वरलाइट संस्करण भी सैंडबॉक्ड अफिक है।


5

अरे , संस्करण 0.3.1 के साथ कोडप्लेक्स ( http://javascriptdotnet.codeplex.com/ ) पर जावास्क्रिप्ट .NET के लिए एक नज़र डालें। कुछ बहुत प्यारी नई विशेषताएं हैं जो आपको निश्चित रूप से रुचि देंगी।

एक नमूना कोड देखें:

// 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 वस्तुओं के लिए यह काम करता है। उदाहरण: यदि मेरे पास एक कर्मचारी वर्ग है, तो क्या मैं वी 8 को ऑब्जेक्ट पास कर सकता हूं और जावास्क्रिप्ट से कर्मचारी ऑब्जेक्ट को हेरफेर कर सकता हूं?
जॉय जॉर्ज कुंजिक्कुरु


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

मैंने अभी .Net के लिए RemObjects स्क्रिप्ट की कोशिश की ।

यह काम करता है, हालांकि मुझे सिंटैक्स के var a=A.createA();बजाय जावास्क्रिप्ट से एक स्थिर कारखाने ( ) का उपयोग करना था var a=new A()। (ExposeType फ़ंक्शन केवल स्टेटिक्स को उजागर करता है!) बहुत अधिक प्रलेखन नहीं है और स्रोत डेल्फी प्रिज्म के साथ लिखा गया है, जो मेरे और रेडगेट रिफ्लेक्टर के लिए असामान्य है।

तो: उपयोग में आसान और सेटअप, लेकिन उन्नत परिदृश्यों के लिए ज्यादा मदद नहीं।

इसके अलावा सिर्फ एक निर्देशिका में विधानसभाओं को छोड़ने के बजाय कुछ स्थापित करना मेरे लिए नकारात्मक है ...


2

Microsoft का कुछ भी करने के लिए स्क्रिप्ट एक्स्टेंसिबिलिटी को जोड़ने का दस्तावेजी तरीका IActiveScript है। आप स्क्रिप्ट तर्क को कॉल करने के लिए anyt .NET ऐप के भीतर से IActiveScript का उपयोग कर सकते हैं। तर्क .NET ऑब्जेक्ट्स पर पार्टी कर सकता है जिसे आपने स्क्रिप्टिंग संदर्भ में रखा है।

यह उत्तर एक एप्लिकेशन प्रदान करता है जो इसे करता है, कोड के साथ:


2

C # में यहां एक ActiveX स्क्रिप्टिंग इंजन होस्ट का कार्यान्वयन उपलब्ध है: पार्स और निष्पादित जेएस द्वारा C #

यह देशी 32-बिट या 64-बिट प्रक्रियाओं में सीधे सी # से जावास्क्रिप्ट (या वीबीएसस्क्रिप्ट) का उपयोग करने की अनुमति देता है। पूर्ण स्रोत सी # कोड की ~ 500 लाइनें है। इसमें केवल स्थापित JScript (या VBScript) इंजन DLL पर एक अंतर्निहित निर्भरता है।

उदाहरण के लिए, निम्न कोड:

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

1.66666666666667 प्रदर्शित करेगा



1

मेरा मानना ​​है कि सभी प्रमुख ओपनसोर्स जेएस इंजन (जावास्क्रिप्टकोर, स्पाइडरमोंकी, वी 8, और केजेएस) एम्बेडिंग एपीआई प्रदान करते हैं। केवल एक जो मैं वास्तव में सीधे परिचित हूं, वह जावास्क्रिप्टकोर (जो कि JS इंजन स्क्विरेलफिश रहता है) का नाम है जो शुद्ध सी एपीआई प्रदान करता है। यदि मेमोरी कार्य करती है (यह कुछ समय रहा है क्योंकि मैंने .NET का उपयोग किया है)। सी एपीआई में लिंक करने के लिए .NET का अच्छा समर्थन है।

मुझे ईमानदारी से यकीन नहीं है कि अन्य इंजनों के लिए एपीआई क्या है, लेकिन मुझे पता है कि वे सभी उन्हें प्रदान करते हैं।

कहा कि, आपके उद्देश्यों के आधार पर JScript.NET सबसे अच्छा हो सकता है, क्योंकि इन सभी अन्य इंजनों के लिए आपको उन्हें अपने ऐप के साथ शामिल करने की आवश्यकता होगी, क्योंकि JSC केवल एक है जो वास्तव में एक OS के साथ जहाज करता है, लेकिन वह OS MacOS है: D


2
हां, सभी प्रमुख इंजन आमतौर पर एम्बेड करने योग्य होते हैं, लेकिन बस कई बाधाएं हैं। एम्बेडिंग गाइड का अध्ययन, सी (++) एपीआई सीखना .. मुझे उम्मीद थी कि पहले से ही एकीकरण पर कुछ काम होगा। JScript.NET का उपयोग नहीं किया जा सकता है, वास्तविक कोड इंटरनेट उपयोगकर्ताओं द्वारा लिखा और निष्पादित किया जाता है।
अप्रैल

1

मुझे पता है कि मैं एक पुराना धागा खोल रहा हूं, लेकिन मैंने smnet (spidermonkey-dotnet) पर बहुत काम किया है। हाल के सालों में। यह मुख्य विकास फ़ोकस है। Spidermonkey इंजन में .net ऑब्जेक्ट्स की सहज एम्बेडिंग। यह js मानों से .net ऑब्जेक्ट्स के लिए विविध प्रकार के रूपांतरणों का समर्थन करता है। प्रतिनिधियों और घटनाओं सहित उनमें से कुछ।

केवल यह कहना कि अब इस पर जाँच हो सकती है कि इस पर कुछ स्थिर विकास है :)। मैं बग फिक्स और नए फीचर्स के साथ SVN रेपो को अपडेट रखता हूं। स्रोत और प्रोजेक्ट समाधान फ़ाइलों को सफलतापूर्वक डाउनलोड करने के लिए कॉन्फ़िगर किया गया है। यदि इसका उपयोग करने में कोई समस्या है, तो चर्चा खोलने के लिए स्वतंत्र महसूस करें।

मैं एक प्रबंधित जावास्क्रिप्ट समाधान की इच्छा को समझता हूं, लेकिन सभी प्रबंधित जावास्क्रिप्ट का मैंने उपयोग किया है, वे सभी कुछ प्रमुख विशेषताओं की कमी है जो उन्हें मजबूत और काम करने में आसान बनाने में मदद करते हैं। मैं खुद आयरनजेएस पर थोड़ा परिपक्व होने की प्रतीक्षा कर रहा हूं। जब मैं प्रतीक्षा करता हूं, तो मुझे स्पाइडरमैन-डॉटनेट के साथ खेलने में मज़ा आता है))

spidermonkey-dotnet प्रोजेक्ट और डाउनलोड पेज

संपादित करें: आज दोपहर को बनाया गया विकि पृष्ठ।


1

ReoScript आज़माएं , C # में लागू एक ओपन-सोर्स जावास्क्रिप्ट दुभाषिया।

ReoScript आपके एप्लिकेशन को JavaScript निष्पादित कर सकता है। इसमें एक्सटेंशन मेथन्स की एक विस्तृत विविधता है जैसे कि SetVariable, फ़ंक्शन एक्सटेंशन, CLR प्रकार का उपयोग करके, .net इवेंट बाइंडिंग और आदि।

नमस्ते दुनिया:

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

और यहां स्क्रिप्ट का एक उदाहरण है जो एक जीत बनाता है और इसे दिखाता है।

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

Js की लाइब्रेरी (dll) प्राप्त करने के लिए JSCRIPT.NET का उपयोग करें। फिर इस dll को अपने .NET एप्लिकेशन में देखें और आप वहीं हैं। किया हुआ!


0

आप राइनो को जावा पर लिखे मोज़िला जावास्क्रिप्ट इंजन का उपयोग कर सकते हैं, और इसे IKVM के साथ उपयोग कर सकते हैं, यहाँ कुछ निर्देश दिए गए हैं

निर्देश: https://www.codeproject.com/Articles/41792/Embedding-JavaScript-into-C-with-Rhino-and-IKVM


0

V8.NET ब्लॉक पर एक नया बच्चा है (अप्रैल 2013 तक) जो देशी V8 इंजन की कार्यक्षमता को अधिक बारीकी से लपेटता है। यह कार्यान्वयन पर अधिक नियंत्रण के लिए अनुमति देता है।


-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>

और Razorकेवल MVC4 या किसी अन्य वेब एप्लिकेशन के लिए नहीं है और आप इसे ऑफ़लाइन डेस्कटॉप अनुप्रयोगों में उपयोग कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.