【问题标题】:Execute Live Code in C#.net在 C#.net 中执行实时代码
【发布时间】:2011-12-13 07:31:49
【问题描述】:

是否可以有一个外部文件来存储一些原始代码(不是 C#,可能是像 Javascript 或 VB 脚本这样的简单代码),其中包含许多函数,参数包含来自父应用程序的数据并捕获返回的数据回到 C# 应用程序。如果可以,怎么做?

【问题讨论】:

  • 你想在 C# 中运行 javascript 吗?
  • 如果你想用 C# 编写脚本,你见过 LinqPad 吗?
  • @cgoddard 如果星星对齐,并且做出了适当的牺牲,那么是的,可以做到。
  • 是的,这是可能的。实现这一目标的最佳方式取决于您的真正目标。如果你能描述你为什么要这样做,你就更有可能得到有用的答案。
  • @cgoddard 更严肃地说,在开始如此艰巨的工作之前,这些问题确实值得思考一下为什么需要这样做。

标签: c# javascript vbscript


【解决方案1】:

如果您想使用非 CLR 语言,最简单的方法可能是使用 System.Diagnostics.Process 对您选择的可执行文件/解释器进行外壳处理并从中解析 stdout。当然,您也可以通过更复杂的机制进行通信,例如命名管道、TCP/IP、HTTP 等,但这需要双方都编写代码。

有一些按需 c# '解释器'(http://www.csscript.net/http://www.codeproject.com/KB/dotnet/nscript.aspx)但我不推荐它们。主要是因为无法知道未来的 .NET 版本会获得什么样的支持。

【讨论】:

  • 对于未来的版本,请使用 Roslyn。
【解决方案2】:

如果您希望创建一个永不停机的系统。我会建议您的想法的一些替代方案。

最后,我认为你的想法不会成功。除非我遗漏了什么,否则在向原始 javascript 文件添加新功能时,您仍然需要更新 C# 代码以处理与该特定代码部分之间的通信。也许您可以使用大量 xml 来缓解这种情况。但是,一旦您开始考虑这些术语,您就会面临大量 IO、数据封送和维护噩梦。

简而言之,我认为这不是一个可行的选择。

一些替代方案:

多台服务器:如果您维护 2 或 3 台相同的服务器,那么您可以简单地关闭其中一台,将所有用户重定向到您的备份,同时更新您的主服务器。完成后,将它们重定向回主服务器,然后更新备份。

实时修补:同样,我对这些方法知之甚少,但有一些算法和方法可以实时修补 dll,而无需重新启动。对这个主题进行一些研究,因为它可能是最可行的选择(大多数时候,人们和公司不会在没有充分理由支付成本的情况下购买更多硬件)。

【讨论】:

    【解决方案3】:

    我已经编写了许多这样的可编写脚本的应用程序。我会推荐 IronPython (http://ironpython.codeplex.com/) 作为初学者,以及How to use Microsoft.Scripting.Hosting? 的说明。有多种语言可供选择... IronPython 最适合我的需求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-24
      • 2019-10-21
      • 2023-03-13
      • 2017-12-01
      • 2021-08-10
      • 1970-01-01
      • 2011-08-02
      • 2022-01-03
      相关资源
      最近更新 更多