我想在集成测试中动态创建程序集,以测试某些程序集操作类。如果我使用以下代码创建测试程序集:
var domain = AppDomain.CurrentDomain;
var builder = domain.DefineDynamicAssembly(
new AssemblyName(assemblyName),
AssemblyBuilderAccess.Save,
directory);
builder.Save(fileName);
然后一切正常,程序集在所需位置创建,但作为其中的一部分,它们也被加载到 current AppDomain
,这是我不想要的。
所以我想使用单独的创建程序集AppDomain
:
var domain = AppDomain.CreateDomain("Test");
...
但是运行代码会在该行引发异常var builder = domain.DefineDynamicAssembly(...);
:
System.Runtime.Serialization.SerializationException:在程序集“mscorlib,版本=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”中键入“System.Reflection.Emit.AssemblyBuilder”未标记为可序列化。
我不知道这与调用DefineDynamicAssembly
non-current有何关系AppDomain
。我在网上找到的主要是关于在不同的域中执行程序集。也许我在这里尝试做的事情太具体、太高级甚至根本不推荐,但它可以让我测试我们所有的汇编操作代码。
有人可以指出我正确的方向吗?