可以取消分配使用CodeDomProvider生成的程序集吗?

问题描述 投票:1回答:1

我想编写一个允许用户定义GUI驱动的代码片段的应用程序。

在这种情况下,我的目标是将这些片段定义发送到一个服务,该服务将能够编译和运行它(代码dom,代码dom提供程序,...)用于多种目的。

由于这些编译的程序集将多次生成,我的问题是如何在需要时解除分配它们。

我知道从文件加载的程序集不能从内存中释放,除非加载在一个单独的应用程序域中(我们需要释放整个应用程序域)。

但是动态编译的程序集是这样的吗?并且,如果需要,如何在单独的应用程序域中生成这些程序集?

例如,在我的情况下需要这个question中指出的方法(这里我想整个编译过程和运行时使用应该在一个单独的应用程序域中完成)?

c# memory-management .net-assembly codedom system-codedom-compiler
1个回答
1
投票

从我的粉丝你在这里混合两件事:

  1. 编译和
  2. 执行

您可以使用CodeDom Provider编译任意数量的代码并在任何地方编写生成的cs代码,然后部署CodeDom编写器(CSharpCodeProvider)并且已用完的内存消失。

执行代码时,它的内容完全不同。有几个库为您提供了一种执行Cs代码的方法,但它们(大多数)默认情况下共享同一个问题。代码将在执行的应用程序中执行。这需要一个AppDomain,因为在.net环境中执行任何操作都会分配给一个。如果要将“不受信任的”代码执行与主机代码分开,则需要另一个AppDomain。

C#中的脚本(c#)Libs:

注意:CS脚本执行是一个关于安全的地狱。有无限的方法可以打破AppDomain,并且不需要花费太多精力来使你的应用程序域免受这些攻击,你将在应用程序安全概念中拥有一个巨大的整体。我刚刚做了一个评估,并决定使用javascript作为脚本语言(使用Chakara.Core引擎)。

© www.soinside.com 2019 - 2024. All rights reserved.