条件编译似乎在 Xamarin Studio 中不起作用
Posted
技术标签:
【中文标题】条件编译似乎在 Xamarin Studio 中不起作用【英文标题】:Conditional Compilation seems to be not working in Xamarin Studio 【发布时间】:2017-04-26 15:22:02 【问题描述】:我创建了一个 Xamarin Forms 应用程序。 在一个带有名为“MyLabel”的标签的新页面内。 在我的页面后面的代码中,我有
private void SetUpUI()
#if __ios__
this.MyLabel.BackgroundColor = Color.Navy;
#endif
在我的 iOS 项目选项中,我可以在“编译器”选项卡中看到符号 __IOS__
。 (请看截图)
当我在 iOS 中运行时,它不会使标签变为蓝色:
但如果我删除 #if __IOS__
块,它会使标签变为蓝色:
所以看来条件编译不起作用。 我在 Mac 上。所以无法在 Visual Studio 上进行测试。 坚持了很长时间,但无法弄清楚我错过了什么。
【问题讨论】:
【参考方案1】:SushiHangover 的答案是正确的:您的 PCL 项目 不会有平台的编译器定义。
但是,自 Xamarin Forms 2.3.4 发布以来,他提供的解决方案已经过时。 Device.OnPlatform 已按照this discussion 中的讨论进行了重新设计,并在this Pull Request 中实现。
在 Xamarin Forms 2.3.4 及更高版本中执行此操作的正确方法是使用 Device.RuntimePlatform
。使用开关或条件来满足您的需求,如下所示:
if(Device.RuntimePlatform == Device.iOS)
// iOS
else if(Device.RuntimePlatform == Device.android)
// Android
如果您要使用共享项目而不是 PCL,则可以按照您的要求进行操作。因为当您使用共享项目时,您可以访问平台项目的编译器指令。
【讨论】:
【参考方案2】:您在 PCL 项目 中使用了不包含那些编译器定义的条件,因此您的条件代码变灰了。
在您的 PCL 项目中,您可以使用 Device.OnPlatform
执行基于平台的处理:
Device.OnPlatform (iOS: () => this.MyLabel.BackgroundColor = Color.Navy; );
回复:https://developer.xamarin.com/api/member/Xamarin.Forms.Device.OnPlatform/
【讨论】:
如果您使用的是之前 v2.3.4 版本的 Xamarin Forms 版本,这是要走的路。否则,请使用我在回答中所述的Device.RuntimePlatform
。以上是关于条件编译似乎在 Xamarin Studio 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin Studio 是不是应该在为调试目标编译时生成 APK?
在Xamarin iOS的Visual Studio App Center中构建失败:只有在使用/ unsafe进行编译时才会出现不安全的代码
从 Visual Studio 使用 Xamarin 创建 Mac 应用
在 Visual Studio 上运行 Xamarin Forms iOS 时出现 GetBuiltProjectOutputRecursive 错误