10

我有一些 C# 代码(我们称之为“脚本”)我在运行时编译。它在我的主程序中使用了一个接口,我用来访问它的功能。一旦编译完成,CompilerResults.CompiledAssembly在这种情况下我可以CreateInstance(Type)

完成使用脚本后,我想完全卸载。据我了解,如果我创建一个单独的应用程序域,我只能这样做: Loading DLLs into a separate AppDomain

我有一些特定于我的实施的问题:

  1. 如果我有多个脚本要编译并想独立卸载它们,我是否必须为每个脚本创建单独的应用程序域?
  2. 我应该使用哪些应用域名?GUID 是个好主意吗?有没有我应该避免的可能冲突的名字?
  3. 如果程序集位于单独的应用程序域中,访问主程序中的界面是否有任何问题?我目前ReferencedAssemblies.Add(typeof(Interface).Assembly.Location)在编译之前正在做。
  4. 我可以使用CompilerParameters GenerateInMemory=true,还是必须将其保存在某个地方?
4

1 回答 1

2

按顺序回答:

  1. 是的,如果您想独立卸载它们,您将需要单独的应用程序域。
  2. 随便用。如果您可以将其识别回脚本,它可能会帮助您调试,但对于正在执行的线程来说更是如此。
  3. 只要您将域设置的基本路径设置为您自己的。

    AppDomainSetup.ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;

  4. 不,您不需要保存它,听起来它不会使您受益。

于 2009-09-22T22:38:52.040 回答