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

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

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

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

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

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

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

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

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

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

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

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

Сначала создайте проект только с помощью десктопа Sandbox независимо.

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

Полностью квалифицируя имена, я решил проблему.