使用studio 2012构建后的任务序列化问题
本文关键字:任务 序列化 问题 studio 2012 构建 使用 | 更新日期: 2023-09-27 17:50:27
安装studio 2012后,构建一个针对框架4.0的应用程序。我得到错误:
Type 'System.Threading.Tasks.Task' cannot be serialized.
Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with ....
我已经使用svcutil重新生成了服务引用。有没有办法指定所有异步的东西都从引用中排除??
据我所知,你不能在。net 4.0上使用基于WCF任务的异步模式(你可以,但你需要安装Visual Studio 2012的Async Targeting Pack),你需要升级到。net 4.5才能让它工作。
我怀疑你在Visual studio 2010上使用了某种扩展(如AsynCTP)。
在这里你可以看到每个框架版本都支持哪些异步模式:
-
同步和异步操作。. NET Framework 4
-
同步和异步操作。. NET Framework 4.5
我不明白为什么,但似乎在一些构建环境中,您需要在svcutil命令行中添加一个开关/syncOnly
,以便在升级到Visual Studio 2012后为您的服务生成接口。奇怪的是,如果我用Visual Studio 2012在我的桌面上本地构建和运行,我将所有的异步方法添加到界面中,一切都运行良好。但是,如果我在单独的构建机器上构建,然后在第三台机器上运行,那么我就会得到您所描述的错误。当我像http://www.aspdotnethelp.com/a/d/type-system-threading-tasks-task1system-string-cannot-be-serialized-error-in-wcf-236.aspx
/syncOnly
添加到命令行时,错误就消失了这将导致不生成Async接口成员。
我也见过包含异步方法会导致不同的错误:
标记为IsOneWay=true的操作不能声明输出参数、引用参数或返回值
我怀疑原因在于使用。net 4.5工具来构建。net 4.0应用程序。由于这些工具是生成代码而不是编译代码,因此它们所针对的。net版本在输出中并不强制执行。然后,当你在一个针对。net 4.0的应用程序中使用。net 4.5的代码时,一些行为就不同步了。