来自Resource.Designer.cs

时间:2018-05-29 22:31:42

标签: c# xamarin xamarin.android android-resources

我在Visual Studio 2017上开发时遇到了一个奇怪的错误,我已经能够忽略一段时间,但现在开始真的 bug 我。

我将此问题称为错误而不是错误,因为我仍然可以在Visual Studio中构建我的项目并将它们部署到我的开发设备而不会出现错误或来自构建输出的警告。这似乎可以忽略一点,但随着时间的推移它已成为一个问题,因为我的intellisense用红色强调它作为错误

a

每次我引用资源类的属性。正如你可能猜到的那样,我引用了很多这个类,Visual Studio编辑器最终变得混乱了这些“错误”,它们(a)阻碍了我在代码中发现实际错误的能力,并且(b)让我无法理解......

“错误”调查

  • 如上图所示,intellisense正在为资源类中的每个属性选择“不明确参考”。当我检查 Resource.Designer.cs 文件时,我只看到一个参考,但得到第二个错误

b

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

c

尝试解决方案

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

侧面笔记

  • Resource.Designer.cs 文件的Build Action设置为“Compile”
  • .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>
    

1 个答案:

答案 0 :(得分:32)

  

6/6/2018更新

     

如果你有ReSharper,你很可能会忽略我下面描述的每个项目解决方案,而只需安装最新版本(目前是ReSharper 2018.1.2)。显然,底层问题是由先前版本中的错误引起的。升级为我解决了这个问题。

     

有关详细信息,请参阅youtrack.jetbrains.com/issue/RSRP-469636

     

感谢@davidbauduin在Xamarin论坛上获取此信息。

我相信我已经找到了潜在的问题,并有一个可行的解决方案。

<强>解决方案

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

<AndroidUseManagedDesignTimeResourceGenerator>False</AndroidUseManagedDesignTimeResourceGenerator>

原因

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

您可以通过将智能感知错误悬停在资源常量上进行验证,右键单击,选择“转到定义”,然后选择第一个项目,该项目将转到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

希望这有帮助!