Visual Studio 2010 внезапно не видит пространство имен?

83

В моем решении C # WinForms есть два проекта. DLL, которая является основным проектом, над которым я работаю, и исполняемый файл WinForms, который я называю «песочницей», чтобы я мог легко скомпилировать / запустить / отладить DLL за один раз.

Я работаю в .Net 4.0 для обоих проектов.

Все работало нормально, пока я не добавил, казалось бы, невинный код и ссылку на System.Web в DLL. Теперь мой проект Sandbox не видит пространство имен проекта DLL. Я не менял ничего, что, по моему мнению, должно было повлиять на это.

Если я удалю ссылку проекта на DLL из ссылок на песочницу и снова добавлю ее, то все красные подчеркивания исчезнут, а цветовая кодировка вернется для всех моих классов и т. Д .; но как только я пытаюсь построить решение, все снова разваливается.

Когда я щелкаю правой кнопкой мыши проект DLL в ссылках песочницы и просматриваю в обозревателе объектов, я вижу пространство имен и все, что там есть.

У меня такое чувство, что это может быть какая-то ошибка?

Это какая-то ошибка VS2010? У меня была такая же проблема несколько месяцев назад, и я мог исправить ее, только создав совершенно новый проект и повторно импортировав свои файлы. Однако на этот раз у меня есть баджиллион файлов, и я буду делать это только в крайнем случае!

Изменить: после панического просмотра и отмены всех моих изменений, попытки найти причину проблем, кажется, это такая строка:

string url = "http://maps.google.com?q=" + HttpUtility.UrlEncode(address);

Если я закомментирую эту строку, я не получу ошибок пространства имен и проект будет построен нормально. Однако я не вижу ничего плохого в этой строке.

Озза
источник

Ответы:

149

Я готов объявить это ошибкой в ​​VS2010, это уже укусило слишком многих программистов. Исправить легко: Project + Properties, вкладка Application, измените Target Framework на «.NET Framework 4» вместо профиля клиента, который выбран по умолчанию.

System.Web не входит в профиль клиента. Во-первых, иметь эту опцию довольно глупо, профиль клиента всего на 15% меньше, чем у полной версии .NET 4.0. Выбирать его по умолчанию еще глупее. Но я отвлекся.

ОБНОВЛЕНИЕ: к счастью, все это исправлено в VS2012. Что больше не делает профиль клиента по умолчанию для нового проекта. И профиль клиента полностью удалился в .NET 4.5, скатертью дорога.

Ганс Пассан
источник
1
Спасибо за это. Моя DLL была установлена ​​на .Net 4.0, но песочница была установлена ​​на .Net 4.0 Client Profile. После пяти месяцев работы над этим проектом, я испытал такую ​​же панику, когда все это развалилось без всякой причины ... По крайней мере, я буду знать в следующий раз!
Ozzah 02
27
Такого рода ответы и есть настоящее мясо и картошка на этом сайте. Моя вера в человечество немного возросла, и мой проект наконец компилируется. Благодарю.
CloudMeta,
1
Я изменил Target Framework на 4.0 во всех своих проектах, однако пространства имен зависимых проектов все еще не найдены. Есть ли что-нибудь еще, что я должен обязательно проверить?
Стивен Райссарт,
@UwConcept - дело не в номере версии. Речь идет о полном профиле по сравнению с профилем клиента. Если это не поможет, задайте свой вопрос.
Ханс Пассан,
@HansPassant Да, извините, если мой вопрос запутал. Я использовал версию 4.0 Client и изменил ее на 4.0. Тем не менее, пространства имен в других проектах в моем решении не могут быть найдены в нескольких проектах.
Стивен Райссарт,
8

Убедитесь, что оба проекта используют профиль неклиента для своей целевой платформы (для этого перейдите в свойства каждого проекта).

Марк Авениус
источник
Спасибо, Марк. Вы с Гансом прибили его по голове, это исправило его.
Ozzah 02
2

Одна из возможностей состоит в том, что целевая версия библиотеки классов .NET Framework выше, чем версия проекта. Я столкнулся с этой проблемой и решил ее, закрыв визуальную студию, повторно открыв визуальную студию, очистив и перестроив решение. Это сработало для меня. На некоторые другие сообщения я прочитал ответы, и большинство пользователей решили проблему, следуя этим путем.

Мухаммад Сохаил
источник
1
На этот вопрос уже был дан удовлетворительный ответ более четырех с половиной лет назад.
Озза
+ за добавление полезной и полезной информации о тесно связанной ошибке
Эрик Браун - Cal
@Ozzah, как человек, изучающий эту ошибку в 2017 году, я определенно рад получить больше информации. +1
Cowthulhu 02
1

Попробуйте сначала самостоятельно собрать только проект с dll Sandbox.

Затем укажите в исполняемом проекте нужную dll и убедитесь, что для нее copy localустановлено значение true. в справочных настройках.

Затем соберите исполняемый проект.

Робин Мабен
источник
И ради всего святого, убедитесь, что целевой тип установлен на Compile, а не Content (который у меня был по какой-то причине)
jcolebrand
0

Изменение целевой платформы с «.NET Framweork 4 Client Profile» на «.NET Framework 4» помогло мне решить аналогичную проблему. Я согласен с тем, что профиль клиента не имеет большого преимущества в его использовании. Мне кажется, что я сталкиваюсь со странными ошибками, за которыми я охочусь, пока не вспомню, что Visual Studio по умолчанию использует профиль клиента. Я предполагаю, что мораль истории при получении ошибки такова: если «Rebuild Solution» не работает, проверьте Target framework ...

Энди
источник
0

Если вы уже пытались внести изменения в Framework и все еще не сработали, я надеюсь, что это сработает для вас (как и для меня): просто добавьте необходимые ссылки из своих проектов. Совершенно очевидно, но я делал это неправильно, пока не нашел, в чем проблема.

lu1s
источник
0

У меня только что возникла эта проблема, и оказалось, что я использовал несколько пространств имен с одинаковыми именами объектов (т.е. бизнес-объекты имели те же имена, что и модели mvc);

Полное определение имен устранило проблему для меня.

Майк Чил
источник