我测试了一个UWP应用程序,我想使用代理来使用WCF服务。我有一个代理,它是.net 4.6的库,但我无法在通用应用程序的项目中添加此项目作为参考。这是正常的,因为它是.net 4.6的库。
所以我正在尝试创建一个可移植的库,我有两个选项来创建一个可移植的库。这个选项让我说出我可以使用哪些目标。我选择.net 4.6和windows universal 10.0。问题是我无法添加对我需要使用代理的System.ServiceModel
的引用。
另一个选项是用于Windows通用的可移植库。在这种情况下,我无法选择目标项目,它有意义,因为它仅适用于通用应用程序。在这种情况下,我可以添加对System.ServiceModel
。
我知道在一个可移植的库中我只能使用目标项目的库更具限制性,在这种情况下我猜这是windows通用的,没有.net 4.6。但是,为什么我可以在便携式库中为通用应用程序添加引用,而不是在我使用的可移植库中添加.net?
我希望有一个通用的可移植库,以便能够在WPF应用程序和通用Windows应用程序中使用代理。
感谢。
答案 0 :(得分:1)
不幸的是,不同的目标框架之间没有简单的子集关系;即在您的情况下,UWP不是.NET 4.6的子集,因此当您创建一个同时针对两者的可移植类库时,您不仅可以使用较小的框架中的所有API。
在处理客户端System.ServiceModel
代码时,情况更加令人困惑:尽管两个目标平台都包含对WCF代理的基本支持,但API的不同之处在于,创建PCL时没有可用的便携式等价物。这就是您所看到的行为的原因:您可以在.NET 4.6类库和UWP类库中创建代理,但是您无法在针对它们的可移植类库中创建代理。您需要创建2个独立的库。
如果你只是从平台特定的WPF调用UWP代码代理,那么这不应该是一个问题,但我怀疑你想从业务逻辑代码中调用它们,你会喜欢在便携式类库中实现。
您可以按如下方式实现: