【问题标题】:C# instead of IronRuby as an embedded "scripting" language in .NET 3.5C# 代替 IronRuby 作为 .NET 3.5 中的嵌入式“脚本”语言
【发布时间】:2011-01-09 05:11:03
【问题描述】:

将 C# 用作 .NET 3.5 应用程序的嵌入式内部脚本应用程序的最佳实践是什么?我有一个应用程序,里面有一些小的 IronRuby 脚本。这些都没有真正利用 IronRuby 的动态特性。

现在使用 IronRuby 或 IronPython 显然违反了我们的公司标准。哎呀。我可以使用 C# 作为脚本语言的最佳方式是什么?

我喜欢 IronRuby 的一件事是我可以在应用程序运行时进行一些小的更改,然后重新运行脚本。有什么办法可以在 C# 中做到这一点?还是必须不断重启应用?

【问题讨论】:

    标签: c# .net ironruby dynamic-language-runtime embedded-language


    【解决方案1】:

    目前你不能使用 C# 作为脚本语言,除非你改用 Mono。

    Microsoft 已声明此(或类似功能)已在 C# 版本 5 的路线图上,这还很遥远。

    但是,您目前可以伪造它,方法是创建一个临时“代码文件”作为内存字符串,在外部运行 C# 编译器以生成新的内存程序集,然后加载并执行该程序集。
    这一次可以正常工作,但如果您想在不重新启动的情况下更新它,则必须将内存中的程序集加载到新的应用程序域中,并且每次都卸载旧的程序集(这很棘手)。

    说实话,我不会打扰。由于 C# 的编译特性和静态类型,C# 并不是一种非常好的脚本语言

    【讨论】:

      【解决方案2】:

      为脚本嵌入 IronRuby 并不难。
      Jimmy Schementi(IronRuby 开发人员之一)在这里有一个完整、详细的示例:

      http://blog.jimmy.schementi.com/2009/12/ironruby-rubyconf-2009-part-35.html

      我认为用 C# 来做这件事并不容易。

      抱歉,我知道这并不能回答您的问题,但希望它对那些试图通过 IronRuby 处理脚本的人有所帮助。

      【讨论】:

      • 我真的很喜欢 IronRuby。但也希望有一个 C#,我可以通过 DLR 插件或像 DLR 一样简单。我在这个应用程序中有大约 20 个脚本无法通过或内部标准审查。如果 Microsoft 保留 DLR 上的 JavaScript,DLR 可能会通过。我的公司已经批准了 JavaScript,我们的大多数开发人员都已经知道了。
      • @tyndall 你看过单声道项目吗?他们已经将编译器作为一项服务,它允许你做非常相似的事情,但使用 C# 而没有 DLR
      【解决方案3】:

      您也许可以在应用程序运行时更新您的 C# 代码,但这并不简单。该主题讨论了尝试做这样的事情:

      http://www.eggheadcafe.com/software/aspnet/30778032/assemblyload-and-updat.aspx

      该主题的底部是本文的链接,看起来很有帮助:

      http://dotnet.sys-con.com/node/113340

      基本方法是在单独的 AppDomain 中加载插件程序集,然后在您要替换插件时卸载整个 AppDomain。

      【讨论】:

        【解决方案4】:

        您总是可以尝试使用 CS 脚本。

        http://www.csscript.net/

        不过,我个人建议坚持使用 IronRuby 或 Lua 编写脚本。

        【讨论】:

        • 我看过了吗? Lua for .NET 项目的开发有多活跃/稳定?我从未尝试过实现。
        • 对于大多数人来说,这似乎是一个足够好的解决方案,但我最近在我的一个项目中从它切换到托管 IronRuby,因为我的脚本需要更多功能,而无需在 Lua 中注册太多东西。如果您对在 .Net 中使用 Lua 感兴趣,可以使用 Martin Echenique 编写的 Lua 命令的非常好的自定义属性。它可以在这里找到:gamedev.net/reference/articles/article2275.asp 这将防止您需要手动注册任何可用于 Lua 脚本的方法。
        猜你喜欢
        • 1970-01-01
        • 2011-04-20
        • 2011-09-05
        • 2017-12-29
        • 1970-01-01
        • 2010-10-02
        • 2013-02-21
        • 1970-01-01
        • 2015-02-14
        相关资源
        最近更新 更多