C#如何添加要在运行时执行的代码
我知道这个要求对你们很多人来说似乎很受欢迎,但这是我的项目要求之一。 是否可以在Sp中添加代码并在.Net exe中执行。 就像在按钮上单击我调用一个SP,SP返回几行代码,然后程序执行代码。
有可能,如果是,那么如何?
我正在使用框架1.1
搜索“动态c#代码执行”,谷歌从2002年开始提供这个博客…这可能对你有用..
http://www.west-wind.com/presentations/dynamiccode/dynamiccode.htm
本文引用System.CodeDom.Compiler来动态编译程序集,然后使用Reflection来执行该代码。 听起来很有趣 ;)
编辑:正如DaveL建议的那样: 是否有可能动态编译和执行C#代码片段?
如果您正在讨论将TSQL编译到表中,然后通过C#运行此TSQL,是的,这是可能的。 您需要做的是为TSQL脚本文件(.sql)编写一个简单的解析器。 解析器将读取SQL脚本并在每个GO
语句中将TSQL语句添加到相关的SQL Server表中(该表可能有两列1.要运行的数据库/要运行的进程名称.2。查询本身)。 然后,您可以在运行时动态执行这些TSQL块。
如果你正在谈论运行编译成SQL Server数据表的C#,这是一个不同的球类游戏,我不知道一个简单的方法来做到这一点(它是可能的)。
我希望这有帮助。
另一种可能性
通过在数据库中使用varbinary
等二进制数据类型,可以将Assemblies存储在表中作为二进制数据。 然后,您可以从数据库中读取该二进制数据,在本地存储它,通过Assembly.LoadFrom()
加载程序Assembly.LoadFrom()
,然后使用reflection来查找可以使用的某些特殊类型或入口点。
你可能想要DLR(D代表Dynamic),遗憾的是这是.NET 4.0以上版本。
听起来像是一个糟糕的遗留代码netherworld; 而不是你。
您可以创建自己的脚本语言以在您的应用程序中运行,但它会很慢而且不理想。 像YACC这样的东西可以帮助你顺利进行,但这是一个颠簸的旅程(看到有人在Java中尝试这种行为)。