VS2015 - 引用程序集产生 C2869 错误

VS2015 - referenced assembly yields C2869 error

我正在使用 Visual Studio 2015 在 C++ 中构建 DLL。

DLL 的 Visual Studio 项目引用了 .NET 程序集。 (项目中的一个文件是 C++/CLI 文件。) 此 .NET 程序集由第三方提供,他们已提供新版本的程序集。

使用旧版本的程序集构建项目工作正常,但是当我使用新版本的程序集构建时,出现以下错误:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\system_error(24): error C2869: 'std::errc': has already been defined to be a namespace
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\system_error(109): error C2869: 'std::io_errc': has already been defined to be a namespace

用 ildasm 查看新旧版本的程序集,我可以看到新程序集在命名空间 std::errc 中定义了枚举 errc,而旧程序集在命名空间中定义了枚举 errc std。 io_errc 也有类似的差异。

构建过程似乎在尝试编译 system_error 之前读取了引用的程序集,从而导致了上述错误。我能做些什么来使新程序集与 Visual Studio 2015 相协调吗?

此问题的解决方法是 #define 在包含 STL headers.

之前将违规项目转移到其他内容
#define errc Errc
#define io_errc Io_errc
#include <system_error>

参见https://social.msdn.microsoft.com/Forums/en-US/ee40b218-350a-4b21-ae73-28838ccca2ea/ccli-error-c2869-stdpointersafety-has-already-been-defined-to-be-a-namespace?forum=vcgeneral