如何通过配置动态地在.NET(C#)类中创建和执行方法

ran*_*own 6 .net c# dynamic

我正在考虑MsBuild中"内联任务"的内容.供参考:http://msdn.microsoft.com/en-us/library/dd722601.aspx

我想找到或创建一个允许我通过配置覆盖方法的框架.例如,如果我有一个众所周知的基类,它有一个方法Execute(args),我如何在部署时提供重写的方法实现,而不需要新的代码,构建,发布周期?我想实际将方法体插入配置文件或最好是数据库表.

我假设这可以通过代码dom,动态语言集成或者类似PowerShell(?)来完成.我正在寻找建议或者某个人已经写过的图书馆.

该应用程序是用C#编写的.优选地,扩展也将在C#中,但我也对其他想法持开放态度.

更新:从技术上讲,我甚至不必实际覆盖方法.仅仅能够动态执行一些外部源代码,传入arg并返回结果就足够了.

更新.我最终编写代码来实例化PowerShell对象并动态执行脚本以返回值.这是我使用的一段代码.

    public static Collection<PSObject> ExecuteScript(string code, string variableName, object variableValue)
        {
            PowerShell ps = PowerShell.Create();    

            ps.AddScript(code);

            if (!string.IsNullOrWhiteSpace(variableName))
            {                   
                ps.Runspace.SessionStateProxy.SetVariable(variableName, variableValue);
            }

            var result = ps.Invoke();

            return result;
        }
Run Code Online (Sandbox Code Playgroud)

然后在调用代码中,我只是检查返回值中的第一个PSObject,并从中拉出结果值.它很棒.感谢所有的回复.

Jam*_*unt 1

一种选择是使用 Iron Python(或另一种 DLR 语言)。然后,您的 Execute 方法将在配置文件中查找脚本,编译它并在运行时执行它。

在您的项目中包含必要的 Iron Python 程序集并不是很大的开销。

您可能需要做一些管道工作才能将应用程序的其他部分暴露给 python 运行时环境,但这很容易做到。