将Roslyn Compilation中的程序集加载到新的AppDomain

时间:2016-10-11 10:50:25

标签: c# .net-assembly roslyn

我将从描述问题开始。所以我用Roslyn编译器动态创建.dll。后来我需要对它进行分析,以便用反射进行一些安全检查。 如果我使用以下代码:

...
var assemblyStream = new MemoryStream();
compilation.Emit(assemblyStream);
var assembly = Assembly.ReflectionOnlyLoad(assemblyStream.ToArray());

它可以工作,但我无法卸载组件,因为这是不可能的。所以我发现我应该创建AppDomain,因为您可以使用所有已加载的程序集卸载AppDomain。所以现在我的代码看起来像这样:

...
var assemblyStream = new MemoryStream();
compilation.Emit(assemblyStream);
var temporaryAppDomain = AppDomain.CreateDomain("TemporaryAppDomain");
var assembly = temporaryAppDomain.Load(assemblyStream.ToArray());
...
AppDomain.Unload(temporaryAppDomain);

现在紧跟以下行:

  

var assembly = temporaryAppDomain.Load(assemblyStream.ToArray());

抛出FileNotFoundException(无法加载文件或程序集......)

我错过了什么?如何将新程序集加载到临时AppDomain中?

0 个答案:

没有答案