开发Xamarin.Forms应用时页面报‘Field _filedname is already declared’错误求助
解决Xamarin.Forms中诡异的“Field _fieldname is already declared”错误
我之前也踩过这个坑!明明代码里完全没有重复声明的字段,换了N个字段名还是报同样的错,连代码后置文件都中招,简直离谱。结合我当时的排查经验,给你几个大概率能解决问题的方向:
先从最常见的缓存问题下手
Xamarin的编译缓存有时候会抽风,明明代码改了,缓存里的旧数据还在捣乱。试试这几步:
- 右键项目选择清理,然后再选生成解决方案
- 手动删除项目根目录下的
bin和obj文件夹(VS自带的清理有时候不够彻底) - 关闭你的IDE(VS/Rider都一样),重新打开后再编译一次
仔细排查XAML的隐藏问题
很多时候这种诡异错误都是XAML语法或者命名冲突导致的,只是你没注意到:
- 全局搜索当前页面的
x:Name值,看看有没有不小心重复设置的(比如复制粘贴控件时忘了改名字) - 检查XAML标签是否都正确闭合,比如有没有漏写
</Label>或者</StackLayout>,未闭合的标签会让编译器解析混乱,误报重复字段 - 确认XAML里的
x:Name和后台代码的字段/属性有没有重名(哪怕大小写不同?虽然C#大小写敏感,但有时候编译器抽风会识别错)
检查代码生成和依赖项
如果你用了一些自动生成工具或者MVVM框架,也可能出现这种问题:
- 看看有没有T4模板、代码片段或者第三方工具自动生成了重复的字段
- 检查你的ViewModel或者绑定的数据源里,有没有和后台字段同名的属性,数据绑定的路径冲突也可能触发奇怪的编译错误
终极排查:新建干净页面定位问题
如果上面的方法都没用,试试这个笨但有效的办法:
- 新建一个空白的Xamarin.Forms页面
- 把原页面的代码(XAML和后台)一点点复制到新页面里,每复制一部分就编译一次
- 什么时候出现错误,就说明刚复制的那部分代码有问题,针对性排查就行
如果所有方法都试过还是不行,可以尝试更新Xamarin.Forms到最新稳定版,或者修复你的IDE安装(比如VS的Xamarin插件可能出问题了)。
内容的提问来源于stack exchange,提问作者deloyar
相关产品推荐
相关产品推荐

