Не удалось найти тип или пространство имен
В настоящее время я пытаюсь преобразовать проект настраиваемых действий WiX 3.5 в Visual Studio 2008 в WiX 3.7 и Visual Studio 2012, и я получаю следующее исключение:
Не удалось найти тип или имя пространства имен "MyNamespace" (отсутствует директива using или ссылка на сборку?)
На dll определенно ссылаются, и Visual Studio 2012 не видит проблем с пространством имен. Все в пространстве имен даже всплывает в Intellisense, но когда я его создаю, я получаю это исключение.
У кого-нибудь есть представление о том, что здесь происходит?
Дополнительная информация:
Пространство имен, на которое я ссылаюсь, - это библиотека.Net 2.0, а проект пользовательских действий - это проект.Net 2.0.
РЕДАКТИРОВАТЬ:
После дальнейшего расследования я получаю это предупреждение, которое, я предполагаю, является корнем проблемы:
Первичная ссылка "MyNamespace, Version=8.5.1.20, Culture= нейтральная, PublicKeyToken=f593502af6ee46ae, processorArchitecture=MSIL" не может быть разрешена, поскольку она имеет косвенную зависимость от сборки.NET Framework "mscorlib, Version=4.0.0.0, Culture= нейтральный, PublicKeyToken=b77a5c561934e089", который имеет более высокую версию"4.0.0.0", чем версия"2.0.0.0"в текущей целевой структуре.
Почему он пытается использовать mscorelib 4.0, когда это проект 2.0?
3 ответа
Таким образом, оказалось, что dll, являющаяся ссылкой, хотя и была скомпилирована для платформы.Net 2.0, компилировалась с помощью компилятора 4.0. Переключение проекта на компилятор 3.5 решило проблему.
Это может быть совершенно не связано, но у меня вчера была похожая проблема. Я случайно скопировал файл класса (.cs) из одного решения в другое. Ясно, что я не добавил ссылки на другие решения.
В нашем случае, когда указанная dll предназначалась для.Net 4.0, она имела свою собственную ссылку на.Net 4.5.2 dll. Ссылочная целевая платформа 4.0 привела нас к убеждению, что 4.5 или 4.5.1 были достаточны для обработки вещей, но это не так - ссылочный проект должен был быть 4.5.2 для обработки dll и всех его ссылок.
Это явно было ошибкой со стороны создателя DLL.