Xamarin报错‘Resource不存在于当前上下文’,求有效解决方案
解决Xamarin Android中“The name 'Resource' does not exist in the current context”的间歇性问题
我之前也碰到过这个烦人的问题,VS2015 + Xamarin的组合偶尔确实会抽风,尤其是资源文件生成出问题的时候。结合你描述的情况——重启项目能临时解决、没改代码却突然报错,大概率是资源文件生成异常或者VS的缓存问题,给你几个亲测有效的解决步骤:
1. 强制重新生成资源文件
这是最常用也最有效的方法,因为Resource类是VS自动生成的Resource.designer.cs文件提供的,一旦这个文件没正确更新就会报错:
- 右键你的Android项目 → 选择卸载项目
- 等项目卸载完成后,再右键 → 重新加载项目
- 点击顶部菜单的生成 → 重新生成解决方案
这个操作会强制VS重新解析所有布局、资源文件,彻底重建Resource.designer.cs,很多时候能直接解决问题。
2. 清理VS缓存和项目临时文件
VS的缓存有时候会在更新后乱掉,导致各种奇怪的编译问题:
- 完全关闭VS2015
- 找到VS的组件缓存目录:
C:\Users\[你的用户名]\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache,删除该目录下所有文件 - 打开项目所在文件夹,手动删除
bin和obj两个文件夹(这两个是编译生成的临时文件,删除后会自动重建) - 重新打开VS加载项目,再执行一次重新生成。
3. 检查资源文件命名规范
虽然你说没修改项目,但有时候自动更新或者误操作可能导致资源命名违规(Xamarin对资源文件名有严格要求):
- 检查
Resources目录下的所有文件(布局、drawable、values等),确保文件名全为小写字母,只能用下划线_分隔,不能有空格、大写字母或特殊符号 - 如果发现违规文件名,修改后重新生成项目。
4. 验证SDK与Xamarin版本兼容性
VS2015的Xamarin版本和Android SDK版本不匹配也可能导致资源生成异常:
- 打开VS的工具 → 选项 → Xamarin → Android设置,确认项目的目标SDK版本和你已安装的SDK版本一致
- 通过工具 → 扩展和更新,将Xamarin更新到VS2015支持的最新稳定版本,尽量保持SDK和Xamarin版本的兼容性。
如果以上方法都试过还是间歇性出现问题,那可能是VS2015本身的遗留bug——毕竟VS2015已经比较老旧了。如果条件允许,建议升级到更新的VS版本(比如VS2022);如果必须用VS2015,可以养成每次启动项目前先执行“重新生成解决方案”的习惯,能大幅减少这个问题的出现概率。
你的代码示例
using System; using Android.App; using Android.Content; using Android.Runtime; using Android.Views; using Android.Widget; using Android.OS; using Android.Views.InputMethods; using Android.Graphics.Drawables; using Android.Graphics; namespace Designer { [Activity(Label = "Designer", MainLauncher = true)] public class MainActivity : Activity { // Global Varialble Button butSignIn; EditText tbxUsername; TextView txtErrorMsg; protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // Set our view from the "main" layout resource SetContentView(Resource.Layout.Main); butSignIn = FindViewById<Button>(Resource.Id.butSignIn); butSignIn.Click += ButSignIn_Click; tbxUsername = FindViewById<EditText>(Resource.Id.txtUsername); txtErrorMsg = FindViewById<TextView>(Resource.Id.txtErrorMessage); ActionBar.SetDisplayShowTitleEnabled(false); ColorDrawable colorDrawable = new ColorDrawable(Color.ParseColor("#ff70bc1e")); ActionBar.SetBackgroundDrawable(colorDrawable); } private void ButSignIn_Click(object sender, System.EventArgs e) { if (tbxUsername.Text == "Azmodan") { Intent intent = new Intent(this, typeof(MenuActivity)); this.StartActivity(intent); this.Finish(); // this will close the activity and will close app if we try go back } else { txtErrorMsg.Visibility = ViewStates.Visible; txtErrorMsg.Text = "inccorect login details, please try again"; } } } }
内容的提问来源于stack exchange,提问作者Azmodan
相关产品推荐
相关产品推荐

