我在asp.net网络应用程序上进行维护,该应用程序使用远程处理来调用远程服务器对象来订购信用报告。调用“在我的机器上工作”但是从生产服务器(运行64位版本的.net框架)运行时抛出异常“无法加载文件或程序集'choicepointClue'”。
我通过将choicepointClue.dll复制到Web应用程序的bin目录来解决了这个问题。但我不明白为什么它需要在那里,因为它是远程服务器库的依赖,而不是客户端。
依赖树看起来像这样:
网络应用 - > choicepointClueClient - > choicepointRemoteAgent - > choicepointClue
在choicepointRemoteAgent库中没有为类定义接口(因为应该有),因此它由choicepointClueClient直接引用。
使用Activator.GetObject()实例化来自choicepointRemoteAgent的类。在这一点上,我希望在远程服务器上加载choicepointClue.dll,而不是试图从Web应用程序的bin目录加载它的运行时。
我想到的一个疯子理论是,在x64和x86上加载程序集之间存在差异。
所以在x64上它会在加载choicepointRemoteAgent时尝试加载choicepointClue,在x86上它不会尝试加载chiocepointClue,直到明确调用它为止?
显然我不知道这里发生了什么。任何人都可以对此有所了解吗?
答案 0 :(得分:2)
如果正在使用的类型是在choicepointClue.dll中定义的,则它需要存在于远程服务器的客户端和服务器端。
客户端需要知道正在构建的内容的类型信息,以便使用它。这并不意味着它在客户端实例化 - 但为了知道如何使用对象(甚至是远程),需要在两端知道基本接口。