Нечетные проблемы с внутренними классами с VS 2008


1

Я начинаю проект, который разбит на несколько проектов VS, и я планировал иметь отдельные проекты тестирования для каждого из проектов, поэтому у меня было бы такое решение :

  • Project1
  • Project1.Test
  • Проект2
  • Project2.Test

Есть некоторые internal классы, которые я хочу протестировать. Поэтому я использовал Visual Studio 2008 (SP1) для создания тестовых заглушек в своем тестовом проекте и добавил InternalsVisibleTo. Но я получаю красную squiggly линию под внутренним классом. Если я скомпилирую, я получаю успешную сборку, и, глядя на метод тестирования, красные squiggles исчезли.

Но если я напряг файл, то squiggles вернутся и у меня нет intellisense на внутреннем классе.

internal находится в пределах Проекта1, и тест находится в Project1.Test. Для полноты я решил сделать точно такой же способ генерации тестового метода, но на этот раз в Project2.Test, и на этот раз показано, что он полностью работает. Я не получаю красных squiggles, я получаю intellisense, все.

Я попытался удалить Project1.Test и воссоздавать метод испытания, все, что я могу думать, но независимо от того, что я делаю, я не могу получить внутренний быть полностью видны в его парном проекте Test, только в том, что составляет , рассчитанный на для другого проекта.

Это делает мой орех, что он не работает!

  0

Это VS2008 SP1? 22 фев. 092009-02-22 07:49:47

  0

Да, обновил сообщение для показа, что 22 фев. 092009-02-22 09:28:44

  0

у вас есть resharper? или любое другое дополнение, которое может изменить подсветку синтаксиса? 25 фев. 092009-02-25 13:14:54

  0

Нет, нет надстроек 26 фев. 092009-02-26 00:32:22

0

Возможно, это была проблема с файлом DB IntelliSense. Попробуйте удалить его и попробуйте VS и восстановите базу данных.

Для этого закрыть решение и удалить файлы (все?) .ncb. Чтобы быть в безопасности, просто переименуйте их на что-то вроде .nc4 или что-то еще. Восстановите решение и перестройте его. Дайте мне знать, если это сработает.

EDIT: По-видимому, файлы ncb предназначены только для проектов на C++. Я не знаю, где находится IntelliSense DB для проектов C#, и я не могу узнать. Если бы я был вами, я все равно попытался бы найти способ сбросить БД.

Асаф

  0

Для C# intellisense для foo.dll находится в файле foo.xml, сгенерированном, если включено; однако ссылки на проект внутри решения не используют это - они могут напрямую обращаться к метаданным. 22 фев. 092009-02-22 08:50:54


1

Я видел это слишком, особенно при использовании сильных имен. Честно говоря, я не волновался; пока он правильно компилирует и проверяет, я могу жить с нечетным сбоем. Например, если вы получаете один вопрос о создании, я видел, как он жалуется, что он не может найти другие (внутренние) методы, но чистая сборка не показывает ошибок. Опять же, я не буду этому беспокоиться ... (может быть, я слишком прощаю?).

В частности, только редко, что мне нужно использовать внутренний тип/элемент в тестах (большую часть времени я попытаюсь проверить через открытый API); поэтому отсутствие 100% надежного intellisense обычно не является большой проблемой. Я уже знаю тип/член, который я ищу (copy/paste ;-p).

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

  0

Да, это не проблема с Хью, но это раздражает, когда вы пропустили член cuz intellisense. 22 фев. 092009-02-22 09:30:20


2

Можете ли вы использовать константу строки или что-то иное, кроме точного литерала (без конкатенации) в атрибуте InternalsVisibleTo? У нас была привычка использовать константу строки для ее определения, и это отлично работает для всего, кроме intellisense. Замените, вставив как простую строку, и она работает.

Удаление файла .suo (той же папки, что и файл решения) также может помочь.

  0

, используя точную строку, решил это для меня. 14 июл. 102010-07-14 01:03:28