C# .net远程处理问题

C# .net远程处理问题,c#,.net-4.0,.net-2.0,remoting,C#,.net 4.0,.net 2.0,Remoting,我有一个.NET2.0类库,它使用.NETRemoting与.NET2.0服务器应用程序通信 我现在正在创建客户端的WPF版本,并包含.NET2.0通信dll 远程处理不再工作(异常无法加载文件或程序集'System.Data,Version=4.0.0.0,) 失败的行将数据表作为参数传递给远程方法 问题是如果使用.GetType().Assembly,它确实表明它使用的是服务器显然不知道的.net 4.0 System.Data程序集 有没有办法强制库使用.net 2.0库进行序列化?看起来

我有一个.NET2.0类库,它使用.NETRemoting与.NET2.0服务器应用程序通信

我现在正在创建客户端的WPF版本,并包含.NET2.0通信dll

远程处理不再工作(异常无法加载文件或程序集'System.Data,Version=4.0.0.0,)

失败的行将数据表作为参数传递给远程方法

问题是如果使用.GetType().Assembly,它确实表明它使用的是服务器显然不知道的.net 4.0 System.Data程序集


有没有办法强制库使用.net 2.0库进行序列化?

看起来您的应用程序是作为Framework 4应用程序创建的


检查项目的设置。

看起来您的应用程序是作为Framework 4应用程序创建的


检查项目的设置。

这取决于您针对的配置类型,即使您以混合方式运行2.0和4.0,运行时也应注意这一点

这里似乎涉及很多组件,您确定它们是使用正确的框架构建的吗

如果在一台计算机上构建WCF客户端,并且目标框架与运行该客户端的计算机上安装的框架不同,则可能会导致问题

我想更多地了解您的设置,特别是您有哪些项目以及这些项目的目标是什么


同时,您可以尝试挂接AppDomain.CurrentDomain.AssemblyResolve事件,并尝试自己定位程序集,它可以工作,但也可以帮助识别代码中出现此问题的位置。

这取决于您针对的配置类型,即使您以混合方式运行2.0和4.0,运行时也应注意这一点

这里似乎涉及很多组件,您确定它们是使用正确的框架构建的吗

如果在一台计算机上构建WCF客户端,并且目标框架与运行该客户端的计算机上安装的框架不同,则可能会导致问题

我想更多地了解您的设置,特别是您有哪些项目以及这些项目的目标是什么


同时,您可以尝试挂接
AppDomain.CurrentDomain.AssemblyResolve
事件,并尝试自己定位程序集,它可以工作,但也有助于识别代码中出现此问题的位置。

尝试将引用的
系统.数据
程序集更改为2.0版。尝试将引用的
系统.数据
程序集更改为2.0版。也许您可以提供一些有关“目标框架”的详细信息设置?应用程序的目标确实是.net 4.0,但序列化发生在.net 2.0中的库。我是否完全误解了目标框架的意义?也许你可以提供一些关于“目标框架”设置的详细信息?应用程序确实是以.net 4.0为目标的,但是序列化发生在.net 2.0中的库。我是否完全误解了目标框架的意义?事实上,在一个小项目中进行演示非常容易。创建一个新的.NET2.0类库,在默认Class1的构造函数中添加以下行:test=newDataTable();string assembly=test.GetType().assembly.FullName;现在创建一个.NET4.0应用程序并链接到库,实例化Class1中程序集字符串上的类和断点。对我来说,至少它说的是.NET4.0,尽管该库的目标是2.0。这就是并行托管的工作方式。如果需要强制运行时使用特定版本,请将
添加到
.config
文件中。但是,这将导致4.0组件完全无法加载。请看一看具体情况。有许多不同的配置可能适用于您的情况。基本上,我假设.net远程处理使用二进制格式化程序进行对象序列化,并且消息中包含类型信息。这意味着,如果您有一个服务器应用程序和一个使用远程处理与之通信的库,而这些都是用.net 2.0编写的,那么您将无法在.net 4.0应用程序中使用该库。您知道,这只是一个想法,但如果您自己解决了这些类型呢?AppDomain有一个EventTypeResolve(),您可以使用它重定向序列化以使用(或查找)正确的类型信息。如果您只需查找
4.0.0.0
并将其替换为
2.0.0.0
,会发生什么情况?实际上,在一个小项目中很容易演示。创建一个新的.NET2.0类库,在默认Class1的构造函数中添加以下行:test=newDataTable();string assembly=test.GetType().assembly.FullName;现在创建一个.NET4.0应用程序并链接到库,实例化Class1中程序集字符串上的类和断点。对我来说,至少它说的是.NET4.0,尽管该库的目标是2.0。这就是并行托管的工作方式。如果需要强制运行时使用特定版本,请将
添加到
.config
文件中。但是,这将导致4.0组件完全无法加载。请看一看具体情况。有许多不同的配置可能适用于您的情况。基本上,我假设.net远程处理使用二进制格式化程序进行对象序列化,并且消息中包含类型信息。这意味着,如果您有一个服务器应用程序和一个使用远程处理与之通信的库,而这些都是用.net 2.0编写的,那么您将无法在.net 4.0应用程序中使用该库。您知道,这只是一个想法,但如果您自己解决了这些类型呢?AppDomain有一个EventTypeResolve(),您可以使用它重定向序列化以使用(或查找)正确的类型信息。如果只查找并替换
4.0,会发生什么。