1

我们正在 VS2012 中构建一个 Windows 应用商店应用程序,它依赖于一个 C#(主 UI)项目、几个 C++ 项目(用于支持代码)和一个外部专有库。外部库作为 DLL + 头文件提供给我们,我们使用AutoPackage将其放入本机NuGet包中。

其中三个 C++ 项目调用外部库。我可以为这三个项目中的每一个安装外部库包(从 GUI 或命令行),并且可以编译和构建整个解决方案,而不会受到 Visual Studio 的抱怨。但是,如果我退出 Visual Studio 然后重新打开解决方案,或者如果我尝试卸载并重新加载包括包在内的项目,Visual Studio 会拒绝加载两个导入 NuGet 包的项目。它说:

foo.vcxproj : error  : The item "..\..\..\..\abc\packages\Bar.WinRT.redist.1.2.3.4\build\native\bin\Win32\bar.dll" already exists under the filter "".

Bar.WinRT.redist.1.2.3.4包含的外部库包在哪里bar.dll,并且foo是试图包含该包的项目。(为简单起见,编辑了文件名和项目隐私。)

我可以让任何一个受影响的项目再次加载的唯一方法是手动删除Bar.WinRT.redistfrom的导入foo.vcxproj并重新加载项目。Bar.WinRT.redist重新加载项目后,我可以从包管理器命令行或“管理 NuGet 包”对话框重新安装。

AutoPackage 分别从头文件和 dll 中自动构建“Bar.WinRT”和“Bar.WinRT.redist”。只有用于构建最终 .exe 的项目需要“redist”包,但它会自动拉入,因为 AutoPackage 使非 redist 包(包含头文件)依赖于 redist 包。

包含外部包并且仍然正确加载项目的最佳方法是什么(并且在构建输出中精确地使用 .exe 结束一个 DLL 副本)?

4

1 回答 1

0

问题的根本原因似乎是加载失败的项目在其项目文件中具有 AppContainerApplication 属性设置,并且没有 WindowsAppContainer 属性设置。

我通过手动编辑项目 XML 文件删除了 AppContainerSetting 属性。然后我

  1. Windows Store App Support在常规属性页面上启用,
  2. 在 C/C++ All Options 页面上将Consume Windows Runtime Extension选项设置为Yes (/ZW)
  3. 将 设置Enable Minimal RebuildNo (/Gm-),也在 C/C++ 所有选项页面上。

在添加 NuGet 包之前,尚不清楚项目是如何加载的,但更新设置似乎已经解决了这个问题。

于 2013-08-14T16:02:10.830 回答