0

我想在桌面应用程序中引用“Windows.Networking.Connectivity”类。我基本上有兴趣在我的应用程序中处理计量连接。在.NET桌面应用程序中引用WinRT/UWP库,同时保持对Windows 7的支持

基本上什么,我试图做的是简单的:

var connectionCost = NetworkInformation.GetInternetConnectionProfile().GetConnectionCost(); 
      if (connectionCost.NetworkCostType == NetworkCostType.Unknown 
        || connectionCost.NetworkCostType == NetworkCostType.Unrestricted) 
      { 
       //Connection cost is unknown/unrestricted 
      } 
      else 
      { 
       //Metered Network 
      } 

我知道这一点的唯一方法,允许一个桌面应用程序引用UWP组件是通过手动编辑项目文件并添加以下行的csproj文件:

<TargetPlatformVersion>8.0</TargetPlatformVersion>

应用的代码和“黑客”工作正常,但问题是,这样做会阻止我的应用程序从Windows 7,我需要支持运行。

我在想,如果有引用在桌面应用程序UWP组件,而不必放弃对Windows 7的

而且由于支持暂时我只是想检查,如果连接是计量方式,我很乐意提供有关如何在不引用Windows程序集的情况下获取此信息的建议。

回答

0

我找到了一种使用反射和调用UWP方法而不必指定目标平台的方法。对于我的情况,这是我所做的:

var networkInfoType = Type.GetType("Windows.Networking.Connectivity.NetworkInformation, Windows, ContentType=WindowsRuntime"); 
      var profileType = Type.GetType("Windows.Networking.Connectivity.NetworkInformation, Windows, ContentType=WindowsRuntime"); 
      var profileObj = networkInfoType.GetTypeInfo().GetDeclaredMethod("GetInternetConnectionProfile").Invoke(null, null); 
      dynamic profDyn = profileObj; 
      var costObj = profDyn.GetConnectionCost(); 
      dynamic dynCost = costObj; 

      var costType = (NetworkCostType)dynCost.NetworkCostType; 
      if (costType == NetworkCostType.Unknown 
        || costType == NetworkCostType.Unrestricted) 
      { 
       //Connection cost is unknown/unrestricted 
      } 
      else 
      { 
       //Metered Network 
      } 
相关问题