项目构建失败:"gcroot.h This document is opened by another project"

Project fails to build: "gcroot.h This document is opened by another project"

我正在尝试使用以下教程为 C# class 构建 C++ 包装器: pragmateek C++ wrapper for C# class

当我 运行 构建时,我得到这个错误:

Error C1001 An internal error has occurred in the compiler. [project name] C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\VC\Tools\MSVC.12.25827\include\msclr\gcroot.h 110

当我点击错误时,它会执行以下操作: VS打开gcroot.h到第110行

void swap( gcroot<T> & _right )
    { //VS shows error on this line
            using std::swap;
            swap( _handle, _right._handle );
    }

我收到多个弹出提示全部阅读:

"This document is opened by another project"


我正在使用 VS2017、.net 4.5

有什么我没看到的技巧吗?是否有更好或更多 modern/canonical 的方法来包装 .net class 以便在 C++ 中使用?我的最终目标是在 C# 中进行开发,并在 C++ 中为客户端提供 API。我的客户在项目中走得太远无法回头,然后失去了他们的 C# 人员,现在希望我将我的项目部分切换到 C++。

我已经在 google 上花费了大量时间。

更新: 添加以下任一项会导致它抛出错误:

#include <vcclr.h>
#include <msclr\auto_gcroot.h>

我遇到了同样的问题并找到了适合我的解决方案:

解法: 将包装器构建从 .exe 更改为 .dll

对比: 项目 Properties->Configuration properties->General->Configuration Type->Dynamic Link Library (.dll)

解释: 我遇到了同样的问题,并将 Project Properties->Configuration properties->C/C++->All Options->Conformance modeYes (/permissive-) 更改为 No

新版本指示链接器入口点错误:LNK1561 entry point must be defined

快速检查构建配置发现错误 Configuration Type(exe 而不是 dll)