c# - 无法将透明代理强制转换为来自 AppDomain 的类型

标签 c# .net remoting appdomain

我正在尝试在应用程序域中创建一个对象:

var type = typeof (CompiledTemplate);
var obj = (CompiledTemplate) domain.CreateInstanceAndUnwrap (
    type.Assembly.FullName, type.FullName);

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

无法将透明代理转换为类型“Mono.TextTemplating.CompiledTemplate”。

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

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

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

对于修复或解决此问题有什么建议吗?

最佳答案

您是否遇到了程序集加载上下文的问题? (例如,参见 here) 您有一个明显位于加载上下文中的类型(因为您正在使用 typeof(CompiledTemplate)),但您是说辅助 AD 中的类型已加载到加载源上下文中。 ..

你检查过fuslogvw了吗?确定到底加载了哪些程序集? fuslog 跟踪还会告诉您程序集是否正在加载到不同的上下文中。

关于c# - 无法将透明代理强制转换为来自 AppDomain 的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3655484/

相关文章:

c# - 如何创建一个磁力链接客户端(以前针对ThePiratBay)

c# - 在 Unity 中仅将纹理应用于立方体的某些面

c# - 与 C++ 结构等效(或更好)的 C# 结构

java - 透明远程处理和位置透明之间的区别

c# - 处理 IPC 远程 channel 的安全性

c# - 如何在不使用任何代码的情况下在 Windows 启动时运行 WPF 应用程序

.net - 将数据从 Matlab 应用程序服务器传输到 F#

c#运行时丢失引用

c# - 使用 Cast<T> 将 int[] 转换为 double[]?

java - 远程 EJB 接口(interface)无法通过 Internet 工作