我将从描述问题开始。所以我用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中?