4

我正在使用最近发布的 Visual Studio 2015 Preview 以及 Visual Studio 的 Xamarian Studio 5.6.3(或 5.6.2)扩展。

经过数小时下载和安装所有必需的软件(全部成功)后,我开始在 VS2015P 中开发 Android 应用程序,但每次创建空白 Android 应用程序时,我都会收到此错误,没有错误代码:

没有为“MergeApkRecipelists”任务指定所需参数“RecipeFiles”的值。

4

4 回答 4

4

通过查看 Xamarin 的 .targets 文件发现了这一点。

精简版

您可以:

  • 创建一个 Android C++ 库项目并从您的 Xamarin Android 项目中引用它

或者

  • 注释掉Import%PROGRAMFILES(x86)%\MSBuild\Xamarin\Android\Xamarin.Android.Common.After.targets 中定义的元素。请注意,这可能会禁用对向 Xamarin Android 项目添加 C++ 项目引用的支持。

完成其中一项操作后,您的 Xamarin Android 项目应该会生成并运行。

长版

首先,注意VS输出窗口中的错误:

C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common\ImportAfter\Microsoft.Cpp.Android.targets(54,9): error MSB4044: The "MergeApkRecipelists" task was not given a value for the required parameter "RecipeFiles".

错误中提到的 Microsoft.Cpp.Android.targets 文件看起来都是关于支持对 C++ 项目的项目引用。其中,MergeApkRecipelists任务的元素如下所示:

<!-- language: lang-xml -->
<MergeApkRecipelists RecipeFiles="@(_NativeAndroidRecipeFiles)">
        ...
</MergeApkRecipelists>

NativeAndroidRecipeFiles变量似乎没有在 .targets 文件中定义,因此推测它正在由构建过程初始化。但由于 .targets 文件似乎旨在支持 C++ 项目引用,因此我尝试将 Android C++ 共享库项目添加到我的解决方案中:

添加动态共享库 (Android) 项目

然后我从我的 Xamarin Android 项目中引用了 C++ 项目,瞧!之后的构建和运行是成功的。

但是由于必须引入一个虚拟库非常繁重,我还追踪了 Xamarin 的 Microsoft.Cpp.Android.targets 文件被拉入的位置。这发生在 C:\Program Files (x86)\MSBuild\Xamarin\Android \Xamarin.Android.Common.After.targets 文件,它有一个Import元素:

<!-- language: lang-xml -->
<Import Project="$(MSBuildThisFileDirectory)\Xamarin.Android.Common\ImportAfter\*"
        Condition="Exists('$(MSBuildThisFileDirectory)\Xamarin.Android.Common\ImportAfter')"/>

这会带来 %PROGRAMFILES(x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common\ImportAfter 下的所有内容。由于该目录中唯一的项目是我们要排除的 .targets 文件,因此可以将其注释掉而不会影响其他任何内容。但请注意,由于此 .targets 文件似乎是支持从 Xamarin Android 项目中引用 C++ 项目的一部分,因此将其注释掉可能意味着它将不再正常工作。

Import注释掉该语句后,Xamarin Android 项目应该在没有任何 C++ 引用的情况下构建和运行。

于 2014-11-13T14:47:22.810 回答
1

只需在 C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common\ImportAfter\Microsoft.Cpp.A‌​ndroid.targets 的目标文件的第 54 行添加以下条件:

<MergeApkRecipelists RecipeFiles="@(_NativeAndroidRecipeFiles)" Condition="'@(_NativeAndroidRecipeFiles)' != ''">

注意:这个永久修复将很快在 Alpha 通道中发布。

于 2014-11-17T16:03:59.843 回答
0

从http://developer.xamarin.com/releases/vs/xamarin.vs_3/xamarin.vs_3.9/更新 Xamarin 我做到了,它可以工作。

于 2014-11-18T13:42:44.540 回答
0

尝试将 Xamarin 更新到 3.9。 更新

于 2014-11-13T08:25:09.190 回答