Xamarin开发中反复出现编码错误的问题求助
Xamarin应用XamlCTask编码错误解决办法
错误核心分析
你遇到的XamlCTask任务异常,根源是XAML文件中存在当前编码不支持的无效字符,或者文件声明的编码与实际存储编码不匹配。不定期出现的原因大概率是文件在版本控制、跨编辑器操作时被篡改了编码,或是引入了不可见的控制字符。
具体解决步骤
精准定位问题字符
根据报错提示的Line 9, position 90,找到对应的XAML文件,用VS Code、Notepad++这类编辑器打开,开启「显示所有字符」功能:- VS Code:按
Ctrl+Shift+P,输入Toggle Render Whitespace启用 - Notepad++:顶部菜单「视图」→「显示符号」→「显示所有字符」
查看该行对应位置的字符,通常是零宽空格、异常换行符,或是从其他格式(如Word、网页)复制进来的隐藏格式字符。
- VS Code:按
统一编码并修复字符
- 统一所有XAML文件编码为UTF-8:
- Visual Studio中右键文件→「属性」→「高级保存选项」,选择「UTF-8」编码
- Notepad++中「编码」→「转为UTF-8」
- 删除定位到的无效/不可见字符,若为复制文本导致的,建议手动重新输入内容。
- 统一所有XAML文件编码为UTF-8:
版本控制层面预防编码篡改
在项目根目录的.gitattributes文件中添加以下规则(没有就新建),强制Git统一处理XAML文件编码:*.xaml text encoding=utf-8避免不同环境拉取代码时自动转换编码。
清理构建缓存替代重新克隆仓库
不要直接删除本地仓库(容易丢数据),先清理构建缓存:- 删除项目目录下的
bin和obj文件夹 - 打开Visual Studio→「工具」→「选项」→「NuGet包管理器」→「常规」→「清空NuGet缓存」
- 重启VS后重新构建项目
- 删除项目目录下的
排查编辑器自动编码转换
检查常用编辑器的保存设置,确保默认以UTF-8编码保存XAML文件,避免某些中文输入法、第三方工具自动将编码转为GB2312等其他格式。
完整报错信息
Unexpected error in XamlCTask task. System.Xml.XmlException: Invalid character in the specified encoding. Line 9, position 90. at System.Xml.XmlTextReaderImpl.Throw(Exception e) at System.Xml.XmlTextReaderImpl.InvalidCharRecovery(Int32& bytesCount, Int32& charsCount) at System.Xml.XmlTextReaderImpl.GetChars(Int32 maxCharsCount) at System.Xml.XmlTextReaderImpl.ReadData() at System.Xml.XmlTextReaderImpl.ParseAttributeValueSlow(Int32 curPos, Char quoteChar, NodeData attr) at System.Xml.XmlTextReaderImpl.ParseAttributes() at System.Xml.XmlTextReaderImpl.ParseElement() at System.Xml.XmlTextReaderImpl.ParseElementContent() at Microsoft.Maui.Controls.Xaml.XamlParser.ParseXamlElementFor(IElementNode node, XmlReader reader) in D:\a\_work\1\s\src\Controls\src\Xaml\XamlParser.cs:Line 61. at Microsoft.Maui.Controls.Xaml.XamlParser.ReadNode(XmlReader reader, Boolean nested) in D:\a\_work\1\s\src\Controls\src\Xaml\XamlParser.cs:Line 174. at Microsoft.Maui.Controls.Xaml.XamlParser.ParseXamlElementFor(IElementNode node, XmlReader reader) in D:\a\_work\1\s\src\Controls\src\Xaml\XamlParser.cs:Line 114. at Microsoft.Maui.Controls.Xaml.XamlParser.ReadNode(XmlReader reader, Boolean nested) in D:\a\_work\1\s\src\Controls\src\Xaml\XamlParser.cs:Line 174. at Microsoft.Maui.Controls.Xaml.XamlParser.ParseXamlElementFor(IElementNode node, XmlReader reader) in D:\a\_work\1\s\src\Controls\src\Xaml\XamlParser.cs:Line 114. at Microsoft.Maui.Controls.Xaml.XamlParser.ParseXaml(RootNode rootNode, XmlReader reader) in D:\a\_work\1\s\src\Controls\src\Xaml\XamlParser.cs:Line 49. at Microsoft.Maui.Controls.Build.Tasks.XamlTask.ParseXaml(Stream stream, TypeReference typeReference) in D:\a\_work\1\s\src\Controls\src\Build.Tasks\XamlTask.cs:Line 59. at Microsoft.Maui.Controls.Build.Tasks.XamlCTask.Execute(IList`1& thrownExceptions) in D:\a\_work\1\s\src\Controls\src\Build.Tasks\XamlCTask.cs:Line 124. at Microsoft.Maui.Controls.Build.Tasks.XamlTask.Execute() in D:\a\_work\1\s\src\Controls\src\Build.Tasks\XamlTask.cs:Line 38. at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext()
内容的提问来源于stack exchange,提问作者Joelbu
相关产品推荐
相关产品推荐

