将库与 NuGet 包链接为 Visual Studio 中的依赖项

Linking Libraries with NuGet Packages as dependencies in Visual Studio

我有一个包含 main.cpp.

的控制台项目 LinkExample
#include <Library/Logger.hpp>
int main()
{
    WriteSomething();
    return 0;
}

LinkExample 链接了一个名为 Library 的静态库项目。 Library.Lib 链接正确。

图书馆包含 Logger.hpp

#pragma once
void WriteSomething();

Logger.cpp

#include <boost/log/trivial.hpp>
#include <Library/Logger.hpp>

void WriteSomething()
{
    BOOST_LOG_TRIVIAL(trace) << "Trace";
}

NuGet 包是:

  <?xml version="1.0" encoding="utf-8"?>
  <packages>
    <package id="boost" version="1.63.0.0" targetFramework="native" />
    <package id="boost_log-vc140" version="1.63.0.0" targetFramework="native" />
  </packages>

LinkExample 未构建并显示文件 libboost_log-vc140-mt-gd-1_63.lib 的错误 LNK1104。

当静态链接时,我希望这个库被烘焙到 Library,为什么这没有发生,我该如何解决?

我知道我可以将软件包添加到 LinkExample 但这不是一个长期的解决方案。

在解决方案运行之前添加包将包括这些包。

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="boost" version="1.63.0.0" targetFramework="native" />
  <package id="boost_date_time-vc140" version="1.63.0.0" targetFramework="native" />
  <package id="boost_filesystem-vc140" version="1.63.0.0" targetFramework="native" />
  <package id="boost_log-vc140" version="1.63.0.0" targetFramework="native" />
  <package id="boost_system-vc140" version="1.63.0.0" targetFramework="native" />
  <package id="boost_thread-vc140" version="1.63.0.0" targetFramework="native" />
</packages>

在一个更大的项目中,在将 boost 切换为动态链接后,这种方法开始分崩离析。

如何解决 lib 文件被我的客户库链接的根本问题?

请注意,"Link Library Dependencies" 设置在这里没有任何作用,使用此设置需要与 NuGet 不兼容的项目设置。

这是 Visual studio 的默认行为。我们无法在链接客户库提供的 LinkExample 项目中直接使用 NuGet 包作为依赖项。 Visual studio在我们构建LinkExample工程时只加载静态Library Project的文件,不会加载静态Library Project的那些依赖。所以我同意 Jeroen Heier 的观点,如果你想将这些包用于 LinkExample 项目,你需要将包添加到 LinkExample。