Раньше я работал над проектом Android / Xamarin для Android 4.4, API Level 19, который содержит действие со следующим кодом:
private void RadioButtonClick(object sender, EventArgs e)
{
RadioButton rb = (RadioButton)sender;
switch (rb.Id)
{
case Resource.Id.radioButton1:
...
В последний раз, когда я смотрел проект пару месяцевРаньше это работало просто отлично.Теперь я хочу продолжить работу над проектом для Android 8.0, API Level 26, но когда я открыл его в Visual Studio 2017, я получил ошибку компилятора (field)int ResourceId.RadioButton1 A constant value is expected
.
Теперь это само по себе не проблема,поскольку я всегда могу использовать if (rb.Id == ...)
вместо switch/case
, но я хотел бы знать, почему внезапно Resource.Id.radioButton1
больше не распознается как константа, даже если она объявлена как таковая в Resource.Designer.cs
:
public const int radioButton1 = 2131165244;
Кто-нибудь еще сталкивался с чем-то подобным?
РЕДАКТИРОВАТЬ: Еще более странным является то, что проект строится без жалоб, но развертывание невозможно из-за указанной ошибки.
РЕДАКТИРОВАТЬ: Кажется, что процесс сборки создает другой файл Resource.Designer.cs
, который помещается в папку obj\Debug\designtime
.Когда файл существует, исходный код действий ссылается на объявления Id
в этом новом файле, а не на исходный Resource.Designer.cs
в папке Resources
.
Однако, все Ids
в новом файле static
, а не const
(что, конечно, является причиной ошибки компилятора, которая вызвала этот вопрос в первую очередь), и более того, все ониустановить на ноль.
Есть ли специалисты по Android / Xamarin, которые могут объяснить, что здесь происходит?Может ли это быть ошибкой в Visual Studio 2017 / Xamarin?
РЕДАКТИРОВАТЬ: Вот ссылка, проливающая некоторый свет на эту тему: https://forums.xamarin.com/discussion/19369/compiling-resource-ids-static-vs-const
Чего я не понимаю, так это: почему приведенный выше код работает вообще, учитывая, что эта проблемаизвестен с 2014 года?