我想知道是否可以将C#代码片段保存到文本文件(或任何输入流),然后动态执行它们?假设提供给我的内容可以在任何Main()块中编译好,是否可以编译和/或执行此代码?出于性能原因,我更愿意编译它.
至少,我可以定义一个他们需要实现的接口,然后他们将提供一个实现该接口的代码"section".
背景
我有一个Windows服务,它使用各种第三方DLL来执行PDF文件的工作.这些操作可能会占用相当多的系统资源,并且在发生错误时偶尔会出现内存泄漏.DLL是围绕其他非托管DLL的托管包装器.
现行解决方案
我已经在一个案例中通过在专用控制台应用程序中包含对其中一个DLL的调用并通过Process.Start()调用该应用程序来缓解此问题.如果操作失败并且存在内存泄漏或未释放的文件句柄,则无关紧要.该过程将结束,操作系统将恢复句柄.
我想将这个相同的逻辑应用到我的应用程序中使用这些DLL的其他地方.但是,我对于在我的解决方案中添加更多控制台项目并编写更多可以调用Process.Start()并解析控制台应用程序输出的样板代码感到非常兴奋.
新解决方案
专用控制台应用程序和Process.Start()的优雅替代方案似乎是使用AppDomains,如下所示:http: //blogs.geekdojo.net/richard/archive/2003/12/10/428.aspx.
我在我的应用程序中实现了类似的代码,但单元测试并不乐观.我在一个单独的AppDomain中创建一个测试文件的FileStream,但不要处理它.然后我尝试在主域中创建另一个FileStream,并且由于未释放的文件锁而失败.
有趣的是,将空DomainUnload事件添加到工作程序域会使单元测试通过.无论如何,我担心可能创建"工人"AppDomains无法解决我的问题.
思考?
代码
/// <summary>
/// Executes a method in a separate AppDomain. This should serve as a simple replacement
/// of running code in a separate process via a console app.
/// </summary>
public T RunInAppDomain<T>( Func<T> func )
{
AppDomain domain = AppDomain.CreateDomain ( "Delegate Executor " + func.GetHashCode (), null,
new AppDomainSetup { ApplicationBase = Environment.CurrentDirectory } );
domain.DomainUnload += ( sender, e ) => …Run Code Online (Sandbox Code Playgroud) 我有一个.NET类库(作为.dll文件),该库包含一个带有静态方法的类.有没有办法从命令行调用该方法?