将库与 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。
我有一个包含 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。