我们正在VS2012中构建一个Windows应用商店应用,它依赖于C#(主UI)项目,几个C ++项目(用于支持代码)和一个外部专有库。外部库作为DLL +头文件提供给我们,我们已使用NuGet将其放入原生AutoPackage包中。
三个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
手动删除foo.vcxproj
的导入并重新加载项目。重新加载项目后,我可以从包管理器命令行或Manage NuGet Packages对话框重新安装Bar.WinRT.redist
。
AutoPackage分别自动从头文件和dll构建“Bar.WinRT”和“Bar.WinRT.redist”。只有用于构建最终.exe的项目需要“redist”包,但它会被自动拉入,因为AutoPackage使非redist包(包含头文件)依赖于redist包。
包含外部程序包的最佳方法是什么,仍然可以正确加载项目(并且只有一个DLL的副本在.exe的构建输出中结束)?
答案 0 :(得分:0)
问题的根本原因似乎是无法加载的项目在其项目文件中具有AppContainerApplication属性设置,并且没有WindowsAppContainer属性设置。
我通过手动编辑项目XML文件删除了AppContainerSetting属性。然后我
Windows Store App Support
Consume Windows Runtime Extension
选项设置为Yes (/ZW)
,然后Enable Minimal Rebuild
设置为No (/Gm-)
。目前尚不清楚在添加NuGet包之前项目是如何加载的,但更新设置似乎已经解决了这个问题。