gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:36:01 24 4
gpt4 key购买 nike

我正在考虑与 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;
}

然后在调用代码中,我简单地检查返回值中的第一个 PSObject,并从中提取结果值。它很好用。感谢所有回复。

最佳答案

这里有两个动态执行的例子。我没有用过,所以我不能进一步评论。

http://www.codeproject.com/KB/dotnet/evaluator.aspx
http://www.csharpfriends.com/articles/getarticle.aspx?articleid=118

关于命名空间,从第二篇文章可以通过CompilerParameter类添加程序集。

// Create the C# compiler
CSharpCodeProvider csCompiler = new CSharpCodeProvider();
ICodeCompiler iCodeCompiler = csCompiler.CreateCompiler();

// input params for the compiler
CompilerParameters compilerParams = new CompilerParameters();
compilerParams.OutputAssembly = "CSharpFriends.dll";
compilerParams.ReferencedAssemblies.Add("system.dll");

关于c# - 如何最好地通过配置在 .NET (C#) 类中动态创建和执行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7162262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com