在.NET桌面应用程序中引用WinRT/UWP库,同时保持对Windows 7的支持
问题描述:
我想在桌面应用程序中引用“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程序集的情况下获取此信息的建议。
答
我找到了一种使用反射和调用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
}