【发布时间】:2013-08-15 00:02:10
【问题描述】:
我们正在 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 是试图包含该包的项目。 (为简单起见和项目隐私,对文件名进行了编辑。)
我可以让任何一个受影响的项目再次加载的唯一方法是手动删除从foo.vcxproj 导入的Bar.WinRT.redist 并重新加载项目。重新加载项目后,我可以从包管理器命令行或“管理 NuGet 包”对话框重新安装 Bar.WinRT.redist。
AutoPackage 分别从头文件和 dll 自动构建“Bar.WinRT”和“Bar.WinRT.redist”。只有用于构建最终 .exe 的项目需要“redist”包,但它会自动拉入,因为 AutoPackage 使非 redist 包(包含头文件)依赖于 redist 包。
包含外部包并仍然正确加载项目的最佳方法是什么(并且在生成输出中精确地使用 .exe 结束 DLL 的一个副本)?
【问题讨论】:
标签: c++ visual-studio visual-c++ nuget