如何关联新项目和已下载的NuGet包?

时间:2017-10-25 23:46:06

标签: visual-studio visual-studio-2015 nuget visual-studio-2017

如何轻松关联新项目和已下载的NuGet包?

示例场景:

我创建了一个名为mylib的Visual Studio解决方案和项目。我安装了Nuget软件包,比如C ++ boost库。我可以立即使用boost库而无需手动设置头/链接器目录。这很方便。

现在,我在名为executable的同一解决方案下创建一个新项目(或添加一个现有项目)。我也想在这个项目中使用boost库。

不幸的是,没有图形或IDE接口来链接新项目的依赖项。

enter image description here

上图显示已安装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的项目属性页中找到此类功能。

1 个答案:

答案 0 :(得分:1)

  

要解决此问题,我必须手动修改项目(例如.vcxproj)XML文件。我从mylib复制并粘贴到可执行文件

根据您的说明,似乎程序包boost尚未正确安装到项目executable。因此,您可以在程序包管理器控制台中使用NuGet命令行:

Update-Package -reinstall

强制将软件包重新安装到executable项目。