Попытка немного поэкспериментировать с C++ CLI, нацеливая .NET 4.0 (не 4.5), я получаю немного раздражающую проблему. Код ниже дает предупреждение IntelliSense в моей Visual Studio 2012; он жалуется, что BindingFlags доступен в нескольких сборках. (Код компилируется нормально, но предупреждение раздражает, так как это делает неисправность IntelliSense.)Ошибка: «BindingFlags» неоднозначно всякий раз, когда используется vcclr.h
#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 работать в этом случае также ...
Там довольно серьезная проблема, связанная с директивой #using, он жестко закодирован для просмотра в .NE Прежде всего. Это было неуместно, так как .NET 4. Это, без сомнения, * очень * сложно исправить таким образом, чтобы не разбивать много старых проектов. Лучшее место для этого можно найти на сайте connect.microsoft.com. Ограничьте это, сохранив этот код в отдельном файле .cpp. –
Спасибо за подсказку Ханс, я тоже подумал об этом - чтобы локальная копия файла vcclr.h с удаленной линией удалялась ... На основе этого будет сделан ответ. –