6

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

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

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

  3. 是否有任何技术不需要我的代码具有不寻常的特权?例如,像CodeCompiler.FromSourcerequires之类的方法SecurityPermissionFlag.UnmanagedCode(在我看来这太过分了:我不明白为什么编译代码如此危险)。

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


编辑

我已经回答了前三个问题:我已经接受了编译需要高特权的事实。我不明白为什么;也许(尽管我认为这不是一个非常有说服力的理由)这是因为编译器是使用非托管代码实现的。当他们使用托管代码重新实现编译器时,也许这会改变,也许是在“C# 版本 5”时间范围内。无论如何,无论出于何种原因,它似乎就是这样,并且没有解决方法(其他类似的 API,但需要较少的权限)。

那么我剩下的问题是如何从一台机器到另一台机器获取一个组装实例。当我有时间时,我会找出不受信任的代码是否可以运行该Assembly.Load(byte[] rawAssembly)方法。

4

2 回答 2

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

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

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

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

于 2009-09-14T22:13:31.123 回答
1

你问了几个问题,有点,所以我会给你一个想法。有一篇非常好的文章和一些代码示例来自: http ://www.west-wind.com/presentations/dynamicCode/DynamicCode.htm ,其中讨论了在运行时编译和执行 C# 代码。我发现它非常有用,我在标准的 c# 应用程序中使用它。似乎它也可用于您的问题。

于 2009-09-16T19:50:58.083 回答