从生成的 MSIX 包中排除文件夹

问题描述 投票:0回答:1

我使用 Visual Studio 中的 Windows 应用程序打包项目将 WPF 应用程序打包为 MSIX 包,以便在 Microsoft 商店中分发。

现在,我的应用程序运行得很好。唯一的麻烦是生成的 .msix 包似乎两次包含我所有的“内容”资源:一次用于我正在打包的项目,一次用于打包项目。


这就是我的项目的结构:

A:我原来的WPF项目,名为“MyProject”

  • 这包含一个名为 SoundEffects 的文件夹,其中包含许多 mp3 文件。在 VS 中,我将“构建操作”设置为“内容”,并将“复制到输出目录”设置为“如果较新则复制”。我需要将这些文件单独包含到 .exe 中,以便用户能够替换这些文件。

B: 我的打包项目,包含 appxmanifest 并将 MyProject 设置为项目引用。


生成的 .msix 包的结构如下,如果我用 7Zip 打开它:

  • (文件夹)我的项目

    • (文件夹)声音效果 <--- good
    • ...其他项目二进制文件
  • (文件夹)声音效果<--- bad

  • AppXManifest.xml

  • 资源.pri

  • [Content_Types].xml


如您所见,我两次获取 SoundEffects 文件夹。所有资源都会发生这种情况,包括 LibVLC 添加的一个巨大的 80mb 依赖项文件夹,这几乎使我的包大小增加了一倍。


我尝试过的:

  1. MyProject.Package.wapproj MSBUILD 文件中,我尝试从构建中删除内容,如下所示:
<Content Remove="SoundEffects\MySoundEffect.mp3" />
<Content Remove="SoundEffects\*.*" />

我也尝试了其他路径来删除属性,但没有成功。我不确定我的方法是否错误或者我误解了如何在这里构建正确的路径。

  1. 我通过 Visual Studio 创建了 MSIX 包布局文件。似乎包括这里的文件:
<GeneratedFiles/>
<GeneratedResources/>

下面,我尝试了这个(相关 learn.microsoft.com 页面):

<Files>
    <File ExcludePath="SoundEffects\MySoundEffect.mp3"/>
    <File ExcludePath="SoundEffects\*.*"/>
</Files>

不幸的是,两者都没有任何作用,并且生成的包仍然包含所有内容两次。我希望保持包布局相同,但排除包根目录下的 SoundEffects 文件夹。我错过了什么?

wpf package msix appx
1个回答
0
投票

您面临的问题可能是由于打包项目在打包过程中将 MyProject 项目中的文件作为内容包含在内,导致生成的 .msix 包中出现重复条目。

为了防止出现这种情况,您可以通过添加构建后事件来修改打包项目的 .wapproj 文件,该事件会从包中删除重复的文件。操作方法如下:

在 Visual Studio 中,右键单击解决方案资源管理器中的打包项目,然后选择“卸载项目”。 右键单击卸载的项目并选择“编辑 MyProject.Package.wapproj”。 找到引用 MyProject 项目的“Project”元素,并添加一个名为“TargetPath”且值为“$(MSBuildThisFileDirectory)AppxLayout\MyProject”的子元素。 保存并关闭 .wapproj 文件。 右键单击打包项目并选择“重新加载项目”。 打开打包项目的属性并导航到“构建事件”选项卡。 在“构建后事件命令行”字段中,添加以下命令以从包中删除重复的文件:

del "$(TargetDir)AppxLayout\MyProject\SoundEffects\*.*" /s /q

此命令将在包构建后删除 MyProject 文件夹中 SoundEffects 目录的内容。 /s 开关告诉 del 删除所有子目录中的所有文件,/q 开关告诉它这样做而不要求确认。

保存项目属性并重建解决方案。 验证该包在 MyProject\SoundEffects 下不再包含重复内容。 这应该可以解决问题,而不需要对 MyProject 项目的结构或内容进行任何更改。

© www.soinside.com 2019 - 2024. All rights reserved.