我有一个应用程序,我必须为用户提供即时可扩展性。您可以将其视为一种计算引擎,具有大量数据和一些数学/数值算法。我提供了一些静态字段(数据)和方法(计算),用户可以使用它们构建一个应该返回双精度的有效 C# 表达式。
用户在文本框中键入有效表达式,我应该提供结果。我目前所做的是,按照http://blogs.msdn.com/b/abhinaba/archive/2006/02/09/528416中的步骤,在内存中生成的程序集的静态方法上注入表达式.aspx。然后我使用反射来调用特定的方法并返回结果。
这很好用,除了生成的程序集在应用程序的生命周期中不断累积。当我只有客户端应用程序时,这没问题,但现在我正在进入基于服务器的应用程序,我不想不时重置服务。
在搜索如何卸载程序集时,我发现了 System.Addin 命名空间。它完全符合我的要求:在不同的 AppDomain 上加载程序集,我可以在后面丢弃它。它甚至封装了所有反射。
我现在唯一的问题是 AddInStore 需要一个文件路径,但是我的所有程序集都是在内存中生成的,方法是将 CompileParameters 的 GenerateInMemory 属性设置为 true。绝对有必要将我的程序集写入磁盘吗?或者是否可以将在运行时编译的程序集直接用作加载项?
最好的问候,卡洛斯