c# - 为什么将 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
对象中打开时却失败了?
解决方案
看来我之前确实遇到过同样的问题,但它不在 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/
文件夹中:
如果项目较新,则可以将项目标记为复制:
推荐阅读
- c# - 用中文创建的目录,但我在 Windows 10 中设置了英文
- c# - EventHandler.BeginInvoke “安全”使用吗?
- java - spark读取csv中的重复列名
- kubernetes - Burrow 仪表板 UI 未显示
- php - 循环中的 if else,或者 if else 中的两个不同循环,带有函数调用,或者在 if-else 中重复相同的代码,哪个更好?
- python - 从子文件夹导入模块时出现问题
- sql - SQL 年龄计算 - 准确的方法
- python - 如何使用python脚本检查rtsp url是否向上/向下
- angular - 带参数的接口回调
- swift - 如何找到我用 Alamofire 从 Firebase Storage 下载的文件的文件路径