【问题标题】:Use old NuGet package with modern Visual Studio toolset将旧的 NuGet 包与现代 Visual Studio 工具集一起使用
【发布时间】:2017-05-24 22:19:25
【问题描述】:

我正在修改 C++ 项目中的 NuGet 包管理器并遇到问题。在我的 VS 2017 RC(具有 Platform Toolset v.141)项目中,我添加了两个包——特别是 GLEW 和 GLFW。我成功包含了相应的标头,但无法链接我的项目 - 显然这些包不是为 VS 2017 构建的。

packages/<package>/build/native/lib 中有几个v### 子文件夹:v100, v110 用于 GLEW,v100, v110, v120, v140 用于 GLFW。据我了解,这些包含针对相应 VS 工具集编译的二进制文件。如果我将项目的平台工具集从 v141 更改为 v140(我还安装了 VS 2015),GLFW 链接错误就会消失(因为 VS 从 GLFW 包中找到了相应的二进制文件),但 GLEW 仍然没有链接 - 并且我既没有v110 工具集,也不想在那里降级。

有没有办法将旧的 NuGet C++ 包链接到具有现代平台工具集的项目?如果可以的话,我可以从源代码构建包 - 只要它保持在某个时候自动管理的 nuget 包。

【问题讨论】:

    标签: c++ visual-studio nuget version


    【解决方案1】:

    我们无法将较旧的 NuGet C++ 包链接到具有现代平台工具集的项目。

    Visual Studio 支持多个平台工具集,但现代平台工具集不向后兼容。所以GLEW的v100、v110在VS 2015中使用平台工具集v140时会产生链接错误。

    在 Visual Studio 2015 中使用 v100、v110 for GLEW 的最佳方法是安装 v110 工具集并使用它来维护与二进制兼容的旧代码。

    关于旧平台配置程序的详细信息,请参考: https://msdn.microsoft.com/en-us/library/jj851139.aspx

    【讨论】:

      【解决方案2】:

      似乎没有包含 v141 PlatformToolset 的软件包。您始终可以通过编辑 packages\googletest.1.8.0.0\build\native\googletest.targets 中包含的配置来强制将 v140 目标二进制文件与 v141 项目链接:

      <ItemDefinitionGroup Label="Win32 and v140 and Release" Condition="'$(Platform.ToLower())' == 'win32' And '$(PlatformToolset.ToLower())' == 'v140' And ( $(Configuration.ToLower().IndexOf('debug')) == -1 )"> 
      

      <ItemDefinitionGroup Label="Win32 and v140 and Release" Condition="'$(Platform.ToLower())' == 'win32' And '$(PlatformToolset.ToLower())' == 'v141' And ( $(Configuration.ToLower().IndexOf('debug')) == -1 )"> 
      

      但你的里程可能会有所不同。

      【讨论】:

        猜你喜欢
        • 2018-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多