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, це вже покусало занадто багато програмістів. Виправити це досить просто: Проект + Властивості, вкладка Програма, змініть Target Framework на ".NET Framework 4" замість профілю клієнта, вибраного за замовчуванням.

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

ОНОВЛЕННЯ: милостиво це все виправлено у VS2012. Що більше не робить профіль клієнта типовим для нового проекту. І профіль клієнта повністю припинив роботу в .NET 4.5, добре позбавившись.


1
Дякую за це. Для моєї DLL було встановлено .Net 4.0, але для пісочниці було встановлено профіль клієнта .Net 4.0. Після роботи над цим проектом протягом 5 місяців, кількість паніки у мене виникла, коли все це просто розвалилося, здавалося б, без причини ... Принаймні, я буду знати про наступний раз!
Озза

27
Такі відповіді - справжнє м’ясо та картопля цього сайту. Моя віра в людяність дещо зросла, і мій проект нарешті складається. Дякую.
CloudMeta

1
Я змінив Target Framework на 4.0 у всіх своїх проектах, проте простори імен відповідних проектів досі не вдається знайти. Чи є ще щось, що я повинен переконатись?
Steven Ryssaert

@UwConcept - мова не про номер версії. Мова йде про повний профіль клієнта. Почніть власне запитання, якщо це не допоможе.
Ганс Пасант,

@HansPassant Так, вибачте, якщо моє запитання заплутало. Я використовував версію клієнта 4.0 і змінив її на 4.0. Тим не менше, простори імен в інших проектах у моєму рішенні не можуть бути знайдені міжпроектними.
Steven Ryssaert

8

Переконайтеся, що обидва проекти використовують профіль не-клієнта для своєї цільової структури (для цього перейдіть до властивостей кожного проекту).


Дякую Марк. Ви з Гансом прибили це на голову, це зафіксувало.
Озза

2

Одна з можливостей полягає в тому, що цільова версія .NET Framework бібліотеки класів є вищою, ніж версія проекту. Я зіткнувся з цією проблемою і вирішив її, закривши візуальну студію, знову відкривши візуальну студію, очистивши та відновивши рішення. Це спрацювало для мене. У деяких інших публікаціях я прочитав відповіді, і більшість користувачів вирішили проблему, дотримуючись цього шляху.


1
На це питання вже було задовільно відповідено більше чотирьох з половиною років тому.
Озза

+ за додавання корисної та корисної інформації про близькоспоріднену помилку
Ерік Браун - Кал

@Ozzah, як хтось, хто вивчає цю помилку в 2017 році, я, безумовно, радий мати більше інформації. +1
Коутулху

1

Спробуйте спочатку побудувати лише проект із dll Sandbox самостійно.

Потім направте ваш виконуваний проект на необхідну dll і переконайтеся copy local, що встановлено на true. у довідкових налаштуваннях.

Потім побудуйте виконуваний проект.


А для любові до всього святого переконайтеся, що для цільового типу встановлено Compile, а не Content (яким мій був чомусь)
jcolebrand

0

Зміна цільового фреймворку з "Профілю клієнта .NET Framweork 4" на ".NET Framework 4" спрацювала у мене з подібною проблемою. Я погоджуюсь, що профіль клієнта, здається, не має великої переваги у його використанні. Здається, мене прибивають дивні помилки, на які я полюю, поки не згадаю, що за замовчуванням Visual Studio відповідає профілю клієнта. Я думаю, мораль історії, коли виникає помилка, така: якщо "Відновити рішення" не працює, перевірте цільову структуру ...


0

Якщо ви вже спробували змінити фреймворк, але все ще не спрацювали, сподіваюся, це працює для вас (як це було для мене): просто додайте необхідні посилання у своїх проектах. Дуже очевидно, але я робив це неправильно, поки не зрозумів, у чому проблема.


0

У мене щойно виникла ця проблема, і виявилося, що у мене використовувалось кілька просторів імен, які мали одне і те ж ім'я об'єкта (тобто бізнес-об'єкти мали ті самі імена, що і моделі mvc);

Повна кваліфікація імен вирішила проблему для мене.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.