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

Wrong package.appxmanifest picked by msbuild when packaging in command line

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

所以...我有两个 package.appxmanifest,一个在打包项目中,一个在我的主应用程序项目中。当我从 VS 2017 中的向导构建时,将使用打包项目中的那个,这是正确的。当我使用 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时会出现配置错误。

问题:

  1. 有人知道为什么会这样吗?
  2. 我也很困惑如何在命令行中使用 AppxBundlePlatforms 构建多平台。由于无法指定平台,请问用哪个平台搭建?
  3. 打包项目应该加<AppxBundle>Always</AppxBundle>还是<AppxBundle>Never</AppxBundle>
  1. Does anyone know why this is happening?

那是因为您在解决方案中有两个具有相同 ID 的 Package.appxmanifest 文件。当您使用 .sln 创建 App Bundle 时,MSBuild/Visual Studio 无法清楚地知道应该使用哪个 Package.appxmanifest

  1. I am also very confused about how to build multi-platform using AppxBundlePlatforms in the command line. Since I cannot specify the platform, which platform is used to build?

不确定无法指定平台的原因。要解决此问题,您可以尝试构建项目文件 .csproj 而不是解决方案文件。比如你在构建app项目时,可以使用命令行:

msbuild .\MyApp.csproj /p:Configuration=Release /p:AppxBundlePlatforms="x86|x64"

然后构建打包工程:

msbuild .\YouPackaging.csproj /p:Configuration=Release /p:AppxBundlePlatforms="x86"
  1. Should I add Always or Never to the packaging project?

如果您构建项目,则无需将这两个属性添加到项目文件中,这两个属性用于解决方案级别并且您有一个您不想添加到包中的项目:

because at the solution level, it’s not clear which app should appear in the bundle. To resolve this issue, open each project file and add the following properties at the end of the first element

希望对您有所帮助。