如何访问其他程序集中被define预处理器指令包裹的代码?
问题原因&解决方案
1. 跨程序集条件编译包裹类无法调用
这属于操作疏漏,不是框架问题:
C#的预处理指令是每个程序集独立编译时生效的,你当前主程序集开启了WINDOWS_UWP编译符号,仅能让主程序集内的#if WINDOWS_UWP包裹代码参与编译;如果被引用的OtherAssembly编译时没有同步启用WINDOWS_UWP符号,那UWPClassOtherAssembly根本不会被编译进OtherAssembly的输出文件里,自然会提示类不存在。
修复方案:
保证所有用到WINDOWS_UWP条件编译的程序集,编译时的符号配置同步:
- 如果你是Unity环境,直接在Player Settings的对应平台配置里添加
WINDOWS_UWP全局编译符号,所有未单独配置自定义符号的程序集都会继承这个配置 - 如果需要仅给指定程序集配置,可在对应程序集定义的
versionDefines字段里添加规则,当匹配到指定条件时自动启用WINDOWS_UWP符号
2. 平台限定程序集代码无法寻址
这是预期行为:
你配置的UWPAssembly的includePlatforms仅设为WSA,这个配置的作用就是:只有当前编译目标为WSA平台时,这个程序集才会被加入到引用链中参与编译。如果你当前是在非WSA的编辑器环境、或是编译目标为其他平台时,这个程序集本身不会被加载,哪怕你主程序集开了WINDOWS_UWP符号,也找不到里面的类。
可选调整方案:
如果需要在编辑器环境下也能调试UWP相关代码,可以把Editor也加入到UWPAssembly的includePlatforms列表中,同时给所有平台相关调用套上对应的预处理指令防止非WSA平台运行报错。
内容的提问来源于stack exchange,提问作者develmusa
相关产品推荐
相关产品推荐

