Windows 10 Universal应用程序 - 根据体系结构嵌入不同的本机库

时间:2015-06-05 13:49:47

标签: visual-studio dll windows-store-apps native win-universal-app

我使用Visual Studio 2015 RC创建了一个空白的Windows 10 Universal应用程序:

File > New > Project ... > Windows Universal > Blank App (Windows Universal)

我想使用第三方提供的现有本机库。这些库是从C代码库构建的,只使用列入白名单的Windows Store API。

我在foo.dll旁边复制了App1.vcxproj,然后将其添加到项目中并修改了链接设置,以便为x86架构使用foo.lib(与foo.dll对应的导入库)。我还右键单击foo.dll并将Content属性设置为Yes,这使得Visual Studio将.dll嵌入到应用程序中。

到目前为止,我可以使用/调试使用第三方库的应用程序。 Visual Studio以某种方式在foo.dll文件夹中的App1.exe旁边部署AppX。并且foo.libfoo.dll的导入库)设法在应用程序启动时成功加载foo.dll(这是因为foo.dll部署在App1.exe旁边)。

现在,对于第三方库,我每个架构都有一个.dll文件:

foo/bin/x86/foo.dll
foo/bin/x86/foo.lib

foo/bin/x64/foo.dll
foo/bin/x64/foo.lib

foo/bin/arm/foo.dll
foo/bin/arm/foo.lib

这就是我的问题:为我的应用程序保留一个Visual Studio项目,我怎样才能说服Visual Studio:

    在构建x86 时,
  • foo/bin/x86/foo.dll旁边部署App1.exe 在构建x64
  • 时,
  • foo/bin/x64/foo.dll旁边部署App1.exe 在构建for arm
  • 时,
  • foo/bin/arm/foo.dll旁边部署App1.exe

到目前为止,我尝试将不同的foo.dll文件放在解决方案文件夹中,例如

third-party/foo/x86/foo.dll
third-party/foo/x64/foo.dll
third-party/foo/arm/foo.dll

这可能有效,因为我可以为每个Content文件有条件地将Yes属性设置为.dll。但是,使用解决方案文件夹使Visual Studio将.dll文件部署在子文件夹中,例如x86架构的AppX\third-party\foo\x86\foo.dll。因此,当应用程序启动时,它不再找到共享库。我希望有一种方法来控制部署目标位置,我认为这将解决我的用例。

希望我的解释足够清楚。

1 个答案:

答案 0 :(得分:0)

只需使用预构建命令行 - 每个配置,这样您就可以在打包之前将正确的DLL从不同的源文件夹复制到项目文件夹。