Xamarin 与 Visual Studio:Resource.Id 不包含“...”的定义

Posted

技术标签:

【中文标题】Xamarin 与 Visual Studio:Resource.Id 不包含“...”的定义【英文标题】:Xamarin with Visual Studio: Resource.Id does not contain a definition for "..." 【发布时间】:2017-01-28 09:23:34 【问题描述】:

我使用 Xamarin(最新)和 Visual Studio 2015 创建了一个跨平台-Application-Project(Native Shared)。

我按照教程“Hello android”完成了它,但是在构建项目时我会收到以下错误消息:

严重性代码描述项目文件行抑制状态 错误 CS0117 'Resource.Id' 不包含 'CallButton' HelloApp.Droid C:\Users\username\documents\visual studio 2015\Projects\HelloApp\HelloApp\HelloApp\HelloApp.Droid\MainActivity.cs 26 活动

(其他小部件相同)

如this Question 中所述,我尝试了不同的 API 级别/重新安装的 sdks 和软件包,但它对我不起作用。我为不同的 API 级别安装了 Android 构建工具并卸载了其他的,但这不会改变任何事情。

我还尝试了此问题中所述的solution 并尝试多次清理和重建解决方案,我还删除了 xamarin-zips 文件夹中的 zip。 Resource.designer.cs 每次都被编译并且看起来很好......而且构建操作对所有文件都是正确的。

有人可以帮忙吗?

PS:在 Mac 上它工作得很好,但我想用 Visual Studio 在 Windows 上开发...

教程链接: https://developer.xamarin.com/guides/android/getting_started/hello,android/hello,android_quickstart/

详细信息,这里是我的源代码:

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto">
    <uses-sdk android:minSdkVersion="17" android:targetSdkVersion="23" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <application android:label="HelloApp.Droid"></application>
</manifest>

PhonewordTranslator.cs

using System.Text;
using System;

namespace Core

    public static class PhonewordTranslator
    
        public static string ToNumber(string raw)
        
            if (string.IsNullOrWhiteSpace(raw))
                return "";
            else
                raw = raw.ToUpperInvariant();

            var newNumber = new StringBuilder();
            foreach (var c in raw)
            
                if (" -0123456789".Contains(c))
                    newNumber.Append(c);
                else
                
                    var result = TranslateToNumber(c);
                    if (result != null)
                        newNumber.Append(result);
                
                // otherwise we've skipped a non-numeric char
            
            return newNumber.ToString();
        
        static bool Contains(this string keyString, char c)
        
            return keyString.IndexOf(c) >= 0;
        
        static int? TranslateToNumber(char c)
        
            if ("ABC".Contains(c))
                return 2;
            else if ("DEF".Contains(c))
                return 3;
            else if ("GHI".Contains(c))
                return 4;
            else if ("JKL".Contains(c))
                return 5;
            else if ("MNO".Contains(c))
                return 6;
            else if ("PQRS".Contains(c))
                return 7;
            else if ("TUV".Contains(c))
                return 8;
            else if ("WXYZ".Contains(c))
                return 9;
            return null;
        
    

Main.axml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_
    android:layout_>
    <TextView
        android:text="Enter a Phoneword"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_
        android:layout_
        android:id="@+id/textView1" />
    <EditText
        android:layout_
        android:layout_
        android:id="@+id/PhoneNumberText"
        android:text="1-855-XAMARIN" />
    <Button
        android:text="Translate"
        android:layout_
        android:layout_
        android:id="@+id/TranslateButton" />
    <Button
        android:text="CallButton"
        android:layout_
        android:layout_
        android:id="@+id/CallButton" />
</LinearLayout>

MainActivity.cs

using System;
using Android;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;

namespace Phoneword

    [Activity(Label = "Phoneword", MainLauncher = true)]
    public class MainActivity : Activity
    
        protected override void OnCreate(Bundle bundle)
        
            base.OnCreate(bundle);

            // Set our view from the "main" layout resource

           //** ERROR IN THE NEXT 4 LINES!!! **
            SetContentView(Resource.Layout.Main);

            EditText phoneNumberText = FindViewById<EditText>(Resource.Id.PhoneNumberText);
            Button translateButton = FindViewById<Button>(Resource.Id.TranslateButton);
            Button callButton = FindViewById<Button>(Resource.Id.CallButton);

            callButton.Enabled = false;

            // Add code to translate number
            string translatedNumber = string.Empty;

            translateButton.Click += (object sender, EventArgs e) =>
            
                // Translate user's alphanumeric phone number to numeric
                translatedNumber = Core.PhonewordTranslator.ToNumber(phoneNumberText.Text);
                if (String.IsNullOrWhiteSpace(translatedNumber))
                
                    callButton.Text = "Call";
                    callButton.Enabled = false;
                
                else
                
                    callButton.Text = "Call " + translatedNumber;
                    callButton.Enabled = true;
                
            ;

            callButton.Click += (object sender, EventArgs e) =>
            
                // On "Call" button click, try to dial phone number.
                var callDialog = new AlertDialog.Builder(this);
                callDialog.SetMessage("Call " + translatedNumber + "?");
                callDialog.SetNeutralButton("Call", delegate 
                    // Create intent to dial phone
                    var callIntent = new Intent(Intent.ActionCall);
                    callIntent.SetData(Android.Net.Uri.Parse("tel:" + translatedNumber));
                    StartActivity(callIntent);
                );
                callDialog.SetNegativeButton("Cancel", delegate  );

                // Show the alert dialog to the user and wait for response.
                callDialog.Show();
            ;

            // Our code will go here
        
    

Resource.designer.cs

#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.42000
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

[assembly: global::Android.Runtime.ResourceDesignerAttribute("HelloApp.Droid.Resource", IsApplication=true)]

namespace HelloApp.Droid



    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")]
    public partial class Resource
    

        static Resource()
        
            global::Android.Runtime.ResourceIdManager.UpdateIdValues();
        

        public static void UpdateIdValues()
        
        

        public partial class Attribute
        

            static Attribute()
            
                global::Android.Runtime.ResourceIdManager.UpdateIdValues();
            

            private Attribute()
            
            
        

        public partial class Drawable
        

            // aapt resource value: 0x7f020000
            public const int Icon = 2130837504;

            static Drawable()
            
                global::Android.Runtime.ResourceIdManager.UpdateIdValues();
            

            private Drawable()
            
            
        

        public partial class Id
        

            // aapt resource value: 0x7f050003
            public const int CallButton = 2131034115;

            // aapt resource value: 0x7f050001
            public const int PhoneNumberText = 2131034113;

            // aapt resource value: 0x7f050002
            public const int TranslateButton = 2131034114;

            // aapt resource value: 0x7f050000
            public const int textView1 = 2131034112;

            static Id()
            
                global::Android.Runtime.ResourceIdManager.UpdateIdValues();
            

            private Id()
            
            
        

        public partial class Layout
        

            // aapt resource value: 0x7f030000
            public const int layout1 = 2130903040;

            // aapt resource value: 0x7f030001
            public const int Main = 2130903041;

            static Layout()
            
                global::Android.Runtime.ResourceIdManager.UpdateIdValues();
            

            private Layout()
            
            
        

        public partial class String
        

            // aapt resource value: 0x7f040001
            public const int app_name = 2130968577;

            // aapt resource value: 0x7f040000
            public const int hello = 2130968576;

            static String()
            
                global::Android.Runtime.ResourceIdManager.UpdateIdValues();
            

            private String()
            
            
        
    

#pragma warning restore 1591

【问题讨论】:

奇怪的是,资源类“HelloApp.Droid”的命名空间没有通过您的活动中的 using 语句包含在内。您在项目中有另一个名为“资源”的类吗?您可以尝试通过解决方案的上下文菜单清理和重建项目吗?如果您选择资源类并按 F12(转到定义)键会发生什么? 【参考方案1】:

1.删除“yourAPPlocation\Resources\Resource.designer.cs”中的所有内容。

2.重建整个项目。

3.复制整个“yourAPPlocation\Resources\Resource.designer.cs”新出生并粘贴到 “yourAPPlocation\obj\Debug\81\designtime\Resource.designer.cs”。

然后就可以了!

希望你的项目也能成功。

【讨论】:

【参考方案2】:

我也有这个错误 我所做的只是保存文件并修复它!希望对你有用。

【讨论】:

以上是关于Xamarin 与 Visual Studio:Resource.Id 不包含“...”的定义的主要内容,如果未能解决你的问题,请参考以下文章

.NET6 与 Visual Studio for Mac M1 不兼容,我可以为 xamarin 使用啥?

如何使用与 Visual Studio 集成的 xamarin 分析器来分析 android 应用程序

Visual Studio - Xamarin,创建连接到数据库的应用程序

无法构建Visual Studio / Xamarin应用程序

从 Visual Studio 2019 Xamarin.iOS 连接到 Mac 的代理问题

Xamarin for Visual Studio 2015 中的配置文件错误(不匹配)