Windows 10 UWP应用构建问题,使用MakeAppx

5
我不确定是什么原因导致了这个错误,我已经研究了几个小时。我正在使用Visual Studio 2015 Update 3构建一个将上传到商店的Windows 10通用(UWP)应用程序。我已经拥有我的开发中心帐户,并且它与我的应用程序相关联。最后,当我右键单击项目并选择“商店”>“创建应用程序包”时,我会收到以下错误消息:错误80080204:“文件名为“ PacTracMobile.Windows10_1.3.0.0_ARM.appx”的软件包和完整名称为“OdenIndustriesInc.9510B3DEAC6_1.3.0.0_arm__bdbevzbp0ydz4”的软件包在捆绑包中无效,因为该捆绑包还包含文件名为“PacTracMobile.Windows10_1.3.0.0_x86.appx”的软件包和完整名称为“OdenIndustriesInc.9510B3DEAC6_1.3.0.0_arm__bdbevzbp0ydz4”的软件包,它适用于相同的处理器架构。捆绑包不能包含同一处理器架构的多个应用程序包,或者任何体系结构特定的应用程序包与体系结构中立的应用程序包。
这个错误与MakeAppx文件有关。我正在尝试构建x86、x64和ARM。当我处于调试模式时,我可以成功构建、部署和测试,没有错误。然而,当我选择构建我的应用程序包时,就会出现这个错误。
请注意,Visual Studio处于发布模式,任何CPU。也就是说,当我选择创建应用程序包时,在第一个弹出窗口中,我已经选择了在发布状态下构建每个平台。我的屏幕看起来就像这样:

Exactly how my build looks, except with my package output path

当我点击创建时,它开始构建并最终出现上述错误。
有什么想法吗?
谢谢!!!
编辑- 值得一提的是,我从Microsoft的这些说明中获得了上面显示的屏幕截图。 我已经并且正在完全按照这些说明操作!MSDN Building UWP apps 更新- 如果在上面截图窗口中,我取消选择x84和x64(这并不理想,因为我想要全部三个),只选择ARM,则不会出现任何错误,并且包将完成。 根据一些阅读,我怀疑如果我一个一个地做(即,只选择x86再次运行),它将构建良好,但我将留下三个应用程序包而不是全部打包成一个。 因此,这似乎与尝试同时构建所有三个并将其打包成一个捆绑包有关,这也是错误提示的含义,但是错误信息或在线阅读的任何内容都没有解释如何解决问题。
3个回答

8
经过对这个问题的大量疑难解答,我不得不联系微软支持来解决此问题。问题的根源在于先前的某个架构正在构建后面的一个架构,因此当后面的一个架构开始构建时,它会失败,因为它已经被先前的一个构建了。
换句话说,您将在上面的屏幕截图中看到,我已经勾选了构建所有三个(x86、x64和ARM)。我们发现x86实际上正在构建ARM。因此,当ARM开始构建时,它会抛出错误,因为包已经构建完毕。
现在是解决方案,微软支持帮助识别了VS存在的一个错误及其如何处理您的.csproj文件。在我的情况下和MS支持在新项目上重现之后,我们确认.csproj文件可能会与在配置管理器下显示的UI不同步。换句话说,在我的VS配置管理器中,x86实际上应该针对x86……但事实上,当我们在记事本中打开.csproj文件时,发现x86实际上设置为ARM。
我们还注意到,重新启动VS不会使它们重新同步,修改配置管理器以先更改为ARM然后再改回x86也不行。似乎是它失去同步,然后不再尝试更新它。
因此,唯一的解决方法是手动纠正/编辑我的.csproj文件,以显示正确的架构。一旦我这样做了,一切都很好地构建了出来。
这是您在csproj文件中要查找的内容。
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>

请注意,此处的
 <PlatformTarget>x86</PlatformTarget>

匹配配置。之前,即使配置项为x86,也会显示ARM。


4
当生成具有多种架构的软件包时,它们必须具有相同的编译配置。例如,如果Release x64具有“使用.NET Native工具链进行编译”的标志,那么Release x86也必须具有该标志。否则,可以为每个架构生成一个软件包。

1
冲突可能是由进程创建的包导致的。您可以尝试将版本号增加到1.4.0.0,然后再次尝试。
如果问题仍然存在,您可以创建3个单独的软件包捆绑,检查不同的架构。只需将所有appxbundle上传到Dashboard中的软件包部分即可。
该问题曾在此处报告,已经被修复。

使用单一包装方法对我有用,无需增加版本。耶,微软的功能可以打包多CPU应用程序,解决方法是做完全相反的事情... - Goufalite

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接