我们正在 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 副本)?