CS0117 - Xamarin 未检测到“资源”文件夹和文件

Posted

技术标签:

【中文标题】CS0117 - Xamarin 未检测到“资源”文件夹和文件【英文标题】:CS0117 - Xamarin not detecting 'Resources' folders and files 【发布时间】:2016-05-17 11:18:00 【问题描述】:

我一直在开发一个Xamarin.Forms 应用程序,最初在 ios 上,现在在 android 上。 我遇到了一个问题,即我的代码无法看到我的MainActivity.cs 中引用的资源。 我对两种不同的资源有同样的错误。

我正在学习 Udemy 课程,讲师强调手动构建一些 xml 文件,因此有两种类型,axmlxml

第一个错误

/Users/richardcurteis/Desktop/OneDrive/DevShared/XamarinProjects/NoteTaker/Droid/MainActivity.cs(35,35):
Error CS0117: `NoteTaker.Droid.Resource' does not contain a definition for `Menu' (CS0117) (NoteTaker.Droid)

第二个错误:

/Users/richardcurteis/Desktop/OneDrive/DevShared/XamarinProjects/NoteTaker/Droid/MainActivity.cs(21,21):
Error CS0117: `NoteTaker.Droid.Resource.Id' does not contain a definition for `action_add' (CS0117) (NoteTaker.Droid)

MainActivity.cs

using System;

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

using SupportToolbar = Android.Support.V7.Widget.Toolbar;
using Android.Support.V7.App;
using System.Collections.Generic;

namespace NoteTaker.Droid

    [Activity (Label = "Note Taker", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : AppCompatActivity
    
        int count = 1;

        private SupportToolbar toolbar;

        protected override void OnCreate (Bundle savedInstanceState)
        
            Xamarin.Insights.Initialize (XamarinInsights.ApiKey, this);
            base.OnCreate (savedInstanceState);
            new Database ();

            // Set our view from the "main" layout resource
            SetContentView (Resource.Layout.Main);
            toolbar = FindViewById<SupportToolbar> (Resource.Id.toolbar);
            SetSupportActionBar (toolbar);
            // Get our button from the layout resource,
            // and attach an event to it
            Button button = FindViewById<Button> (Resource.Id.myButton);
            button.Click += delegate 
                button.Text = string.Format ("0 clicks!", count++);
            ;
        

        public override bool OnCreateOptionsMenu (IMenu menu)
        
            MenuInflater.Inflate (Resource.Menu.addmenu, menu);
            return base.OnCreateOptionsMenu (menu);
        

        public override bool OnOptionsItemSelected (IMenuItem item)
        
            switch (item.ItemId)
            
            case Resource.Id.action_add:
                Console.WriteLine ("Add button clicked");
                return true;

            default:
                return base.OnOptionsItemSelected (item);
            
        


    

addmenu.xml 其中包含action_add id。

<?xml version="1.0" encoding="UTF-8" ?>

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto" >
      <item 
        android:id="@+id/action_add"
        android:icon="@drawable/addIcon"
        android:title="Add"
        app:showAsAction="always"
        />
</menu>

Resources

~/Desktop/OneDrive/DevShared/XamarinProjects/NoteTaker/Droid    
tree Resources/
Resources/
├── AboutResources.txt
├── Resource.designer.cs
├── drawable
│   └── addIcon.png
├── layout
│   ├── Main.axml
│   └── Toolbar.xml
├── menu
│   └── addmenu.xml
├── mipmap-hdpi
│   └── Icon.png
├── mipmap-mdpi
│   └── Icon.png
├── mipmap-xhdpi
│   └── Icon.png
├── mipmap-xxhdpi
│   └── Icon.png
├── mipmap-xxxhdpi
│   └── Icon.png
└── values
    ├── Strings.xml
    └── styles.xml

9 directories, 13 files

【问题讨论】:

【参考方案1】:

好的,所以我弄清楚了问题所在。 以前当我编码时,我最初将“菜单”文件夹放在错误的目录中。 我通过不小心单击“布局”并单击“添加/新建文件夹”来完成此操作。

当我手动将文件夹拖放到正确的位置时,问题就来了。 但似乎 Xamarin 只能识别通过右键单击选项添加的文件和文件夹,然后编译器只能在其原始不正确的位置看到这些文件。

但是,简单地通过右键单击/“删除”删除文件并不能解决问题。 虽然目标文件已从 Xamarin UI 中删除,但它并未从磁盘上的项目目录中删除,因此无法添加具有相同名称的新文件。 我必须导航到项目文件夹并运行rm -rf menu 来删除它。 然后返回 Xamarin 并右键单击/添加/新建文件夹和新建文件。

在我清理项目并重建之后,它就像一个魅力一样工作。

Xamarin 论坛上的这篇帖子向我提示了问题所在。

Xamarin Post

【讨论】:

【参考方案2】:

我遇到了同样的问题,但我使用新文件夹和新文件创建了文件夹和文件。

我的解决方案是在使用 Resource.Menu 之前Clean 构建,然后Build All。 全部编译完成后,一切正常。

我认为另一种方法是从您的项目文件夹中删除“bin”和“obj”文件夹。

【讨论】:

【参考方案3】:

花了我一段时间,但我是这样工作的:

如果它是一个 xamarin 表单应用程序,请更改 "Resource.Layout.Xxxx" => "Droid.Resource.Layout.Xxx"

【讨论】:

以上是关于CS0117 - Xamarin 未检测到“资源”文件夹和文件的主要内容,如果未能解决你的问题,请参考以下文章

尝试放置 AdMob 后未找到 Xamarin.iOS Runtime.cs

在 Rider IDE 中设置 Android Xamarin 解决方案未检测到框架

SetContentView(Resource.Layout.V2T) CS0117 错误“Resource.Layout”不包含“V2T”的定义

Xamarin Xaml 资源样式多条件未使用默认值触发

OSX 上的 SonarQube Xamarin 分析

由于包含路径,cppcheck 未检测到资源泄漏