如何在 Mac 上的 Mono 中获取网络接口列表



在 MonoDevelop 中创建一个针对 OS X 上的 Mono/.NET 4.0 的 Mono 控制台应用程序,以充当 TCP 套接字服务器。

以下代码行失败(您通常会在 Windows 端使用):

var interfaces = NetworkInterface.GetAllNetworkInterfaces();

。带有错误System.DllNotFoundException: iphlpapi.dll

我能说的最好的是,这仅在Windows和Linux上受支持。但是,似乎还有另一种为Mac设计的方法:

System.Net.NetworkInformation.MacOsNetworkInterface.GetAllNetworkInterfaces();

虽然MonoDevelop似乎可以识别这一点,但它无法编译并出现The type or namespace 'MacOsNetworkInterface' does not exist in the namespace 'System.Net.NetworkInformation'.错误。已引用系统和 System.Net。

我错过了什么?

编辑:当我在 MonoDevelopment 中创建一个新的 C# 控制台应用程序时,发现NetworkInterface.GetAllNetworkInterfaces()确实有效,但在现有项目 (NetworkComms.net) 中不起作用 - 它们都是相同的目标,Mono,.NET 4.0 具有相同的System引用和System.Net v4.0.0.0,有什么区别?

如果您需要调用低级OS X API/Frameworks,MonoMac是您的最佳选择。但是,并非所有OS X框架都绑定在MonoMac中。从Apple开发人员文档中,我认为您需要来自SystemConfiguration API的功能,该API目前不受MonoMac的约束。

但是,您始终可以使用 DllImport 自己为缺少的函数创建绑定。我最近用DiskArbitration Framework(也没有绑定)完成了它,你可以使用它作为参考:http://git.gnome.org/browse/banshee/tree/src/Backends/Banshee.Osx/Banshee.Hardware.Osx/LowLevel?id=136fcbcc2e0421aba6be79306dc111fdabb3c749

最新更新