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应用程序