我的问题很简单。出于单元测试的目的,我需要一个从Exception类型派生的静态编译类型,它在一个AppDomain中是已知的,但在另一个AppDomain中是未知的。
一个简单的解决方案是:
现在,主AppDomain可以轻松加载类型,因为它的位置在探测路径中,但第二个AppDomain无法完成任务。
但这种方法需要:
我想知道我是否可以更简单地实现我的目标,但没有Reflection.Emit。
感谢。
修改
任何Exception派生类型都可以。
动机:
我们有一个分布式应用程序,包括客户端,服务器和代理。有专门在代理上找到的程序集,并且有些程序专门在服务器上找到。部署新功能后,服务器和代理都可以扩展。问题是某些操作可能会因异常而失败,该类型在接收端是未知的。我正在开发一个设施来应对这种情况,并希望现在进行单元测试。为此,我需要模拟在远程站点上引发的异常在接收端是未知类型的情况。
答案 0 :(得分:1)
首先,我不知道有任何方法可以防止从加载的程序集中加载类型。这意味着我们需要谈论组件 - 而不是类型。即使某个类型在第一次访问之前没有初始化,如果加载了您的类型的程序集将访问它,则无法使CLR忘记它。
换句话说,你必须有一个单独的受保护类型的DLL。其余部分可以通过多种方式解决,也就是说,您可以使用Assembly.LoadFrom在您需要的应用程序域中加载程序集,而不是使用appconfig。
这有多好,取决于你在这里尝试做什么,由你来决定。
答案 1 :(得分:1)
AppDomain.CreateDomain具有接受AppDomainSetup的重载。此类的许多属性与.config文件中的相应条目匹配。包括PrivateBinPath。 ApplicationBase设置CLR开始搜索的“home”目录。