为什么即使我将 Visual Studio 中的构建设置设置为
Release
,我在侧面加载的 UWP 发行版中创建的所有内容都放置在末尾带有 _test
的文件夹中?是因为微软假设侧面加载的应用程序始终是测试应用程序吗?
我将 appxbundle 文件放在 AppCenter 中,并使用 AppCenter 将我们的内部生产应用程序分发给使用 AppCenter 的内部员工。
这就是我问的主要原因。我尝试将 appxbundle 发布到 AppCenter 供我的员工下载和安装。问题是,这些目标笔记本电脑没有安装 Microsoft Store(不要询问),因此 appxbundle 不会自动安装。因此,当我尝试通过 powershell 脚本安装时,我可以清楚地看到
Microsoft.NET.Native.Runtime.2.0
的依赖关系未得到满足,并且安装失败。当我为我的应用程序提取 appxbundle 时,我发现不包含任何依赖项。但是,如果我探索我的应用程序发布到的根文件夹,我可以发现 Microsoft.NET.Native.Runtime.2.0
就在那里,它只是没有将其放入 appxbundle 文件中。为了在这些笔记本电脑上安装这个应用程序,我必须启用开发人员模式,我必须压缩整个已发布的文件夹,将此 zip 文件发送给用户,让他们解压,然后让他们在根文件夹中运行 powershell 脚本。此 powershell 脚本安装我的 appxbundle、证书,并包含所有依赖项。
我在这里阅读了以下内容:
应用程序中心始终生成应用程序包。然而,调试版本是 不适合用于侧面加载。 ...以及提供的 .appxbundle Test 文件夹中的文件不包含所需的依赖项。
由于我的依赖项未包含在 appxbundle 中,并且根据 Microsoft 的说法,即使我在发布之前在 IDE 中选择
Debug
,我的应用程序似乎仍生成为 Release
构建。
遗憾的是它被硬编码在 msbuild 文件“Microsoft.AppxPackage.Targets”中
VS2019 地点
C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VisualStudio\v16.0\AppxPackage\Microsoft.AppxPackage.Targets
或者正如MSFT UWP工程师Nico Zhu在评论中所说:“这是设计使然”
对于将来的任何人,删除包名称中的
_Test
后缀的正确方法是将其添加到您的 .csproj
文件中。它应该位于 <Project>
标签内
<Target Name="SetAppxPackageTestDir" BeforeTargets="_ComputeAppxPackageOutput">
<PropertyGroup>
<AppxPackageNameNeutral>$(ProjectName)_$(AppxManifestIdentityVersion)</AppxPackageNameNeutral>
<_AppxPackageConfiguration Condition="'$(Configuration)' != 'Release'">_$(Configuration)</_AppxPackageConfiguration>
<AppxPackageName>$(AppxPackageNameNeutral)_$(Platform)$(_AppxPackageConfiguration)</AppxPackageName>
<AppxPackageTestDir>$(AppxPackageDir)$(AppxPackageNameNeutral)$(_AppxPackageConfiguration)\</AppxPackageTestDir>
<AppxPackageTestExternalPackagesDir>$(AppxPackageDir)$(AppxPackageNameNeutral)$(_AppxPackageConfiguration)\$(ExternalPackagesDir)</AppxPackageTestExternalPackagesDir>
</PropertyGroup>
</Target>
这将覆盖由 Visual Studio 设置的变量,并且具有仅影响当前项目的额外好处