我正在考虑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,并从中拉出结果值.它很棒.感谢所有的回复.
一种选择是使用 Iron Python(或另一种 DLR 语言)。然后,您的 Execute 方法将在配置文件中查找脚本,编译它并在运行时执行它。
在您的项目中包含必要的 Iron Python 程序集并不是很大的开销。
您可能需要做一些管道工作才能将应用程序的其他部分暴露给 python 运行时环境,但这很容易做到。