我在C库上有一个C#包装器。 在C lib中,我有一个函数,它将回调作为输入。 在C#中,我公开了像委托一样的回调。
在正常模式下一切正常但是当我尝试在远程模式下调用相同的函数时,它会产生异常 无法加载文件或程序集。 我的远程处理方案就像
1)SharedLib:我有一个c#shared lib,它的函数是C函数的包装器。 所有函数都在此库中定义。
2)服务器控制台应用程序:服务器的作用是从Shredlib获取会话并打开一个端口,以便客户端向服务器询问会话
3)客户端控制台应用程序:客户端侦听服务器打开的端口并从服务器获取会话对象。它在sharedlib中定义了与委托具有相同签名的函数 在会话对象客户端上调用sharedLib的方法,该方法将回调作为输入。 客户端传递具有相同签名的方法的地址,如委托方法,来自sharedLib的方法,期望回调作为输入。
在此之后,我得到了例外情况,例如“无法加载文件或程序集。”
如果我将null传递给以回调作为输入的参数,那么在远程处理模式下一切正常。 所以任何人都可以帮助在远程处理模式下使用回调。
答案 0 :(得分:0)
三点建议:
1)不同的AppDomain是否以相同的信任级别运行?如果信任级别较低,则第二个域可能没有加载程序集的权限。
2)远程应用程序在其加载程序集的目录中没有所需的所有依赖项。
3)两个应用程序是否在相同版本的.NET下运行?如果一个是.NET 4.5,一个是.NET 3.5,那里有一个.NET 4.0程序集,那么第二个进程将无法运行它。
您可以尝试启用Fusion程序集绑定日志记录,以查看加载失败的更详细原因。