Пытаясь немного поэкспериментировать с C++ CLI, ориентируясь на .NET 4.0 (не 4.5), я получаю немного раздражающую проблему. Код ниже дает предупреждение IntelliSense в моей Visual Studio 2012; он жалуется, что 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 попытаться загрузить его еще раз из другого места => конфликт.
Использование функции «Перейти к определению» (F12) в BindingFlags дает мне следующие пути:
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 работать и в этом случае…