如何轻松关联新项目和已下载的NuGet包?
示例场景:
我创建了一个名为mylib
的Visual Studio解决方案和项目。我安装了Nuget软件包,比如C ++ boost库。我可以立即使用boost库而无需手动设置头/链接器目录。这很方便。
现在,我在名为executable
的同一解决方案下创建一个新项目(或添加一个现有项目)。我也想在这个项目中使用boost库。
不幸的是,没有图形或IDE接口来链接新项目的依赖项。
上图显示已安装NuGet软件包,但新添加的项目executable
仍然没有链接。
要解决此问题,我必须手动修改项目(例如.vcxproj)XML文件。我从mylib
复制并粘贴到executable
。
<ImportGroup Label="ExtensionTargets">
<Import Project="packages\boost.1.65.1.0\build\native\boost.targets" Condition="Exists('packages\boost.1.65.1.0\build\native\boost.targets')" />
<Import Project="packages\boost_regex-vc141.1.65.1.0\build\native\boost_regex-vc141.targets" Condition="Exists('packages\boost_regex-vc141.1.65.1.0\build\native\boost_regex-vc141.targets')" />
</ImportGroup>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('packages\boost.1.65.1.0\build\native\boost.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\boost.1.65.1.0\build\native\boost.targets'))" />
<Error Condition="!Exists('packages\boost_regex-vc141.1.65.1.0\build\native\boost_regex-vc141.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\boost_regex-vc141.1.65.1.0\build\native\boost_regex-vc141.targets'))" />
</Target>
然后就可以了。
或者,卸载已下载的NuGet软件包并重新安装它们也有效。但这显然不是一个好的解决方案。
我想知道是否有一种很好的方法可以重新关联已下载的NuGet包和项目之间的依赖关系。我无法在Visual Studio 2017的项目属性页中找到此类功能。
答案 0 :(得分:1)
要解决此问题,我必须手动修改项目(例如.vcxproj)XML文件。我从mylib复制并粘贴到可执行文件
根据您的说明,似乎程序包boost
尚未正确安装到项目executable
。因此,您可以在程序包管理器控制台中使用NuGet命令行:
Update-Package -reinstall
强制将软件包重新安装到executable
项目。