在运行时调用 bridge.net 编译器

invoke bridge.net compiler at runtime

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

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 class 会在运行时根据一些配置创建。我无法控制 IsScoreValid 方法中的代码,它可能会在应用程序处于 运行 时更改。我只知道它是有效的 C# 代码。我需要一种可靠的方法来将此 class 转换为等价的 javascript,并且我需要能够在运行时执行此转换。 Bridge.net 是转换此 javascript 的好方法吗? Bridge.net编译器可以在运行时调用吗?

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

实现实时桥接编译的 Web 项目需要能够处理服务器端调用,例如 Asp.NET 中的 Web 服务 (ashx),但您也可以通过 cgi-bin 或 php 来自 linux/osx,如果您进行命令行调用,则使用 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#)