Incorporar o motor de JavaScript into.NET [fechado]
// 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 :)
só para esclarecer - não estou a tentar programar a própria aplicação no javascript do lado do servidor. É usado apenas para escrever sub-aplicações personalizadas do usuário (pode ser visto como algum tipo de DSL). É muito mais fácil (e mais seguro) permitir o normal pessoas programando em js que c#.
22 answers
Try Javascript .NET. Ele está hospedado no GitHub foi originalmente hospedado no CodePlex, aqui)
Discussão dos projectos: http://javascriptdotnet.codeplex.com/discussions
Implementa o Google V8. Você pode compilar e executar JavaScript diretamente do Código. net com ele, e fornecer objetos CLI para ser usado pelo código JavaScript também. Ele gera código nativo de JavaScript.
O interpretador de JavaScript de código aberto ( http://jint.codeplex.com faz exactamente o que procuras.
Editar:
O projeto foi inteiramente reescrito e agora está hospedado no Github em https://github.com/sebastienros/jint
Você também pode estar interessado em Microsoft ClearScript que está hospedado no GitHub e publicado sob a licença Ms-Pl.
Eu não sou nenhum fã da Microsoft, mas devo admitir que o suporte V8 tem aproximadamente as mesmas funcionalidades que Javascript.Net, e mais importante, o projeto ainda é mantido. No que me diz respeito, o apoio aos delegados também funciona melhor do que com Spidermonkey-dotnet.
Ps: ele também suporta JScript e VBScript mas nós não estávamos interessado por estas coisas velhas.
Ps: é compatível com. net 4. 0 e 4. 5+
Editar: isto mudou-se para o github (e parece activo à primeira vista)
Eu acho que eu ainda estou confusa sobre o que é que você está tentando fazer, mas JScript.NET pode ser a pena ver, apesar de Conseguiu JScript parece que ele pode ser mais apropriado para as suas necessidades (é mais como JavaScript que JScript.NET).
Pessoalmente, eu pensei que seria legal integrar o V8 de alguma forma, mas eu não consegui passar do download do código fonte; gostaria de ter tempo para realmente fazer algo com ele.Se a língua não for um problema (qualquer 'script' com 'Sandbox'), então existe LUA for. Net. a versão do 'Silverlight' do 'framework'. net também é 'sandboxed afaik'.
Http://code.msdn.microsoft.com/windowsdesktop/JavaScript-Runtime-Hosting-d3a13880
Construí um ficheiro .dll
usando Javascript e depois compilei-o usando o compilador Javascript que está disponível numa linha de comandos de desenvolvimento VS2013.
Uma vez que temos o .dll
basta adicioná-lo à pasta \Support
e, em seguida, referenciá-lo no projeto que precisava Evalar declarações Javascript.
Passos detalhados para criar um .dll
:
-
Crie um ficheiro no bloco de notas com apenas estes conteúdo:
class EvalClass { function Evaluate(expression: String) { return eval(expression); } }
Gravar o ficheiro como
C:\MyEval.js
Abrir uma linha de comandos VS2005 (Iniciar, Programas, Ferramentas VS2005, VS2005))
Tipo
Cd\
para chegarC:\
-
Tipo
jsc /t:library C:\MyEval.js
Um novo arquivo é criado chamado
MyEval.dll
.Copy
MyEval.dll
to the project and reference it (also referenceMicrosoft.Jscript.dll
).-
Então deves poder chamar-lhe ... isto:
Dim jScriptEvaluator As New EvalClass Dim objResult As Object objResult = jScriptEvaluator.Evaluate(“1==1 && 2==2”)
ObjResult is True
.
Verifica um código de amostra:
// 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"));
Script # compila C# para js e é o Filho do cérebro de um dos ASP.Net equipa. Rick Strahl também tem alguns posts em incorporar js como motor de tempo de execução para a avaliação da expressão.
Funciona, embora eu tivesse que usar uma fábrica estática ({[[0]}) de JavaScript em vez da sintaxe var a=new A()
. (A função ExposeType só expõe estática!)
Não há muita documentação e a fonte é escrita com Delphi Prism, o que é bastante incomum para mim e o refletor RedGate.
Então: Fácil de usar e configurar, mas não ajuda muito para cenários avançados.
Também ter de instalar algo em vez disso deixar as assembleias num directório é negativo para mim...
A forma documentada da Microsoft de adicionar extensibilidade de script a qualquer coisa é IActiveScript. Você pode usar o IActiveScript de dentro da app anyt. NET, para chamar a lógica do script. A lógica pode se encaixar em objetos. NET que você colocou no contexto de scripting.
Esta resposta fornece uma aplicação que o faz, com o código:
Existe uma implementação de uma programação ActiveX máquina Em C# disponível aqui: processar e executar JS por C#
Ele permite usar Javascript (ou VBScript) diretamente de C#, em processos nativos de 32-bit ou 64-bit. A fonte completa é ~500 linhas de código C#. Ele só tem uma dependência implícita do motor DLL instalado JScript (ou VBScript).
Por exemplo, o seguinte código:
Console.WriteLine(ScriptEngine.Eval("jscript", "1+2/3"));
Irá mostrar 1.66666666666667
Existe tambémMsieJavaScriptEngine que utiliza o motor Chakra dos exploradores da Internet
Sei que estou a abrir um tópico antigo, mas já trabalhei muito no smnet (spidermonkey-dotnet). Nos últimos anos. O seu principal foco de desenvolvimento tem sido a incorporação sem descontinuidades de objetos.Net no motor spidermonkey. Ele suporta uma grande variedade de conversões de valores js para objetos.net. Alguns deles, incluindo delegados e eventos.
Só estou a dizer que talvez valha a pena verificar agora que há um desenvolvimento constante nele. Eu mantenho o acordo SVN atualizado com correcções de erros e novas funcionalidades. Os arquivos de solução de código e projeto são configurados para construir com sucesso no download. Se houver algum problema usando - o, Sinta-se livre para abrir uma discussão.Eu entendo o desejo de ter uma solução JavaScript gerenciada, mas de todos os JavaScript gerenciados que eu usei eles são todos muito carentes de algumas características chave que ajudam a torná-los robustos e fáceis de trabalhar. Eu próprio estou à espera que o IronJS amadureça um pouco. Enquanto espero, divirto-me a brincar com spidermonkey-dotnet =)
Projecto Spidermonkey-dotnet e página de recepção
Editar: criou a página wiki de documentação esta tarde.
Tente ReoScript , um interpretador de JavaScript de código aberto implementado em C#.
O ReoScript faz com que a sua aplicação possa executar o JavaScript. Ele tem uma grande variedade de metons de extensão, como Setvariável, extensão de função, usando o tipo CLR, ligação de Evento.Net e etc.
Olá Mundo:
ScriptRunningMachine srm = new ScriptRunningMachine();
srm.Run(" alert('hello world!'); ");
E aqui está um exemplo de script que cria uma winform e a mostra.
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
Acredito que todos os principais motores JS opensource (JavaScriptCore, SpiderMonkey, V8 e KJS) fornecem APIs de incorporação. O único que eu estou familiarizado diretamente com é JavaScriptCore (que é o nome do motor JS em que o SquirrelFish vive) que fornece uma API C pura. Se a memória não falha (já passou algum tempo desde que eu usei. Net). Net tem um suporte bastante bom para ligar em C API's.
Sinceramente, não sei como é a API para os outros motores, mas sei que eles ... todos os fornecem. Dito isto, dependendo dos seus propósitos JScript.NET pode ser melhor, como todos estes outros motores vai exigir que você incluí-los com o seu aplicativo, como JSC é o único que realmente navios com um SO, mas que OS é MacOS: DUtilizar JSCRIPT.NET para obter uma biblioteca (dll) do js . Em seguida, consulte este dll em sua aplicação. NET e você está apenas lá. Feito!
V8.NET é uma criança nova no bloco (a partir de abril de 2013) que envolve mais de perto a funcionalidade nativa do motor V8. Ele permite um maior controle sobre a implementação.
Você pode usar Rhino um motor JavaScript Mozilla escrito em Java, e usá - lo com IKVM, Aqui estão algumas instruções
Instructions:https://www.codeproject.com/Articles/41792/Embedding-JavaScript-into-C-with-Rhino-and-IKVM
// 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>
E Razor
não é apenas para MVC4 ou outras aplicações web e você pode usá-lo em aplicações desktop offline.