为啥将 Xamarin Android .csproj 加载到 Microsoft.Build.Evaluation.Project 会由于缺少 .targets 文件而引发 InvalidPrope
Posted
技术标签:
【中文标题】为啥将 Xamarin Android .csproj 加载到 Microsoft.Build.Evaluation.Project 会由于缺少 .targets 文件而引发 InvalidPropectFileException?【英文标题】:Why does loading a Xamarin Android .csproj into a Microsoft.Build.Evaluation.Project throw InvalidPropectFileException due to missing .targets file?为什么将 Xamarin Android .csproj 加载到 Microsoft.Build.Evaluation.Project 会由于缺少 .targets 文件而引发 InvalidPropectFileException? 【发布时间】:2021-11-27 15:31:10 【问题描述】:我正在尝试使用 Microsoft.Build.Evaluation.Project
的实例在 .NET 5.0 控制台应用程序中打开 Xamarin android .csproj 文件。此外,我还尝试对 .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 中,如下面的 sn-p 所示:
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
请注意,.csproj 引用了带有 $(MSBuildExtensionPath)
前缀的 Xamarin.Android.CSharp.targtets 文件,但在运行时,它会与正在运行的控制台应用程序 .exe 的位置进行交换,而不是
我尝试加载的 Android 项目在 Visual Studio 中正确打开,并且编译/运行没有问题。
为什么这个 Android 项目在 Visual Studio 中打开时没有任何问题,但尝试在 Microsoft.Build.Evaluation.Project
对象中打开时却失败了?
【问题讨论】:
【参考方案1】:似乎我之前确实遇到过同样的问题,但它不在 Android 项目中,所以我将把这个问题留在这里以解决 Android 特定的问题。
一般的问题在这里讨论:
How to Load .csproj file into .NET Core 3.0 using MSBuild NuGet
总结是 - .target 文件与正在安装的 nuget 包是分开的,似乎 Project 类无法解析 $(MSBuildExtensionsPath)。因此,要解决此问题,应将相关的 .targets 文件添加到项目中并复制到输出(bin)文件夹中。
在我的机器上,可以在以下位置找到原始文件:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\Android
我必须将以下文件添加到我的应用程序中。请注意,它们已添加到 Xamarin/Android/
文件夹中:
项目可以标记为如果较新则复制:
【讨论】:
以上是关于为啥将 Xamarin Android .csproj 加载到 Microsoft.Build.Evaluation.Project 会由于缺少 .targets 文件而引发 InvalidPrope的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 Xamarin.Android 项目不能在启用 Proguard 的情况下构建:“java.exe”退出代码 1
为啥 Xamarin Forms 对所有页面使用一个 Activity