【问题标题】:invoke bridge.net compiler at runtime在运行时调用 bridge.net 编译器
【发布时间】:2019-01-28 22:29:09
【问题描述】:

我正在设计一个需要在运行时创建一些 C# 类的应用程序。我希望能够将这些类转换为 javascript 等价物。例如,我可能有一个 C# 类,看起来像

public class Person
{
    public int Score { get; set; }
    public bool IsScoreValid()
    {//code in real implementation would be more complex and make use of various properties
        return Score > 0 && Score <= 100;
    }
}

这里的技巧是,这里的 Person 类将在运行时基于一些配置创建。我无法控制 IsScoreValid 方法中的代码,它可能会在应用程序运行时更改。我只知道它是有效的 C# 代码。我需要一种强大的方法来将此类转换为等效的 javascript,并且我需要能够在运行时执行此转换。 Bridge.net 会是转换此 javascript 的好方法吗?可以在运行时调用 Bridge.net 编译器吗?

【问题讨论】:

    标签: c# bridge.net


    【解决方案1】:

    如果有可能?确实如此,请参阅http://deck.net/。但不幸的是,该项目不是开源的。基本上就是一个项目,直接调用Bridge.Translator.Translate()方法,用正确的参数构建文件。

    实现实时桥接编译的 Web 项目需要能够处理服务器端调用,例如 Asp.NET 中的 webservices (ashx),但您也可以通过 cgi-bin 或 linux/osx 中的 php 来实现,如果您进行命令行调用,请使用 Bridge CLI,或者连接包装器以直接调用 Bridge.Translator。不过,这需要一个支持 Mono 的二进制文件才能链接到 Linux/osx 上的 Bridge.Translator。

    虽然 deck.net 项目未打开,但 Bridge 本身已打开,因此您可以完全访问以查看如何从 Bridge.Builder 或 Bridge CLI 打开项目调用 Bridge 的 Translate() 方法。

    但是,如果您希望代码不关心引用,例如缺少 IsScoreValid() 的定义或原型,那么使用 Bridge 将是一个问题。它至少需要对方法进行原型设计并标记External,然后才能接受调用;由于代码树是通过 roslyn 构建的,因此 c# 代码必须完整且可构建。 (或者,我们可以称它为适当的 C# 吗?也许,在你的情况下,你真的不需要成熟的 C#)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-08
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多