允许根据 Windows Phone 的版本调用方法

本文关键字:版本 调用 方法 Phone 许根 Windows | 更新日期: 2023-09-27 18:37:05

我想调用的方法调用仅适用于Windows Phone 8,不适用于早期版本,但我想继续支持WP8和WP7.1的应用程序。

如果设备没有WP8,我不介意有回退。

是否可以指示应用有条件地调用该方法,并删除编译时错误。

要在 Android 上实现这样的事情(假设支持pre Froyo设备),可以做的是用@TargetApi(Build.VERSION_CODES.FROYO)包装这段代码以避免编译时检查,并在调用所需的方法之前显式检查android版本

if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.ECLAIR_MR1)

可以在Windows Phone上做这样的事情吗?

++++++++++

++++++

更新:尝试使用反射但失败了,所以我正在描述确切的问题。

其实我想从网络信息给GetHostNames()打电话

现在,由于该应用程序面向WP7.1和WP8,我似乎无法引用命名空间

using Windows.Networking.Connectivity;

因为没有引用相应的程序集(我认为)。我试过了,但找不到这个命名空间属于哪个程序集。

如果没有对命名空间的工作引用,我的猜测是即使是反射也不起作用。

如果我犯了一个初学者错误,请原谅我,我是Windows Phone和C#的新手,但喜欢环境,所以来这里寻求一些知识!

允许根据 Windows Phone 的版本调用方法

为了正确支持这两个平台,您应该维护两个相同的项目,引用相同的代码文件,但针对不同的框架版本。执行此操作时,您可以执行以下操作:

打开应用程序.csproj文件,并将 <DefineConstants> 元素更改为以下两行:

<DefineConstants Condition=" $(TargetFrameworkVersion) == 'v7.1' ">DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE;WP7</DefineConstants>
<DefineConstants Condition=" $(TargetFrameworkVersion) == 'v8.0' ">DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE;WP8</DefineConstants>
需要

将其应用于调试和发布配置。

然后将 WP8 特定代码包装在预处理器指令中,例如:

#if WP8
    using Windows.Networking.Connectivity;
#endif

最后,构建条件也可以应用于程序集引用 include 语句,例如:

<ItemGroup>
    <Reference Include="Microsoft.Advertising.Mobile, Version=6.2.959.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" Condition=" $(TargetFrameworkVersion) == 'v8.0' " />
</ItemGroup>