尝试使用 C++ CLI 进行一些试验,针对 .NET 4.0(不是 4.5),我遇到了一个有点烦人的问题。下面的代码在我的 Visual Studio 2012 中给出了 IntelliSense 警告;它抱怨 BindingFlags 在多个程序集中可用。(代码编译得很好,但警告很烦人,因为它会使 IntelliSense 发生故障。)
#include "stdafx.h"
#include <vcclr.h>
using namespace System;
using namespace System::Reflection;
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
Console::ReadKey();
auto properties = Console::typeid->GetProperties(BindingFlags::Instance | BindingFlags::Public);
return 0;
}
如果我删除 vcclr.h 文件,一切正常。我查看了文件,似乎有这样一行:
#using <mscorlib.dll>
我想这就是我收到错误的原因。mscorlib.dll 已被我的项目自动引用,并且使用使 Visual Studio 尝试从另一个位置再次加载它 => 冲突。
使用 BindingFlags 上的“转到定义”(F12) 函数为我提供了以下路径:
enum class System::Reflection::BindingFlags - c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll
enum class System::Reflection::BindingFlags - c:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll
我该如何解决这个问题?我现在绝对不想以 .NET 4.5 为目标,因为在这种情况下,所有用户都还没有使用 .NET 4.5。尽管如此,让 IntelliSens 在这种情况下也能正常工作会是“非常好的”......