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

时间:2017-01-12 16:45:05

标签: .net visual-studio-2015 c++-cli .net-assembly

我正在使用C ++中的Visual Studio 2015构建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查看程序集的旧版本和新版本我可以看到新程序集在命名空间errc中定义了枚举std::errc,而旧程序集在命名空间{{}中定义了枚举errc 1}}。 io_errc也有类似的差异。

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

1 个答案:

答案 0 :(得分:0)

此问题的解决方法是在包含STL标头之前将#define违规项目改为其他内容。

#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