我使用 Visual Studio 中的 Windows 应用程序打包项目将 WPF 应用程序打包为 MSIX 包,以便在 Microsoft 商店中分发。
现在,我的应用程序运行得很好。唯一的麻烦是生成的 .msix 包似乎两次包含我所有的“内容”资源:一次用于我正在打包的项目,一次用于打包项目。
这就是我的项目的结构:
A:我原来的WPF项目,名为“MyProject”
B: 我的打包项目,包含 appxmanifest 并将 MyProject 设置为项目引用。
生成的 .msix 包的结构如下,如果我用 7Zip 打开它:
(文件夹)我的项目
(文件夹)声音效果<--- bad
AppXManifest.xml
资源.pri
[Content_Types].xml
如您所见,我两次获取 SoundEffects 文件夹。所有资源都会发生这种情况,包括 LibVLC 添加的一个巨大的 80mb 依赖项文件夹,这几乎使我的包大小增加了一倍。
我尝试过的:
<Content Remove="SoundEffects\MySoundEffect.mp3" />
<Content Remove="SoundEffects\*.*" />
我也尝试了其他路径来删除属性,但没有成功。我不确定我的方法是否错误或者我误解了如何在这里构建正确的路径。
<GeneratedFiles/>
<GeneratedResources/>
下面,我尝试了这个(相关 learn.microsoft.com 页面):
<Files>
<File ExcludePath="SoundEffects\MySoundEffect.mp3"/>
<File ExcludePath="SoundEffects\*.*"/>
</Files>
不幸的是,两者都没有任何作用,并且生成的包仍然包含所有内容两次。我希望保持包布局相同,但排除包根目录下的 SoundEffects 文件夹。我错过了什么?
您面临的问题可能是由于打包项目在打包过程中将 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 项目的结构或内容进行任何更改。