无法将透明代理转换为从AppDomain输入

Mik*_*son 11 .net c# remoting appdomain

我正在尝试在appdomain中创建一个对象:

var type = typeof (CompiledTemplate);
var obj = (CompiledTemplate) domain.CreateInstanceAndUnwrap (
    type.Assembly.FullName, type.FullName);
Run Code Online (Sandbox Code Playgroud)

但是,我总是收到以下错误:

无法转换透明代理以键入"Mono.TextTemplating.CompiledTemplate".

我运行的是.NET 4.0,而不是Mono,尽管命名空间可能会提示:)

据我所知,当.NET认为类型和程序集在两个域中不完全匹配时会发生此错误.但是,在调试时,FullName和Location是相同的.只有Assembly.Codebase属性不同 - 在子AppDomain中,由于某种原因,它的扩展名大写为"DLL".

我已经尝试将AssemblyResolve处理程序添加到AppDomain,它使用Assembly.LoadFrom显式加载文件名,但CodeBase的扩展仍然是大写的.由于原始程序集也加载了Assembly.LoadFrom(通过Mono.Addins),CodeBase值之间的差异似乎很奇怪.

有关修复或解决此问题的建议吗?

Sas*_*ein 5

您是否可能遇到装配负载上下文的问题?(例如,请参阅此处)您的类型明显位于加载上下文中(因为您正在使用typeof(CompiledTemplate)),但您说的是辅助AD中的类型被加载到加载来自上下文...

您是否使用fuslogvw检查以确定正在加载哪些程序集?fuslog跟踪还将告诉您程序集是否正在加载到不同的上下文中.