来自 Resource.Designer.cs 的模糊引用智能感知错误
Ambiguous reference intellisense error from Resource.Designer.cs
我 运行 在 Visual Studio 2017 年开发时遇到了一个奇怪的错误,我已经可以忽略一段时间了,但现在开始真正 错误我。
我将这个问题称为 bug 而不是 error 因为我仍然能够在 [=103] 中构建我的项目=] 并将它们部署到我的开发设备上,构建输出没有错误或警告。暂时忽略这似乎没问题,但随着时间的推移,它已成为一个问题,因为我的智能感知将其用红色下划线标记为错误
每次我从 Resource class 引用属性时。正如您可能猜到的那样,我经常引用这个 class 并且 Visual Studio 编辑器最终会被这些 "errors" 弄得乱七八糟,这 (a) 阻碍了我在代码中找到实际错误的能力,并且 (b ) 无缘无故地激怒了我...
"Error"调查
- 如上图所示,智能感知正在为 Resource class。当我检查我的 Resource.Designer.cs 文件时,我只看到一个参考,但出现第二个错误
.
- 现在告诉我那个"Member with the same name is already declared"。这让我相信还有第二个 Resource.Designer.cs 文件,但我的解决方案资源管理器和 windows 资源管理器都只显示一个。
尝试过的解决方案
- 将命名空间从 InventoryApp(文件的默认命名空间)更改为 InventoryApp.Resources。这让我摆脱了可怕的错误,但是,在构建项目时,它将文件中的名称空间恢复为默认值,并且错误会弹出。更了解我的人也告诉我这是一个很大的禁忌。
- 删除了 Resource.Designer.cs 文件,从项目中删除了 "obj" 和 "bin" 文件夹,清理并重建解决方案,然后添加新的 Resource.Designer.cs 文件回到我的解决方案。这对解决问题没有任何帮助。
- 从头开始创建了一个全新的项目。即使在从 Visual Studio 模板创建空白 Android 应用程序后,错误仍然存在。这就引出了一个问题:这是我安装 Xamarin.Android 的问题吗?
旁注
- Resource.Designer.cs 文件的生成操作设置为 "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>
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.
我相信我已经找到了潜在的问题并且有一个可行的解决方案。
解决方案
将以下内容添加到 .csproj 文件的 <PropertyGroup>
部分:
<AndroidUseManagedDesignTimeResourceGenerator>False</AndroidUseManagedDesignTimeResourceGenerator>
原因
虽然以前版本的 Visual Studio 默认关闭该功能,但最新的 VS2017 更新 (15.7.3) 已将其打开。该功能生成第二个 Resources.Designer.cs 文件,导致引用不明确问题。
您可以通过将鼠标悬停在出现 Intellisense 错误的资源常量上进行验证,右键单击,selecting "Go To Definition",然后 selecting 第一项,这会将您带到一个 Resource.Designer.cs 文件。如果您重复,但 select 第二个,您将被带到另一个 Resource.Designer.cs 文件。其中之一指向 obj\Debug\designtime\Resource.Designer.cs 文件。通过如上所述将该功能设置为 False,将不会生成 obj\Debug\designtime 路径中的 Resource.Designer.cs 文件。
关于 AndroidUseManagedDesignTimeResourceGenerator 功能的信息:
https://github.com/dotnet/project-system/blob/master/docs/design-time-builds.md#design-time-builds
希望对您有所帮助!
我 运行 在 Visual Studio 2017 年开发时遇到了一个奇怪的错误,我已经可以忽略一段时间了,但现在开始真正 错误我。
我将这个问题称为 bug 而不是 error 因为我仍然能够在 [=103] 中构建我的项目=] 并将它们部署到我的开发设备上,构建输出没有错误或警告。暂时忽略这似乎没问题,但随着时间的推移,它已成为一个问题,因为我的智能感知将其用红色下划线标记为错误
每次我从 Resource class 引用属性时。正如您可能猜到的那样,我经常引用这个 class 并且 Visual Studio 编辑器最终会被这些 "errors" 弄得乱七八糟,这 (a) 阻碍了我在代码中找到实际错误的能力,并且 (b ) 无缘无故地激怒了我...
"Error"调查
- 如上图所示,智能感知正在为 Resource class。当我检查我的 Resource.Designer.cs 文件时,我只看到一个参考,但出现第二个错误
- 现在告诉我那个"Member with the same name is already declared"。这让我相信还有第二个 Resource.Designer.cs 文件,但我的解决方案资源管理器和 windows 资源管理器都只显示一个。
尝试过的解决方案
- 将命名空间从 InventoryApp(文件的默认命名空间)更改为 InventoryApp.Resources。这让我摆脱了可怕的错误,但是,在构建项目时,它将文件中的名称空间恢复为默认值,并且错误会弹出。更了解我的人也告诉我这是一个很大的禁忌。
- 删除了 Resource.Designer.cs 文件,从项目中删除了 "obj" 和 "bin" 文件夹,清理并重建解决方案,然后添加新的 Resource.Designer.cs 文件回到我的解决方案。这对解决问题没有任何帮助。
- 从头开始创建了一个全新的项目。即使在从 Visual Studio 模板创建空白 Android 应用程序后,错误仍然存在。这就引出了一个问题:这是我安装 Xamarin.Android 的问题吗?
旁注
- Resource.Designer.cs 文件的生成操作设置为 "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>
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.
我相信我已经找到了潜在的问题并且有一个可行的解决方案。
解决方案
将以下内容添加到 .csproj 文件的 <PropertyGroup>
部分:
<AndroidUseManagedDesignTimeResourceGenerator>False</AndroidUseManagedDesignTimeResourceGenerator>
原因
虽然以前版本的 Visual Studio 默认关闭该功能,但最新的 VS2017 更新 (15.7.3) 已将其打开。该功能生成第二个 Resources.Designer.cs 文件,导致引用不明确问题。
您可以通过将鼠标悬停在出现 Intellisense 错误的资源常量上进行验证,右键单击,selecting "Go To Definition",然后 selecting 第一项,这会将您带到一个 Resource.Designer.cs 文件。如果您重复,但 select 第二个,您将被带到另一个 Resource.Designer.cs 文件。其中之一指向 obj\Debug\designtime\Resource.Designer.cs 文件。通过如上所述将该功能设置为 False,将不会生成 obj\Debug\designtime 路径中的 Resource.Designer.cs 文件。
关于 AndroidUseManagedDesignTimeResourceGenerator 功能的信息:
https://github.com/dotnet/project-system/blob/master/docs/design-time-builds.md#design-time-builds
希望对您有所帮助!