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

时间:2013-10-26 09:19:48

标签: c# windows-phone-8 windows-phone

我想调用的方法调用仅适用于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上执行此类操作吗?

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

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

实际上,我想从NetworkInformation

致电GetHostNames()

既然应用程序针对WP7.1和WP8,我似乎无法使用

引用命名空间

using Windows.Networking.Connectivity;

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

如果没有对命名空间的工作引用,我的猜测甚至反映都不会起作用。

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

1 个答案:

答案 0 :(得分: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特定代码包装在preprocessor directive中,例如:

#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>