【问题标题】:Uno-Platform: Cross Platform Library, #if conditional for WASM?Uno-Platform:跨平台库,#if 有条件的 WASM?
【发布时间】:2022-02-07 03:16:15
【问题描述】:

在 4.0 Uno-Platform 之前的版本中,我能够在跨平台类库中为 WebAssembly 特定代码使用 #if __WASM__ 编译器指令。这对于使用特定于 WASM 的 SetHtmlAttribute 方法创建特定于 WASM 的小部件非常有用。

但是,在版本 4.0 Uno-Platform 中,我的代码没有构建,因为编译器没有找到 __WASM__ 常量。我犹豫将其手动添加到库 *.csproj 文件中...

<DefineConstants Condition="$(TargetFramework.StartsWith('netstandard'))">__WASM__;$(DefineConstants);</DefineConstants>

...因为如果目标是 WPF,我担心它会构建。那么,有没有更好的方法呢?

【问题讨论】:

    标签: uno-platform


    【解决方案1】:

    虽然您的方法涵盖了给定 API 在所有 Uno 目标上都可用的场景,但不幸的是,如果它确实是 WASM 或 Skia 特定的,它将无法工作。对于这些情况,尽管我们有另一种类型的库 - cross-runtime library(请参阅docs)。目前此类库只能通过dotnet命令行工具创建:

    dotnet new unolib-crossruntime -o MyCrossRuntimeLibrary
    

    默认情况下,它会生成以下解决方案布局:

    两个项目都指向相同的源代码文件,但是“.Wasm”是专门引用 WebAssembly 运行时的,并且会正确地遵守 #if __WASM__ 声明。同样,您可以为“.Skia”创建另一个项目以具有 Skia 特定的声明。

    【讨论】:

    • 这正是我想要的答案!谢谢,马丁。
    • 我相信这个应该被标记为接受的答案:)
    【解决方案2】:

    哇!我不知道为什么我以前没有注意到这一点!看起来SetHtmlAttribute 在所有 Uno 目标平台上都实现了!因此,我可以使用 #if !WINDOWS_UWP 并实现我的 WASM 代码,而不是使用 #if __WASM__ 编译器指令,因为我知道它会在其他 Uno 目标平台上被忽略。

    非常聪明,Uno 团队!

    【讨论】:

      猜你喜欢
      • 2021-01-31
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多