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

为何加载Xamarin Android .csproj到Microsoft.Build.Evaluation.Project时缺失.targets报错

问题原因

Visual Studio运行时会自动初始化完整的MSBuild运行上下文,内置变量$(MSBuildExtensionsPath)会被正确解析为VS安装目录下的MSBuild扩展存储路径,该路径下默认包含Xamarin相关的.targets文件,因此项目可以正常加载编译。

你直接通过Microsoft.Build.Evaluation.Project加载项目时,默认使用当前控制台应用的运行目录作为MSBuild根路径,内置变量$(MSBuildExtensionsPath)会被错误解析为你的程序输出目录,自然找不到对应的Xamarin .targets文件,因此抛出InvalidProjectFileException异常。

解决方案

你需要先手动初始化MSBuild的运行环境,再执行项目加载操作,步骤如下:

  1. 安装必要的NuGet包
    • 若使用.NET 5+版本的控制台程序,安装Microsoft.Build.Locator、Microsoft.Build、Microsoft.Build.Utilities.Core包
    • 若使用.NET Framework 4.6.1版本的控制台程序,确保引用的Microsoft.Build相关程序集来自本地Visual Studio安装目录,而非NuGet源中的独立版本
  2. 在程序入口最前端先注册本地有效的MSBuild实例,再执行项目加载逻辑,示例代码如下:
// 首先注册MSBuild环境,必须放在所有使用MSBuild API的代码之前
MSBuildLocator.RegisterDefaults();

var fileName = @"C:\Users\vchel\source\repos\BlankAndroid\BlankAndroid\BlankAndroid.csproj";
var project = new global::Microsoft.Build.Evaluation.Project(fileName, null, null, new ProjectCollection());

如果RegisterDefaults()识别不到本地的VS安装实例,也可以手动指定对应的VS实例路径:

var vsInstance = MSBuildLocator.QueryVisualStudioInstances().FirstOrDefault(x => x.Version.Major >= 19); // 对应VS2022,可根据实际版本调整
MSBuildLocator.RegisterInstance(vsInstance);

内容的提问来源于stack exchange,提问作者Victor Chelaru

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:15:01