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

时间:2018-08-22 15:48:19

标签: c# bridge.net

我正在设计一个需要在运行时创建一些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编译器吗?

1 个答案:

答案 0 :(得分:2)

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

实现实时桥编译的Web项目需要能够处理服务器端调用,例如Asp.NET中的Web服务(ashx),但是您也可以通过cgi-bin或linux / osx中的php来实现,如果您进行命令行调用,请使用Bridge CLI,或者连接包装器以直接调用Bridge.Translator。不过,在Linux / osx上,必须将其作为具有Mono功能的二进制文件才能与Bridge.Translator链接。

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

但是,如果您希望代码不关心引用,例如缺少IsScoreValid()的定义或原型,那么使用Bridge将是一个问题。在接受该调用之前,至少需要将该方法原型化并标记为External;由于代码树是通过roslyn构建的,因此C#代码必须完整且可构建。 (或者,我们可以称其为正确的C#吗?也许,在您的情况下,您实际上并不需要完整的C#)