0

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

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

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

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

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

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

+++++++++++++++++++

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

实际上,我想GetHostNames()NetworkInformation打电话

现在,由于应用程序针对 WP7.1 和 WP8,我似乎无法使用

using Windows.Networking.Connectivity;

因为没有引用相应的程序集(我认为)。我试过了,但找不到这个名称空间的一部分是哪个程序集。

如果没有对命名空间的有效引用,我的猜测是甚至反射都行不通。

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

4

1 回答 1

3

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

打开您的应用程序.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

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

<ItemGroup>
    <Reference Include="Microsoft.Advertising.Mobile, Version=6.2.959.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" Condition=" $(TargetFrameworkVersion) == 'v8.0' " />
</ItemGroup>
于 2013-10-26T11:10:52.303 回答