找不到类型或命名空间名称“IPAddress”

时间:2015-02-25 18:32:49

标签: c# .net xamarin cross-platform xamarin.forms

我正在编写一个Xamarin.Forms应用程序并在我的Visual Studio 2013中的主要解决方案中添加了一个PCL项目。我在使用几个标准的.net类时遇到了问题。这是一个清单:

System.Net.IPAddress
System.Net.IPEndPoint
System.Net.WebClient
System.Net.Sockets.UdpClient
System.Timers.Timer
System.Timers.ElapsedEventArgs
System.Net.NetworkInformation.UnicastIPAddressInformation

我的问题是:如何找出上述哪些内容与Xamarin.Forms应用程序兼容,以及如何让它们在我的项目/解决方案中工作?

我已经联系了Xamarin的支持,但获得了模糊的帮助,而不是具体细节......

是否有人有一个很好的策略来确定支持哪些类以及需要什么.dll以便将它们与Xamarin.Forms项目一起使用?

非常感谢你的帮助。

PS:我已获得以下网站供参考,但它们似乎没有任何简明信息:

What is supported

NuGet package info

3 个答案:

答案 0 :(得分:3)

听起来你不明白便携式类库实际上是什么。创建PCL时,可供您使用的.Net Framework类的子集取决于您选择的配置文件。配置文件是您的PCL可以支持的平台。在Xamarin中,默认配置文件是配置文件78.配置文件78支持.NET 4.5,WP8,Win8,WP Silverlight 8,Win Store 8,Xamarin.Android,Xamarin.iOS。因此,可用的类是与平台无关的类,它们在概要文件78中的所有平台上运行。

示例:查看System.Net.IPAddress的实现。该实现使用Sockets。在进一步检查此实现后,您可以看到System.Net.Sockets只不过是围绕WinSock API的.NET包装器。 WinSock API是Windows专用的DLL,专用于Windows操作系列(ws2_32.dll)。因此,您现在可以看到System.Net.IPAddress是Windows Socks的高级抽象(为Windows平台构建)。由于Android和iOS等都不存在ws2_32.dll,因此无法使用此API,因为Profile 78指定我们需要支持其他非Windows平台。

另一个例子是System.Drawing.Bitmap。这只是围绕GDI+的.NET包装器,它基于Win32 API。当然,Win32在非Windows平台(甚至Windows Phone)上不可用,这就是为什么你不会在PCL中看到它。

现在有了这样说,你可能会认为PCL是限制性的,但如果你认为about them the right way,你可以创建一个好的PCL库。您还可以使用依赖注入和Bait and Switch等模式。

简而言之,不要指望微软“增加对所有基类库的支持”,因为这不是PCL的所在。

答案 1 :(得分:1)

您仍然可以通过使用DependancyService在Xamarin.Forms PCL中使用System.Net.IpAddress。在PCL中创建一个接口,并在其中声明方法“ GetIpAddress”。然后,在android / iOS项目中,您可以在特定于平台的项目中实现该接口,并轻松访问System.Net.IpAddress.。此后,从PCL项目中调用DependancyService以获得所需的IPAddress结果。

干杯!!!

答案 2 :(得分:0)

在收到Xamarin支持部门的一些额外电子邮件以及对我的其他帖子的评论之后,似乎MS在通过PCL支持所有课程方面落后了。有些人得到了支持,但并非所有人都受到了支持。

无论如何,为了使用我现有的代码,我需要把我原本用来创建我的新PCL项目的源.cs文件直接放在.iOS项目和.droid项目中并重新编译方式。

这基本上打败了使用PCL的优势,但确实提供了一种替代方案,允许我不改变地使用我的大部分代码。如果所有的xamarin库都可用作PCL,那就更好了。哦,最终MS将赶上并让他们的所有PCL更新,以便我们可以更频繁地使用我们的自定义PCL,而不必重复代码到处都是。 (维护梦魇)......

无论如何,感谢大家的帮助。

(在技术的最前沿工作有时很痛苦......但这就是我们赚大钱的原因!!!)