【问题标题】:Does it make sense to integrate scripting languages to C# apps?将脚本语言集成到 C# 应用程序是否有意义?
【发布时间】:2010-10-19 04:38:12
【问题描述】:

我一直在考虑将 Ruby 集成到我的应用程序中,但我工作中的一些朋友告诉我,C# 已经非常高级了。但对我来说,做非常快的事情似乎有更多的包袱。

你们觉得呢?

如果我确实集成,那么限制它是否有意义,以便您可以使用应用程序的现有功能做任何事情,但不能扩展它?

原因是,脚本语言不以性能着称,如果您说让人们编写模糊、对比度等过滤器,那么这些会比应有的速度慢得多,并且会降低客户的体验是编剧吧?

【问题讨论】:

  • 很多时候我希望我也能做到这一点。不过不确定是否实用。

标签: c# .net scripting


【解决方案1】:

我已将 (lua) 脚本集成到应用程序中,并且我还将 c# 本身用作“脚本语言”,通过从用户提供的代码动态编译动态程序集。我还使用符合特定接口或基类的用户提供的程序集实现了“插件”系统。

有很多事情需要考虑,从安全性到性能,再到最终用户的困惑。我不认为您可以做出诸如“脚本语言不属于应用程序”之类的笼统声明,甚至“脚本语言属于应用程序”。任何给定的特定情况都需要仔细考虑所有选项以及这些选项的后果,然后再做一些您以后可能会后悔的事情。

【讨论】:

    【解决方案2】:

    当通过脚本接口而不是通过您的应用本机实现给定功能时,可能会对性能造成影响,但如果您希望允许用户为您的应用编写脚本并允许他们实现有用的功能对于您的应用程序本身不支持的他们来说,这对我来说似乎是个好主意。如果你最终得到了一个非常流行的特定用户脚本,如果你可以改进它的性能,你总是可以在以后的版本中将它作为你的应用程序的原生功能发布。希望这会有所帮助!

    【讨论】:

    • 谢谢。我主要关心的是提供更快执行操作的能力,例如选择所有模糊节点、遍历它们、收集名称、用锐化替换它们、更改它们的值等。我还使用了一个限制脚本的应用程序,这样你就可以'不写新节点,所以这就是我想知道的原因。
    • +1 - 如果用应用程序的母语编写,从脚本到核心功能的转换会容易得多。如果这是一个预期的功能,那么插件架构似乎是理想的。
    【解决方案3】:

    我喜欢能够编写脚本来扩展应用程序的功能。如果脚本语言是众所周知的,那就更好了。

    我不会基于对性能的担忧来限制脚本可以执行的功能。例如,您不知道某些东西在未来的硬件上会如何表现;但是,您应该限制它可以为安全/功能做的事情。

    如果您有性能问题,那么我会通过脚本实现扩展点,也可以通过允许执行和运行编译代码的插件来实现。

    编辑

    一般来说,我认为它不会再引入漏洞,然后通过插件扩展应用程序。至于具体的漏洞,我真的不能不知道你的应用程序是什么。但以网络浏览器为例。 IE 有很多安全漏洞,因为脚本可以访问比它们应该访问的更多的资源。

    强制通过编译代码完成扩展确实允许您利用机制来帮助防止攻击。例如,您可以检查一个程序集(假设 .net 在这里)。轻松查找恶意代码(是的,您也可以使用脚本来执行此操作),或者您可以阻止对某些资源的访问 cia Code Access Security。您还可以利用代码签名,并且只加载来自受信任的发布者的插件。

    【讨论】:

    • 谢谢 Josh,您能告诉我使用脚本语言的潜在安全问题吗?
    【解决方案4】:

    根据您要完成的工作,您可能会喜欢 PowerShell 所提供的功能。您可以使您的应用程序成为自定义 PowerShell 脚本主机,或者只提供操作应用程序的 cmdlet。

    在任何一种情况下,您的用户都可以从具有内置 .NET/COM/WMI 支持的丰富、强大、合理的脚本语言中受益,但他们不必是开发人员即可使用它。

    您还建立了用户可能已经具备的技能。如果他们还没有,他们可以为您的应用程序学习它,然后在将来从中受益。

    Exchange Server 2007 实现了一个自定义脚本主机,如果您想查看一个如何工作的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-22
      • 2010-11-12
      • 2010-10-10
      • 2013-04-13
      • 2011-04-06
      • 1970-01-01
      • 2010-10-08
      • 2010-12-03
      相关资源
      最近更新 更多