You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin开发中反复出现编码错误的问题求助

Xamarin应用XamlCTask编码错误解决办法

错误核心分析

你遇到的XamlCTask任务异常,根源是XAML文件中存在当前编码不支持的无效字符,或者文件声明的编码与实际存储编码不匹配。不定期出现的原因大概率是文件在版本控制、跨编辑器操作时被篡改了编码,或是引入了不可见的控制字符。

具体解决步骤

  • 精准定位问题字符
    根据报错提示的Line 9, position 90,找到对应的XAML文件,用VS Code、Notepad++这类编辑器打开,开启「显示所有字符」功能:

    • VS Code:按Ctrl+Shift+P,输入Toggle Render Whitespace启用
    • Notepad++:顶部菜单「视图」→「显示符号」→「显示所有字符」
      查看该行对应位置的字符,通常是零宽空格、异常换行符,或是从其他格式(如Word、网页)复制进来的隐藏格式字符。
  • 统一编码并修复字符

    1. 统一所有XAML文件编码为UTF-8:
      • Visual Studio中右键文件→「属性」→「高级保存选项」,选择「UTF-8」编码
      • Notepad++中「编码」→「转为UTF-8」
    2. 删除定位到的无效/不可见字符,若为复制文本导致的,建议手动重新输入内容。
  • 版本控制层面预防编码篡改
    在项目根目录的.gitattributes文件中添加以下规则(没有就新建),强制Git统一处理XAML文件编码:

    *.xaml text encoding=utf-8
    

    避免不同环境拉取代码时自动转换编码。

  • 清理构建缓存替代重新克隆仓库
    不要直接删除本地仓库(容易丢数据),先清理构建缓存:

    1. 删除项目目录下的bin和obj文件夹
    2. 打开Visual Studio→「工具」→「选项」→「NuGet包管理器」→「常规」→「清空NuGet缓存」
    3. 重启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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:24:54