我想在集成測試中動態創建程序集以測試某些程序集操作類。如果我用下面的代碼來創建測試組件:在非當前AppDomain上使用DefineDynamicAssembly動態創建程序集時出現異常
var domain = AppDomain.CurrentDomain;
var builder = domain.DefineDynamicAssembly(
new AssemblyName(assemblyName),
AssemblyBuilderAccess.Save,
directory);
builder.Save(fileName);
那麼一切運行正常,該組件在所需位置創建的,但作爲其中的一部分,他們還加載到當前AppDomain
,我不要不想要。
所以我雖然關於使用創建組件單獨AppDomain
:
var domain = AppDomain.CreateDomain("Test");
...
但在運行代碼拋出在行var builder = domain.DefineDynamicAssembly(...);
異常:
System.Runtime.Serialization.SerializationException:類型程序集'mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'中的'System.Reflection.Emit.AssemblyBuilder'未標記爲可序列化。
我不知道這是如何涉及在非當前AppDomain
上調用DefineDynamicAssembly
。我在網上找到的主要內容都是關於在不同域中執行程序集。也許我在這裏想要做的只是太具體,太先進,甚至根本不推薦,但它可以使我測試所有的彙編操作代碼。
有人可以請指出我在正確的方向嗎?
你能發佈引發異常的實際代碼嗎?爲什麼你不想將它加載到當前的AppDomain中?如果您擔心內存問題,則可以嘗試使用「AssemblyBuilderAccess.RunAndCollect」。 – svick
@svick在'var builder = domain.DefineDynamicAssembly(...);'行拋出異常,我更新了這個問題。 – famousgarkin
@svick我不想讓「假」程序集在測試之間共享以進入全局範圍。儘管目前它主要是出於純粹的原因,但其中一些程序集稍後可能會包含一些代碼,這可能是一個問題。 – famousgarkin