【发布时间】:2018-04-07 05:00:52
【问题描述】:
如何轻松关联新项目和已下载的 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 的项目属性页中找不到此类功能。
【问题讨论】:
-
您是否也将nuget包
boost安装到项目executable中?怎么添加的,和添加mylib项目一样吗?要重新关联已下载的 NuGet 包和项目之间的依赖关系,可以在包管理器控制台窗口中使用命令行Update-Package -Id <package_name> –reinstall。 -
@Leo-MSFT 感谢您的评论!我可能是错的,但我无法将
boost安装到executable项目中。如屏幕截图所示,executable显示为已经有boost。顺便说一句,Update-Package似乎有效!这就是我想做的。
标签: visual-studio visual-studio-2015 nuget visual-studio-2017