首页 > 解决方案 > 为什么将 Xamarin Android .csproj 加载到 Microsoft.Build.Evaluation.Project 会由于缺少 .targets 文件而引发 InvalidPropectFileException?

问题描述

我正在尝试使用 .NET 5.0 控制台应用程序的实例在 .NET 5.0 控制台应用程序中打开 Xamarin Android .csproj 文件Microsoft.Build.Evaluation.Project。此外,我还尝试对 .NET Framework 4.6.1 项目做同样的事情。

加载代码为:

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

当我尝试实例化Project对象时,出现以下异常:

Microsoft.Build.Exceptions.InvalidProjectFileException: 
The imported project "C:\Users\vchel\source\repos\ProjectLoadTest\ProjectLoadTest\bin\Debug\net5.0\Xamarin\Android\Xamarin.Android.CSharp.targets" was not found.
Confirm that the expression in the Import declaration "C:\Users\vchel\source\repos\ProjectLoadTest\ProjectLoadTest\bin\Debug\net5.0\Xamarin\Android\Xamarin.Android.CSharp.targets" is correct, and that the file exists on disk.  C:\Users\vchel\source\repos\BlankAndroid\BlankAndroid\BlankAndroid.csproj

上述错误中引用的 Xamarin.Android.CSharp.targets 文件出现在我正在加载的 .csproj 中,如以下代码段所示:

  <Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />

请注意,.csproj 引用了带有$(MSBuildExtensionPath)前缀的 Xamarin.Android.CSharp.targets 文件,但在运行时,它与正在运行的控制台应用程序 .exe 的位置交换,而不是

我尝试加载的 Android 项目在 Visual Studio 中正确打开,并且编译/运行没有问题。

为什么这个 Android 项目在 Visual Studio 中打开时没有任何问题,但在尝试在Microsoft.Build.Evaluation.Project对象中打开时却失败了?

标签: c#androidvisual-studioxamarinproject

解决方案


看来我之前确实遇到过同样的问题,但它不在 Android 项目上,所以我将把这个问题留在这里以解决 Android 特定的问题。

一般的问题在这里讨论:

如何使用 MSBuild NuGet 将 .csproj 文件加载到 .NET Core 3.0

总结是 - .target 文件与正在安装的 nuget 包是分开的,似乎 Project 类无法解析 $(MSBuildExtensionsPath)。因此,要解决此问题,应将相关的 .targets 文件添加到项目中并复制到输出 (bin) 文件夹中。

在我的机器上,可以在以下位置找到原始文件:

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\Android

我必须将以下文件添加到我的应用程序中。请注意,它们已添加到Xamarin/Android/文件夹中:

在此处输入图像描述

如果项目较新,则可以将项目标记为复制

在此处输入图像描述


推荐阅读