c# - 来自 Resource.Designer.cs 的模糊引用智能感知错误

标签 c# xamarin xamarin.android android-resources

我在 Visual Studio 2017 上开发时遇到了一个特殊的错误,我已经可以忽略一段时间了,但现在开始真正错误我。

我将此问题称为错误而不是错误,因为我仍然能够在 Visual Studio 中构建我的项目并将它们无误地部署到我的开发设备或来自构建输出的警告。暂时忽略这似乎没问题,但随着时间的推移,它已成为一个问题,因为我的智能感知将其用红色下划线标记为错误

a

每次我从 Resource 类中引用属性时。正如您可能猜到的那样,我经常引用此类,Visual Studio 编辑器最终会因这些“错误”而变得杂乱无章,这 (a) 阻碍了我在代码中找到实际错误的能力,并且 (b) 无缘无故地激怒了我……

“错误”调查

  • 如最后一张图片所示,智能感知正在为 Resource 类中的每个属性提取一个“不明确的引用”。当我检查我的 Resource.Designer.cs 文件时,我只看到一个引用,但出现第二个错误

b .

  • 它现在告诉我“已声明同名成员”。这让我相信还有第二个 Resource.Designer.cs 文件,但我的解决方案资源管理器和 Windows 资源管理器都只显示一个。

c

尝试过的解决方案

  • 将命名空间从 InventoryApp(文件的默认命名空间)更改为 InventoryApp.Resources。这让我摆脱了可怕的错误,但是,在构建项目时,它将文件中的 namespace 恢复为默认值,并且错误会弹出。更了解我的人也告诉我这是一个很大的禁忌。
  • 删除了 Resource.Designer.cs 文件,从项目中删除了“obj”和“bin”文件夹,清理并重建了解决方案,然后添加了新的 Resource.Designer。 cs 文件回到我的解决方案。这对解决问题毫无帮助。
  • 从头开始创建了一个全新的项目。即使在从 Visual Studio 模板创建空白 Android 应用程序后,错误仍然存​​在。这就引出了一个问题:这是我安装 Xamarin.Android 的问题吗?

旁注

  • Resource.Designer.cs 文件的构建操作设置为“编译”
  • .csproj 配置文件包含标签:

    <AndroidResgenFile>Resources\Resource.Designer.cs</AndroidResgenFile>
    <AndroidResgenClass>Resource</AndroidResgenClass>
    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
    <AndroidUseLatestPlatformSdk>false</AndroidUseLatestPlatformSdk>
    <TargetFrameworkVersion>v7.1</TargetFrameworkVersion>
    <AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
    <MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>
    <MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>
    

最佳答案

6/6/2018 Update

If you have ReSharper, you most likely will be able to disregard my per-project solution described below and, instead, simply install the latest version (currently ReSharper 2018.1.2). Apparently, the underlying issue was caused by a bug in a previous version. Upgrading resolved the issue for me.

See youtrack.jetbrains.com/issue/RSRP-469636 for more information.

Thanks to @davidbauduin over at Xamarin Forums for this information.


我相信我已经弄清楚了潜在的问题并有了可行的解决方案。

解决方案

将以下内容添加到 <PropertyGroup> .csproj 文件中的部分:

<AndroidUseManagedDesignTimeResourceGenerator>False</AndroidUseManagedDesignTimeResourceGenerator>

原因

虽然以前版本的 Visual Studio 默认关闭该功能,但最新的 VS2017 更新 (15.7.3) 已将其打开。该功能会生成第二个 Resources.Designer.cs 文件,从而导致引用不明确的问题。

您可以通过将鼠标悬停在出现 Intellisense 错误的资源常量上进行验证,单击鼠标右键,选择“转到定义”,然后选择第一项,这会将您转到 Resource.Designer.cs 文件。如果你重复,但选择第二个,你将被带到另一个 Resource.Designer.cs 文件。其中之一指向 obj\Debug\designtime\Resource.Designer.cs 文件。通过如上所述将该功能设置为 False,将不会生成 obj\Debug\designtime 路径中的 Resource.Designer.cs 文件。

关于 AndroidUseManagedDesignTimeResourceGenerator 功能的信息:

https://developer.xamarin.com/releases/android/xamarin.android_8/xamarin.android_8.1/#design-time-builds-managed-resource-parser

https://github.com/dotnet/project-system/blob/master/docs/design-time-builds.md#design-time-builds

希望这对您有所帮助!

关于c# - 来自 Resource.Designer.cs 的模糊引用智能感知错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50593906/

相关文章:

c# - 我做对了吗? (数组、枚举、结构)

c# - ThreadPoolConsumerPool 中的 MassTransit NullReferenceException

c# - ASP.NET 应用程序中数据的动态表示

c# - 如何使用 Skia 或 SkiaSharp 绘制富文本

android - 像 iphone 的通用图像加载器这样的库-(在 monotouch 和 monodroid 中使用 android 库)

c# - 适用于 Android 的 ExpandableListView Mono

c# - 如何测量给定字体/大小的数字的像素宽度 (C#)

animation - 如何在 SkiaSharp 中获得流畅的动画

Xamarin.Forms iOS 项目已构建,但由于警告而不会存档

xamarin - 如何更改Android(Xamarin Forms)上按钮的文本对齐方式?