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

从Xamarin.Forms升级到.NET MAUI遇CS0103错误:InitializeComponent不存在

解决Xamarin.Forms升级.NET MAUI后InitializeComponent不存在的问题

问题背景

从Xamarin.Forms升级到.NET MAUI后,所有XAML页面均出现Error CS0103: The name 'InitializeComponent' does not exist in the current context错误,表现为MAUI源代码生成器(SourceGen)无法生成对应的xaml.sg.cs文件,常规清理重建、调整生成操作等方案无效,仅升级项目受影响,新建MAUI项目可正常运行。

针对性解决方案

1. 清理项目文件中的Xamarin遗留配置

升级过程中常残留Xamarin.Forms的旧配置,会干扰MAUI的SourceGen运行:

  • 移除项目文件中所有针对XAML的<EmbeddedResource>配置(Xamarin时期将XAML作为嵌入资源处理,MAUI使用<MauiXaml>)
  • 删除所有<XamlResourceGenerator>相关配置,该生成器是Xamarin专属,与MAUI SourceGen冲突

2. 修正MauiXaml全局配置

替换单个文件的Update配置为全局包含规则,并移除多余的生成器设置:
原配置:

<ItemGroup>
  <MauiXaml Update="NewPage1.xaml">
    <Generator>MSBuild:Compile</Generator>
  </MauiXaml>
</ItemGroup>

替换为:

<ItemGroup>
  <MauiXaml Include="**\*.xaml" Exclude="**\obj\**;**\bin\**" />
</ItemGroup>

注意:<Generator>MSBuild:Compile</Generator>是旧模式配置,MAUI SourceGen无需此设置,必须移除。

3. 强制清理生成缓存

手动删除以下目录,彻底清除旧生成缓存:

  • 项目根目录下的obj和bin文件夹
  • 解决方案根目录下的.vs隐藏文件夹
    删除后重启Visual Studio,重新生成项目。

4. 验证命名空间与类名一致性

确认XAML中的x:Class属性值与后台代码的命名空间、类名完全一致(包括大小写):

  • XAML中:x:Class="Ren9ve.ERP.Mobile.NewPage1"
  • 后台代码中:namespace Ren9ve.ERP.Mobile + public partial class NewPage1 : ContentPage
    SourceGen对大小写敏感,升级项目可能存在旧命名空间残留导致不匹配。

5. 检查MAUI SDK与目标框架配置

  • 确认项目文件中的<TargetFramework>为对应版本的MAUI目标,例如VS2022 17.8.4对应.NET 8:
    <TargetFramework>net8.0-android;net8.0-ios;net8.0-windows10.0.19041.0</TargetFramework>
    
  • 确保所有MAUI相关NuGet包(如Microsoft.Maui.Controls)的版本与SDK版本完全一致,避免版本不匹配导致SourceGen失效。

6. 确认语言版本支持

MAUI SourceGen需要C# 11及以上版本支持,在项目文件中添加或确认:

<PropertyGroup>
  <LangVersion>11.0</LangVersion>
</PropertyGroup>

同时确保未禁用SourceGen:检查项目文件中无<EnableSourceGeneration>false</EnableSourceGeneration>配置。

内容的提问来源于stack exchange,提问作者Gregori Schuster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:01:16