在运行时解释和/或接收dotNet代码

Chr*_*isW 6 .net javascript c# interpreter codedom

Html可以包含嵌入其中的少量Javascript(例如,在onclick事件处理程序中定义).

  1. 如果我使用像C#这样的dotNet语言编写Html浏览器,我可以使用哪些技术或API来运行这些Javascript片段,因为我直到运行时才收到它(并将其作为字符串数据接收,而不是作为可执行文件码)?

  2. 如果要运行的代码是C#片段而不是Javascript,是否更容易或更难?

  3. 是否有任何技术不需要我的代码具有不寻常的特权?例如,一个像CodeCompiler.FromSource需求的方法SecurityPermissionFlag.UnmanagedCode(这在我看来是过分的:我不明白为什么编译代码的风险很大).

  4. 如果我控制服务器端以及客户端代码,我还可以考虑在服务器上而不是在客户端上编译这样的脚本片段,然后将其作为预编译代码发送到客户端执行.有没有办法通过网络向客户端发送此类代码(大概是dotNet程序集),让客户端代码从网络接收到客户端RAM,并在客户端调用它而不将其存储为在客户端磁盘驱动器上的文件?


编辑

我已经回答了前三个问题:我已经让自己认识到编译需要高权限.我不明白为什么; 也许(虽然我认为这不是一个非常有说服力的理由),这是因为编译器是使用非托管代码实现的.也许这会在使用托管代码重新实现编译器时发生变化,可能是"C#版本5"时间帧.在任何情况下,无论什么原因,这似乎是它的方式,并没有解决方法(其他类似的API,但需要较少的权限).

我剩下的问题是如何从一台机器到另一台机器获得一个程序集实例.当我有时间时,我会发现不受信任的代码是否可以运行该Assembly.Load(byte[] rawAssembly)方法.

mfe*_*old 2

  1. 服务器端 Javascript 是 .NET 平台支持的语言之一。当您需要将小代码片段插入现有代码时,我多次使用它。运行时它可以从ie数据库加载并编译,因此没有性能损失。

  2. 从使管道工作(检索源代码、编译源代码等)的角度来看,没有什么区别。然而,对于强类型语言,将代码片段组装成可编译的编译单元要困难得多。

  3. 权限无疑是一个挑战。我不确定您提到的具体权限,但安全性是一个问题,毕竟您编译的源代码可以是任何内容,如果您不小心代码的源代码,它可能会成为您系统的后门

  4. 这个问题的答案是——当然可以。您可以从任何地方加载程序集,不一定从文件中加载,您也可以在内存中编译 - 这就是我所做的。在这种情况下,没有 dll 文件。