可以释放使用 CodeDomProvider 生成的程序集吗?
Can an assembly generated using CodeDomProvider be deallocated?
我想编写一个允许用户定义 GUI 驱动代码片段的应用程序。
在这种情况下,我的目标是将这些片段定义发送到能够编译和 运行 它的服务(代码 dom,代码 dom 提供商,.. .) 用于多种目的。
由于这些编译后的程序集会生成很多次,所以我的问题是如何在需要时释放它们。
我知道从文件加载的程序集无法从内存中释放,除非加载到单独的应用程序 domain 中(并且我们需要释放整个应用程序 domain)。
但是动态编译的程序集是这样吗?
并且,如果需要,如何在单独的应用程序中生成这些程序集 domain?
例如,我的情况是否需要question中指出的方法(这里我猜想整个编译过程和运行时间使用应该在单独的应用程序中完成dom是)?
根据我的经验,你混淆了两件事:
- 编译
和
- 执行
您可以使用 CodeDom Provider 编译任意多的代码,并将生成的 cs 代码写入任何地方,然后处理 CodeDom 编写器 (CSharpCodeProvider),使用的内存就消失了。
执行代码时完全不同。有几个库为您提供了一种执行 Cs 代码的方法,但默认情况下它们(大多数)都共享相同的问题。代码将在 在 正在执行的应用程序中执行。这需要一个 AppDomain,因为在 .net 环境中执行任何事情都被分配给一个。如果要将 "untrusted" 代码执行与主机代码分开,则需要另一个 AppDomain。
C# 中的脚本 (c#) 库:
- https://blogs.msdn.microsoft.com/cdndevs/2015/12/01/adding-c-scripting-to-your-development-arsenal-part-1/
- http://www.csscript.net/
- CSharpCodeProvider
注意:
CS 脚本执行是一个安全问题。有无限种方法可以突破 AppDomain,并且无需花费大量精力使您的 appdomain 免受这些攻击,您将在应用程序安全概念中拥有巨大的整体。我最近做了一个评估,决定使用 javascript 作为脚本语言(使用 Chakara.Core 引擎)。
我想编写一个允许用户定义 GUI 驱动代码片段的应用程序。
在这种情况下,我的目标是将这些片段定义发送到能够编译和 运行 它的服务(代码 dom,代码 dom 提供商,.. .) 用于多种目的。
由于这些编译后的程序集会生成很多次,所以我的问题是如何在需要时释放它们。
我知道从文件加载的程序集无法从内存中释放,除非加载到单独的应用程序 domain 中(并且我们需要释放整个应用程序 domain)。
但是动态编译的程序集是这样吗? 并且,如果需要,如何在单独的应用程序中生成这些程序集 domain?
例如,我的情况是否需要question中指出的方法(这里我猜想整个编译过程和运行时间使用应该在单独的应用程序中完成dom是)?
根据我的经验,你混淆了两件事:
- 编译 和
- 执行
您可以使用 CodeDom Provider 编译任意多的代码,并将生成的 cs 代码写入任何地方,然后处理 CodeDom 编写器 (CSharpCodeProvider),使用的内存就消失了。
执行代码时完全不同。有几个库为您提供了一种执行 Cs 代码的方法,但默认情况下它们(大多数)都共享相同的问题。代码将在 在 正在执行的应用程序中执行。这需要一个 AppDomain,因为在 .net 环境中执行任何事情都被分配给一个。如果要将 "untrusted" 代码执行与主机代码分开,则需要另一个 AppDomain。
C# 中的脚本 (c#) 库:
- https://blogs.msdn.microsoft.com/cdndevs/2015/12/01/adding-c-scripting-to-your-development-arsenal-part-1/
- http://www.csscript.net/
- CSharpCodeProvider
注意: CS 脚本执行是一个安全问题。有无限种方法可以突破 AppDomain,并且无需花费大量精力使您的 appdomain 免受这些攻击,您将在应用程序安全概念中拥有巨大的整体。我最近做了一个评估,决定使用 javascript 作为脚本语言(使用 Chakara.Core 引擎)。