我们正在 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.redist
from的导入foo.vcxproj
并重新加载项目。Bar.WinRT.redist
重新加载项目后,我可以从包管理器命令行或“管理 NuGet 包”对话框重新安装。
AutoPackage 分别从头文件和 dll 中自动构建“Bar.WinRT”和“Bar.WinRT.redist”。只有用于构建最终 .exe 的项目需要“redist”包,但它会自动拉入,因为 AutoPackage 使非 redist 包(包含头文件)依赖于 redist 包。
包含外部包并且仍然正确加载项目的最佳方法是什么(并且在构建输出中精确地使用 .exe 结束一个 DLL 副本)?