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

整合Blazor与Xamarin项目到Visual Studio解决方案编译失败求助

解决Blazor与Xamarin项目混合解决方案的编译冲突问题

问题根源

Blazor项目基于.NET 7的MSBuild工具链,而Xamarin iOS/Android项目依赖Mono版MSBuild,两者在同一解决方案的默认配置下会触发工具链冲突:

  • 勾选"Build with MSBuild on Mono"时,Mono的MSBuild无法正确处理Blazor.Shared的net7.0目标,抛出NETSDK1005错误
  • 取消勾选后,Xamarin项目依赖的Mono编译环境缺失,导致找不到XamarinApp.dll的CS0006错误

解决方案

1. 创建分离的解决方案配置

  • 打开解决方案的配置管理器(工具栏→生成→配置管理器)
  • 新建两个独立配置:Blazor_Debug和Xamarin_Debug(Release配置可同理创建)
    • 对于Blazor_Debug:取消勾选Xamarin iOS/Android项目的"生成"选项,确保"Build with MSBuild on Mono"未勾选
    • 对于Xamarin_Debug:勾选所有Xamarin项目的"生成"选项,强制勾选"Build with MSBuild on Mono",无需构建Blazor项目时可取消其勾选
  • 后续根据开发需求切换配置进行构建,从根源避免工具链冲突

2. 隔离跨项目的代码依赖

  • 若Blazor.Shared和XamarinApp需要共享代码,不要直接互相引用:
    • 创建一个** .NET Standard 2.0 **的共享项目(Xamarin和.NET 7均兼容该框架),将共用代码迁移至此
    • 让Blazor.Shared和XamarinApp分别引用这个.NET Standard项目,避免不同工具链处理不兼容的目标框架

3. 为项目单独指定工具链

  • 右键Xamarin iOS/Android项目→属性,在对应平台的构建设置(如iOS Build/Android Build)中,强制指定使用Mono MSBuild编译
  • 或者在解决方案根目录创建Directory.Build.props文件,自动为不同类型项目分配工具链:
    <Project>
      <!-- 为Xamarin平台项目启用Mono MSBuild -->
      <PropertyGroup Condition="'$(TargetFramework)' Contains 'monoandroid' Or '$(TargetFramework)' Contains 'xamarinios'">
        <UseMonoMSBuild>true</UseMonoMSBuild>
      </PropertyGroup>
      <!-- 为.NET 7项目禁用Mono MSBuild -->
      <PropertyGroup Condition="'$(TargetFramework)' StartsWith 'net7'">
        <UseMonoMSBuild>false</UseMonoMSBuild>
      </PropertyGroup>
    </Project>
    

4. 彻底清理后重建

  • 右键解决方案→清理
  • 删除所有项目的bin、obj文件夹,以及解决方案根目录的.vs文件夹和各项目的project.assets.json文件
  • 执行dotnet restore命令还原依赖,再切换对应配置进行构建

内容的提问来源于stack exchange,提问作者Asier Cayón Francisco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:42:38