Отладка нескольких приложений Silverlight - PullRequest
2 голосов
/ 05 декабря 2009

У меня три приложения Silverlight 3 в одном решении. В моем проекте хостинга asp.net у меня есть отдельная страница для всех трех проектов. Когда я перемещаюсь между страницами, единственные точки останова Silverlight, которые попадают, - это те, которые загружает начальная страница.

Эта проблема началась только недавно. Раньше я мог отлаживать все проекты Silverlight одновременно. Есть идеи? Я удалил папку ClientBin, я удалил все файлы и восстановил их из системы контроля версий. Кажется, ничего не работает.

Ответы [ 2 ]

2 голосов
/ 07 декабря 2009

«Проблема началась только недавно». Что изменилось? Вот некоторые догадки: -

  • Вы обновились до Windows 7
  • Вы установили больше памяти
  • При тестировании больше не работает какое-то другое приложение, поглощающее память.

По умолчанию IE8 будет запускать несколько процессов как минимум 2. Один для фрейма браузера и один для содержимого начальной вкладки. Когда вы открываете больше окон и вкладок, IE может добавлять новые процессы в набор, который он использует в настоящее время.

Когда вы отлаживаете VS запускает новый сеанс IE8 и присоединяется к процессу, обрабатывающему содержимое одной открытой вкладки (это не беспокоит присоединение к процессу родительского фрейма). Однако, когда вы перейдете к своему приложению, IE8 запустит новый процесс, к которому VS не будет подключен. Это заставит вас открыть диалоговое окно «Присоединить к процессу» и сделать это вручную.

Вы можете управлять этой функцией IE8 (называемой BTW LCIE, IE со слабой связью) из Реестра.

В ключе HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main добавить новое значение DWORD TabProcGrowth. Установите его значение равным 1. Теперь IE8 будет когда-либо создавать только 2 процесса за сеанс, один для фрейма и один для всего содержимого вкладки и окна, к которому будет присоединен VS.

Возможно, это немного драконовски, если вы также используете IE8 в качестве основного браузера. Один из вариантов - оставить IE8 для тестирования и использовать другой браузер для общего просмотра. Другой вариант - это вариант вышеописанного. Вместо создания TabProcGrowth в качестве DWORD вместо этого создайте его как строковый тип и установите для него значение «small». В этом режиме IE8 гораздо менее агрессивен в количестве процессов, которые он открывает. Конечно, вы можете создать пару сценариев для создания и удаления записи реестра.

Примечание. Без записи в реестре IE8 использует свою собственную иерархическую структуру, которая зависит от доступной памяти и т. Д., Чтобы определить, требуется ли новый процесс или нет. Это может объяснить, почему в прошлом ваша отладка работала и что, по-видимому, ни по какой причине она перестала работать.

1 голос
/ 07 декабря 2009

Здесь была проблема:

В одном из моих дочерних окон был Silverlight, который вызывал службу .Net Ria. Вызов службы завершился ошибкой.

В следующий раз, когда я несколько отладил, отладчик не подключился к дочерним окнам. Пришлось прикреплять к дочерним окнам вручную.

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

Я попытался прервать вызов службы Ria, и мне пришлось снова присоединять вручную. Немного странным является то, что закрытие Visual Studio и даже перезагрузка компьютера не приводит к автоматическому присоединению Visual Studio. Вы должны иметь сеанс отладки, где дочернее окно делает успешный вызов Ria Service, чтобы исправить это.

Примечание: Ошибка RIA, которая нарушала работу моего отладчика, была вызвана ошибочным включением в запрос домена (т. Е. ...

return Context.SOME_ENTITY.Include("Misspelled_Association_Property");

) не все исключения RIA вызывают эту проблему.

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

Вот что у меня есть:

Я использую LinqToEntitiesDomainService из предварительной версии .Net RIA Services, выпущенной в июле 2009 года.

Чтобы еще больше усложнить ситуацию, поскольку мое приложение использует серверную часть Oracle, я использую поставщика DevCont dotConnect Entities в качестве модели EntityFramework для моей доменной службы.

Когда у меня будет время, я попробую это на RIA за ноябрь 2009 года и на стандартном SQL-сервере и EF, чтобы проверить, не возникла ли у меня та же проблема. Если это так, я сообщу об этом Microsoft как визуальная ошибка студии.

...