如何将具有 post 构建依赖项的 WPF 应用程序打包到 UWP 包中?

How to package a WPF app with post build dependencies into UWP package?

我正在尝试使用 C# 打包项目将 wpf 应用程序打包到 UWP 包中。问题是我的应用程序具有 dll 依赖项 (c++ dll),这些依赖项在其输出中随 post 构建事件一起提供。因此,当我在打包项目中添加对我的应用程序的引用时,其输出仅包含从桌面应用程序构建生成的 dll - 所有其他 dll(来自 post 构建事件)都将被忽略。

然后我决定为打包项目制作相同的 post 构建事件并提供缺少的 dll,但不幸的是,打包过程没有考虑它们。

有没有办法强制将此 dll 打包到结果 appx 中?

我想出了一个适合我的情况的决定(不确定这是最好的……)。

假设桌面应用程序的名称是 MyApp。该解决方案包含以下步骤:

  1. 在桌面应用中添加post构建事件,将其输出复制到打包项目中的“MyApp”目录。

  2. 将此目录包含在打包项目中,并使其作为内容复制。

要使整个目录成为内容,请在打包项目 wapproj 文件中添加以下 ItemGroup:

<ItemGroup>
    <Content Include="MyApp\**\*.*">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>  

这使得文件夹的内容被复制到打包项目的输出中。由于它与引用的应用程序同名,因此它被复制到相同的输出目录中,打包项目为每个引用的应用程序创建。它接缝发生在正确的时间(在调用 MakePri.exe 之前)并且所有依赖项都从打包项目的构建过程中考虑。

扩展 Yordans 的回答,如果你想引用项目之外的目录,请包含 Link 元数据:

<Content Include="..\release\win-unpacked\**\*.*" Link="app\%(RecursiveDir)%(Filename)%(Extension)">
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>