2011-03-30 58 views
1

编译动态对象我写一个应用程序,允许用户超过对象的集合计算值来创建自定义算法。简而言之,我将通过一种方法使用类的源代码的字符串。如何管理创建/在.NET 4.0中

我已经实现该解决方案是编译字符串源代码中为每个这样的自定义算法一个单独的DLL,然后使用Assembly.Load加载它们并实例保存在DLL中的类。从可维护性的角度来看,这意味着我必须将源代码存储在数据库中(例如),并管理编译后的dll的存在(如果缺失,则通过再次编译源代码来重新创建)

考虑到.NET 4.0的新特性,是否有更好的方法来做到这一点?

编辑: 输入源代码是C#,我使用CSharpCodeProvider编译代码。自定义类都是从基类派生的,它们覆盖实际上保存计算逻辑的方法。我真的很想做的是摆脱DLL管理的同时不失去(太多)性能编译所有的类,每次我的应用程序启动时

回答

2

我想看看脚本语言; IronPython很容易嵌入,或者有.NET的JavaScript引擎。简单,并且通常够快。


如果(评论)你需要使用C#,我想:

  • 构建所有在同一时间在一个组件的电流的方法;解决了很多问题
  • 如果在执行过程中的数据变化,使用的AppDomain的,这样我可以卸载它们

我已经做了类似的东西在模型/规则是XML,通过变换运行它获取c#,并用CSharpCodeProvider(或其他)编译;并简单地轮询每分钟左右,看是否有新版本需要

+0

的要求是,源代码中的用户提供为C#。 – anchandra 2011-03-30 21:27:53

+0

@anchandra - k;将编辑 – 2011-03-30 21:32:41

+0

我认为你可以直接编译到内存中的程序集。所以你不需要在磁盘上管理它们。 – CodesInChaos 2011-03-30 21:43:55

1

的CSharpCodeProvider已经存在了一段时间,并应符合票。它可以用来像你一直在做的那样生成单独的库(也许你正在使用CSharpCodeProvider),但它也可以用来生成动态类对象。如果他们都实现了一个接口,你可以把对象转换为一个接口,或者你可以使用反射来调用你的逻辑。这里是一个CodeProject上的文章,以实现类似的东西:

http://www.codeproject.com/KB/dotnet/dynacodgen.aspx

相关问题