【问题标题】:Getting Build Error Creating Android Application using Xamarin Extension for Visual Studio 2015 Preview使用 Visual Studio 2015 预览版的 Xamarin 扩展创建 Android 应用程序时出现构建错误
【发布时间】:2014-11-13 06:33:06
【问题描述】:

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

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

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

【问题讨论】:

  • 我们在这里记录了一个错误:bugzilla.xamarin.com/show_bug.cgi?id=24510
  • 我在 VS2010 和 VS2013 上看到了这个。我什至无法让 VS2015 看到已安装 Xamarin。好像bug比比皆是。你会知道 Xamarin 参与其中。
  • @DaveDev 尝试转到程序和功能并修改 Xamarin 安装。可能是需要启用 VS 2015 集成 - 我就是这种情况。

标签: android c#-6.0 visual-studio-2015


【解决方案1】:

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

短版

您可以:

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

  • 注释掉 %PROGRAMFILES(x86)%\MSBuild\Xamarin\Android\Xamarin.Android.Common.After.targets 中定义的 Import 元素。请注意,这可能会禁用对向 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++ 共享库项目添加到我的解决方案中:

然后我从我的 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++ 引用的情况下构建和运行。

【讨论】:

  • 感谢 Rich 在您回复前几分钟就收到了这个错误,它就像一个魅力。不要忘记向 Xamarin 提交错误报告。
  • @J Chapman - 我不能直接提交错误,所以我有 posted the info to the Xamarin forums
  • 您还可以同时应用适当的修复程序(我们已经在产品中实施并且应该很快就会推出)。只需在 C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common\ImportAfter\Microsoft.Cpp.Android.targets 的目标文件的第 54 行添加以下条件:&lt;MergeApkRecipelists RecipeFiles="@(_NativeAndroidRecipeFiles)" Condition="'@(_NativeAndroidRecipeFiles)' != ''"&gt;
【解决方案2】:

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

&lt;MergeApkRecipelists RecipeFiles="@(_NativeAndroidRecipeFiles)" Condition="'@(_NativeAndroidRecipeFiles)' != ''"&gt;

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

【讨论】:

    【解决方案3】:

    尝试将 Xamarin 更新到 3.9。 Update

    【讨论】:

      【解决方案4】:

      http://developer.xamarin.com/releases/vs/xamarin.vs_3/xamarin.vs_3.9/ 更新 Xamarin 我做到了,它有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-16
        • 1970-01-01
        • 2022-08-19
        • 1970-01-01
        相关资源
        最近更新 更多