C#如何添加要在运行时执行的代码

时间:2012-05-31 10:03:29

标签: c# .net vb.net reflection

我知道这个要求对你们很多人来说似乎很受欢迎,但这是我的项目要求之一。 是否可以在Sp中添加代码并在.Net exe中执行。就像在按钮上单击我调用一个SP,SP返回几行代码,然后程序执行代码。

是否可能,如果是,那么如何?

我正在使用框架1.1

4 个答案:

答案 0 :(得分:3)

搜索“动态c#代码执行”,Google从2002年开始提供此博客......这可能对您有用..

http://www.west-wind.com/presentations/dynamiccode/dynamiccode.htm

本文引用System.CodeDom.Compiler来动态编译程序集,然后使用Reflection执行该代码。听起来很有趣;)

编辑:正如DaveL建议:Is it possible to dynamically compile and execute C# code fragments?

答案 1 :(得分:1)

如果您正在讨论将TSQL编译到表中,然后通过C#运行此TSQL,是的,这是可能的。您需要做的是为TSQL脚本文件(.sql)编写一个简单的解析器。解析器将读取SQL脚本并在每个GO语句中将TSQL语句添加到相关的SQL Server表中(该表可能有两列1.要运行的数据库/要运行的进程名称。查询本身。)然后,您可以在运行时动态执行这些TSQL块。

如果您正在讨论运行编译到SQL Server数据表中的C#,这是一个不同的球类游戏,我不知道一个简单的方法(这有可能)。

我希望这会有所帮助。

答案 2 :(得分:1)

另一种可能性:

通过在数据库中使用某些二进制数据类型(如varbinary),可以将Assemblies存储在表中作为二进制数据。然后,您可以从数据库中读取该二进制数据,将其存储在本地,通过Assembly.LoadFrom()加载程序集,然后使用反射查找可以使用的某些特殊类型或入口点。

答案 3 :(得分:0)

你可能想要DLR(D代表Dynamic),不幸的是这是.NET 4.0以上。

听起来像是在一个糟糕的遗留代码netherworld;而不是你。

你可以创建自己的脚本语言在你的应用程序中运行,但它会很慢而且不理想。像YACC这样的东西可以帮助你顺利进行,但这是一个颠簸的旅程(看到有人在Java中尝试过这种行为)。