Неоднозначная ошибка ссылки intellisense из Resource.Designer.cs

Я сталкиваюсь с особой ошибкой при разработке на Visual Studio 2017, которую я мог игнорировать на некоторое время, но теперь начинает действительно меня пугать.

Я рассматриваю эту проблему как ошибку, а не ошибку, потому что я все еще могу создавать свои проекты в Visual Studio и развертывать их на своем устройстве разработки без ошибок или предупреждений из вывода сборки. Может показаться, что это можно игнорировать, но со временем это стало проблемой, потому что мой intellisense подчеркивает ее красным цветом как ошибку

a

каждый раз, когда я ссылаюсь на атрибуты из класса Resource. Как вы могли догадаться, я отношусь к этому классу много, и редактор Visual Studio в конечном итоге становится загроможденным этими "ошибками", которые (а) мешают моей способности находить фактические ошибки в моем коде и (б) раздражают меня вне всяких причин...

"Ошибка" расследования

  • Как показано на последнем изображении, intellisense собирает "Неоднозначную ссылку" на каждый атрибут класса Resource. Когда я проверяю файл Resource.Designer.cs, я вижу только одну ссылку, но получаю вторую ошибку

b.

  • Теперь мне говорят, что "Участник с тем же именем уже объявлен". Это заставило меня поверить, что есть второй файл Resource.Designer.cs, но мой обозреватель решений и обозреватель Windows показывают только один.

c

Попытки решения

  • Изменено пространство имен из InventoryApp (пространство имен по умолчанию для файла) в InventoryApp.Resources. Это избавит меня от ужасных ошибок, но, создав проект, он вернет пространство имен в файл обратно к нему по умолчанию, и ошибки появятся. Мне также сказал кто-то, кто знает лучше, что это большой нет-нет.
  • Удалил файл Resource.Designer.cs, удалил папки "obj" и "bin" из проекта, очистил и перестроил решение, а затем добавил новый файл Resource.Designer.cs обратно в мое решение. Это не помогло решить проблему.
  • Создал совершенно новый проект с нуля. Даже после создания Blank Android App из шаблонов Visual Studio ошибка сохраняется. Это вызывает вопрос: это проблема с моей установкой 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

6/6/2018 Обновление

Если у вас есть ReSharper, вы, скорее всего, сможете игнорировать мое решение для каждого проекта, описанное ниже, и вместо этого просто установите последнюю версию (в настоящее время ReSharper 2018.1.2). По-видимому, основная проблема была вызвана ошибкой в предыдущей версии. Модернизация решила проблему для меня.

Дополнительную информацию см. на странице youtrack.jetbrains.com/issue/RSRP-469636.

Спасибо @davidbauduin на форумах Xamarin за эту информацию.


Я считаю, что я понял основную проблему и имею жизнеспособное решение.

Решение

Добавьте следующий элемент в раздел <PropertyGroup> в файле.csproj:

<AndroidUseManagedDesignTimeResourceGenerator>False</AndroidUseManagedDesignTimeResourceGenerator>

причина

Хотя предыдущие версии Visual Studio отключили эту функцию по умолчанию, последнее обновление VS2017 (15.7.3) включено. Эта функция генерирует второй файл Resources.Designer.cs, что приводит к неоднозначной проблеме ссылок.

Вы можете проверить, зависая по константе ресурса с ошибкой Intellisense, щелкая правой кнопкой мыши, выбрав "Перейти к определению" и выбрав 1-й элемент, который приведет вас к файлу Resource.Designer.cs. Если вы повторите, но выберите второй, вы попадете в другой файл Resource.Designer.cs. Один из них указывает на файл obj\Debug\designtime\Resource.Designer.cs. Установив эту функцию в False, как описано выше, файл Resource.Designer.cs в пути obj\Debug\designtime не будет сгенерирован.

Информация о функции 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

Надеюсь это поможет!