在命令行中打包时,msbuild拾取了错误的package.appxmanifest

在命令行中打包时,msbuild拾取了错误的package.appxmanifest,msbuild,visual-studio-2017,packaging,Msbuild,Visual Studio 2017,Packaging,我有一个VS2017的C#解决方案,包含一个应用程序项目、一个桌面扩展项目和一个打包项目。正如我在中提到的,我最终让msbuild为我创建了一个包含x86和x64的包。但是,在我尝试从该捆绑包安装之后,我发现msbuild实际上选择了错误的package.appxmanifest,因为它们的版本号不同 所以。。。我有两个package.appxmanifest,一个在打包项目中,一个在我的主应用程序项目中。当我在VS2017中从向导构建时,将使用打包项目中的一个,这是正确的。当我使用msbuil

我有一个VS2017的C#解决方案,包含一个应用程序项目、一个桌面扩展项目和一个打包项目。正如我在中提到的,我最终让msbuild为我创建了一个包含x86和x64的包。但是,在我尝试从该捆绑包安装之后,我发现msbuild实际上选择了错误的package.appxmanifest,因为它们的版本号不同

所以。。。我有两个package.appxmanifest,一个在打包项目中,一个在我的主应用程序项目中。当我在VS2017中从向导构建时,将使用打包项目中的一个,这是正确的。当我使用msbuild仅使用一个平台进行构建时,它也会选择正确的平台,如下所示:

msbuild .\MyApp.sln /p:Configuration=Release /p:Platform=x86
只有当我使用msbuild一起构建两个平台时,它才会使用我的主应用程序项目中的平台:

msbuild .\MyApp.sln /p:Configuration=Release /p:AppxBundlePlatforms="x86|x64" /p:UapAppxPackageBuildMode=StoreUpload
我还尝试构建打包项目而不是解决方案,但是因为我们的桌面扩展项目只有x86,所以在构建x64时,我会在配置方面出错

问题:

  • 有人知道为什么会这样吗
  • 我还对如何在命令行中使用AppXBundlePlatform构建多平台感到非常困惑。因为我无法指定平台,所以使用哪个平台构建
  • 我是否应该将
    始终
    从不
    添加到打包项目中
  • 有人知道为什么会这样吗
  • 这是因为解决方案中有两个ID相同的
    Package.appxmanifest
    文件。使用
    .sln
    创建应用程序包时,MSBuild/Visual Studio无法清楚地知道应该使用哪个
    包.appxmanifest

  • 我还对如何在命令行中使用AppXBundlePlatform构建多平台感到非常困惑。因为我无法指定 平台,使用哪个平台构建
  • 不确定无法指定平台的原因。要解决此问题,可以尝试生成项目文件
    .csproj
    ,而不是解决方案文件。例如,在生成应用程序项目时,可以使用以下命令行:

    msbuild .\MyApp.csproj /p:Configuration=Release /p:AppxBundlePlatforms="x86|x64"
    
    然后构建包装项目:

    msbuild .\YouPackaging.csproj /p:Configuration=Release /p:AppxBundlePlatforms="x86"
    
  • 我应该总是加还是不加 永远不要去包装项目
  • 如果生成项目,则无需将这两个属性添加到项目文件中,这两个属性将用于解决方案级别,并且您有一个不希望添加到捆绑包中的项目:

    因为在解决方案级别,不清楚应该出现哪个应用程序 在包裹里。若要解决此问题,请打开每个项目文件并添加 以下属性位于第一个 元素


    希望这有帮助。

    非常感谢。对于问题2,我认为AppxBundlePlatforms仅用于创建捆绑包,这是否也意味着msbuild将选择正确的平台来构建代码?它是如何与参数“Platform”一起工作的?同样,以问题2为例,它是否只是构建用于打包的x86?我的打包项目是一个wapproj,当我尝试时,我得到了关于平台的错误设置为“”,如:“请检查以确保您为此项目指定了配置和平台的有效组合。Configuration='Debug'platform=''。”对于1,我应该有两个appxmanifest吗?我如何让msbuild知道我要在打包项目中使用该版本?很抱歉问了很多问题。我认为我们的项目有一个复杂的设置…@laishiekai,很抱歉由于周末的原因回复得太晚。对于注释中的问题1,是的,MSBuild还选择了基于
    AppxBundlePlatforms
    构建的正确平台。对于问题2,您似乎没有为此项目为指定的配置和平台提供有效的组合,您应该确保命令行中的参数与您的项目匹配。更新:与MS支持部门讨论后,我们发现msbuild有一个bug,它无法正确使用/p:AppxBundlePlatforms=“x86 | x64”处理多平台捆绑包。目前的解决方法是只构建一个平台,然后将两个捆绑包上传到MS商店。微软正在研究这个问题。