【问题标题】:Maui class library can't compile Android (No Android nameapace)Maui 类库无法编译 Android(没有 Android 命名空间)
【发布时间】:2022-07-26 05:10:08
【问题描述】:

我正在尝试创建一个具有平台相关部分的 Maui 类库。 在 Android 的类库平台部分中,我添加了 Android 代码,但是当我编译时它告诉我它找不到 Android 命名空间。我已经根据编译 Android 的主程序检查了 Nuget 包,并且相同。我已经卸载了主项目和类库,并相互检查了项目代码,几乎相同。我能发现编译 Android 的主项目之间的唯一区别是类库有一个额外的 net6.0 依赖项。

【问题讨论】:

  • 所以您比较了.csprojs 中的内容?如果它们相同,那么以下内容应该是一致的 - 但无论如何我都会提到:解决方案资源管理器/yourproject/properties/目标框架,列表是否包括net6.0-android? /构建/常规/条件编译符号显示Debug & net6.0-android的条目?
  • 是的。即使作为独立解决方案(不是主程序的一部分),我也尝试多次创建类库,并且我一直得到相同的结果。我只是不会接受 Xamarin Android 代码。一直告诉我没有 Android 命名空间。
  • 我发现在编译器指令中使用语句和特定于平台的代码包装解决了这个问题:#if ANDROID\n using Android.Content;\n using MobileApp.Platforms.Android;\n #endif

标签: class-library maui


【解决方案1】:

我在 VS 2022 预览版 3 中创建了一个“.NET MAUI 类库(预览版)”。确实,有些地方出了问题——尤其是 Intellisense。我没有找到抑制某些 Intellisense 错误的方法,但我确实成功地构建了它。

注意:我确认大多数问题不会影响构建项目。确实,问题可能仅出在 Intellisense 上;我没有严格确定 Build 是否总是有效。

1) 可选:.csproj 中,从<TargetFrameworks> 的开头删除.net6.0;。但不要删除,如果您要创建的库不包含特定于平台的代码。
解释:这只影响智能感知;无需执行此操作即可构建。
通常这在 .net6 类库中是需要的,但在 VS Intellisense 正确处理 Maui 类库及其特定于平台的代码之前,这往往会导致额外的 Intellisense 投诉。如果您对所有特定于平台的文件执行 (4),您可能可以保留 .net6.0;,而不会出现额外的 Intellisense 错误。

2) 在任何源文件上方,都有一个下拉菜单,上面写着YourLibName (net6.0-xxx)。处理 Android 代码时,请选择 YourLibName (net6.0-android)
解释:这只影响智能感知;无需执行此操作即可构建。

3) 在您的代码中,使用global::Android 而不是Android
解释:Intellisense 似乎对其所处的上下文感到困惑。global:: 确保它正在寻找“顶级”命名空间。

4) 在类库中,Intellisense 无法识别平台文件夹 - 将所有代码包装在适当的 #if ANDROID#if IOS 等中。
解释:这只影响智能感知;无需执行此操作即可构建。
这消除了在多个平台中定义不同的类的错误;例如class PlatformClass1

5) using Android;using Android.App 等 - 在“构建”时工作(在特定于平台的文件夹中) - 即使 Intellisense 抱怨。

【讨论】:

  • 我最终设法让它编译,不知道如何。我正要放弃,正坐在电脑前,突然 Visual Studio 的错误输出屏幕发生了变化,错误消失了。现在它将编译大约 50% 的时间。当它停止编译时,我关闭 Visual Studio,重新打开它,清理项目,然后重新构建。但这也只有大约 50% 的时间有效。
【解决方案2】:

我也遇到了同样的问题——我决定不相信@ToolmakerSteve 的回答,但恐怕他是对的。特别是他的帖子中关于用

包装所有平台特定内容的#4
#if ANDROID
#endif

还将它添加到引用平台特定命名空间的接口中。

【讨论】:

    猜你喜欢
    • 2021-12-24
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多