0

Je tente de faire référence aux classes "Windows.Networking.Connectivity" dans mon application de bureau. Je suis essentiellement intéressé par la gestion des connexions avec compteur dans mon application.Référencement de bibliothèques WinRT/UWP dans une application de bureau .NET tout en maintenant la prise en charge de Windows 7

En fait ce que je suis en train de faire est simple:

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

La seule méthode que je connaisse qui permet une application de bureau pour faire référence à des ensembles UWP est en modifiant manuellement le fichier de projet et en ajoutant la ligne suivante à la fichier csproj:

<TargetPlatformVersion>8.0</TargetPlatformVersion>

application du code et « hack » fonctionne très bien, mais le problème est que faire empêchera mon application de fonctionner sur Windows 7 que je dois soutenir.

Je me demandais s'il y a un moyen de faire référence à des ensembles UWP dans une application de bureau sans avoir à déposer le support pour Windows 7.

Et puisque, pour le moment, je veux seulement vérifier si une connexion est mesurée, Je suis ouvert aux suggestions sur la façon d'obtenir cette information sans faire référence aux assemblys Windows.

Répondre

0

J'ai trouvé un moyen d'utiliser la réflexion et d'appeler des méthodes UWP sans avoir à spécifier une plate-forme cible. Pour mon cas, voici ce que j'ai fait:

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 
      }