找不到类型或命名空间名称 'IPAddress'
The type or namespace name 'IPAddress' could not be found
我正在编写一个 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 应用程序兼容,以及如何让它们在我的 project/solution 中工作?
我已经联系了 Xamarin 支持,但得到的帮助含糊不清,没有具体说明...
是否有人有好的策略来弄清楚 类 受支持的内容以及需要哪些 .dll 才能将它们用于 Xamarin.Forms 项目?
非常感谢您的帮助。
PS: 给了我以下网站供参考,但好像没有简明的信息:
在收到来自 Xamarin 支持的一些额外电子邮件以及对我的额外帖子的评论后,MS 似乎在通过 PCL 支持他们的所有 类 方面相当落后。有些是受支持的,但并非全部支持。
无论如何,为了使用我现有的代码,我需要将原本用于创建新 PCL 项目的源 .cs 文件直接放入 .iOS项目和 .droid 项目并以这种方式重新编译。
这基本上抵消了使用 PCL 的优势,但确实提供了一种替代方案,使我可以不加改动地使用大部分代码。如果所有 xamarin 库都以 PCLs 的形式提供,那就更好了。哦,好吧,最终 MS 会赶上并更新他们所有的 PCLs,以便我们可以使用我们的自定义PCL 更频繁,而不必到处重复代码。 (维护噩梦)...
无论如何,感谢大家的帮助。
(在最前沿的技术上工作有时会很痛苦......但这就是我们赚大钱的原因!!!)
听起来您似乎不了解便携式 Class 库实际上是什么。创建 PCL 时,可供您使用的 .Net Framework 类 子集取决于您选择的配置文件。配置文件是您的 PCL 可以支持的平台。在 Xamarin 中,默认配置文件是 Profile 78。Profile 78 支持 .NET 4.5、WP8、Win8、WP Silverlight 8、Win Store 8,Xamarin.Android,Xamarin.iOS。因此,您可以使用的 类 是独立于平台的 类,即配置文件 78 中所有平台上的 运行。
示例:看一下 System.Net.IPAddress. The implementation makes use of Sockets. Upon further inspection of this implementation, you can see that that System.Net.Sockets
is nothing more than a .NET wrapper around the WinSock API 的实现。 WinSock API 是 Windows 专用于 Windows 操作系统系列 (ws2_32.dll) 的 DLL。因此,您现在可以看到 System.Net.IPAddress 是 Windows Socks(为 Windows 平台构建)的高级抽象。由于 ws2_32.dll 不存在于 Android、iOS 等中,因此您无法使用此 API,因为配置文件 78 指定我们需要支持其他非-windows 平台。
另一个例子是System.Drawing.Bitmap。那只是 GDI+ 的 .NET 包装器,它基于 Win32 API。当然,Win32 在非 windows 平台(甚至 Windows Phone)上不可用,这就是为什么您不会在 PCL 中看到它的原因。
话虽如此,您可能认为 PCL 是限制性的,但如果您认为 about them the right way. You can also use patterns like Dependency Injection and Bait and Switch.
,则可以创建一个好的 PCL 库
所以简而言之,不要指望微软 "adding support for all the base class libraries" 因为那不是 PCL 的意思。
您仍然可以使用 DependancyService 在 Xamarin.Forms PCL 中使用 System.Net.IpAddress
。在 PCL 中创建一个接口并在其中声明一个方法 "GetIpAddress" 。然后,在 android /iOS 项目中,您可以在特定于平台的项目中实现该接口并轻松访问 System.Net.IpAddress.
之后,从 PCL 项目调用 DependancyService 以获得结果是您想要的 IP 地址。
干杯!!!
我正在编写一个 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 应用程序兼容,以及如何让它们在我的 project/solution 中工作?
我已经联系了 Xamarin 支持,但得到的帮助含糊不清,没有具体说明...
是否有人有好的策略来弄清楚 类 受支持的内容以及需要哪些 .dll 才能将它们用于 Xamarin.Forms 项目?
非常感谢您的帮助。
PS: 给了我以下网站供参考,但好像没有简明的信息:
在收到来自 Xamarin 支持的一些额外电子邮件以及对我的额外帖子的评论后,MS 似乎在通过 PCL 支持他们的所有 类 方面相当落后。有些是受支持的,但并非全部支持。
无论如何,为了使用我现有的代码,我需要将原本用于创建新 PCL 项目的源 .cs 文件直接放入 .iOS项目和 .droid 项目并以这种方式重新编译。
这基本上抵消了使用 PCL 的优势,但确实提供了一种替代方案,使我可以不加改动地使用大部分代码。如果所有 xamarin 库都以 PCLs 的形式提供,那就更好了。哦,好吧,最终 MS 会赶上并更新他们所有的 PCLs,以便我们可以使用我们的自定义PCL 更频繁,而不必到处重复代码。 (维护噩梦)...
无论如何,感谢大家的帮助。
(在最前沿的技术上工作有时会很痛苦......但这就是我们赚大钱的原因!!!)
听起来您似乎不了解便携式 Class 库实际上是什么。创建 PCL 时,可供您使用的 .Net Framework 类 子集取决于您选择的配置文件。配置文件是您的 PCL 可以支持的平台。在 Xamarin 中,默认配置文件是 Profile 78。Profile 78 支持 .NET 4.5、WP8、Win8、WP Silverlight 8、Win Store 8,Xamarin.Android,Xamarin.iOS。因此,您可以使用的 类 是独立于平台的 类,即配置文件 78 中所有平台上的 运行。
示例:看一下 System.Net.IPAddress. The implementation makes use of Sockets. Upon further inspection of this implementation, you can see that that System.Net.Sockets
is nothing more than a .NET wrapper around the WinSock API 的实现。 WinSock API 是 Windows 专用于 Windows 操作系统系列 (ws2_32.dll) 的 DLL。因此,您现在可以看到 System.Net.IPAddress 是 Windows Socks(为 Windows 平台构建)的高级抽象。由于 ws2_32.dll 不存在于 Android、iOS 等中,因此您无法使用此 API,因为配置文件 78 指定我们需要支持其他非-windows 平台。
另一个例子是System.Drawing.Bitmap。那只是 GDI+ 的 .NET 包装器,它基于 Win32 API。当然,Win32 在非 windows 平台(甚至 Windows Phone)上不可用,这就是为什么您不会在 PCL 中看到它的原因。
话虽如此,您可能认为 PCL 是限制性的,但如果您认为 about them the right way. You can also use patterns like Dependency Injection and Bait and Switch.
,则可以创建一个好的 PCL 库所以简而言之,不要指望微软 "adding support for all the base class libraries" 因为那不是 PCL 的意思。
您仍然可以使用 DependancyService 在 Xamarin.Forms PCL 中使用 System.Net.IpAddress
。在 PCL 中创建一个接口并在其中声明一个方法 "GetIpAddress" 。然后,在 android /iOS 项目中,您可以在特定于平台的项目中实现该接口并轻松访问 System.Net.IpAddress.
之后,从 PCL 项目调用 DependancyService 以获得结果是您想要的 IP 地址。
干杯!!!