Где находится мой Объект? - PullRequest
3 голосов
/ 14 октября 2008

У меня странная проблема: я использую SPContext.Current.Web на странице .aspx, но в конце я получаю сообщение «Попытка использовать объект SPWeb, который был закрыт или удален и более недействителен. " сообщение об ошибке.

Из того, что я вижу, SPContext.Current.Web кем-то избавлен, , но я не знаю, где . Мне просто интересно: с отладчиком Visual Studio 2005 я могу каким-то образом увидеть, где / кто располагал объект? Поскольку я не создаю и не имею исходного кода, установка точек останова является проблемой.

Что было бы хорошим подходом для выяснения, кто и где размещает данный объект, без случайного комментирования строк?

(Примечание: проблема была решена, но сам вопрос также применяется за пределами Sharepoint)

Ответы [ 3 ]

6 голосов
/ 14 октября 2008

Проверьте, помогает ли это:

  1. Добавить новую точку останова, используя Отладка> Новая точка останова> Перерыв в функции ... (Ctrl + B) .
  2. Введите Microsoft.SharePoint.SPWeb.Dispose в поле редактирования функции.
  3. Закройте диалоговое окно, в котором говорится, что Intellisense не может найти указанное местоположение.
  4. Запуск под отладчиком.
  5. Когда достигается точка останова, вы можете увидеть в стеке вызовов, кто вызвал метод Dispose. Надеемся, что в некоторых случаях точка останова достигнет одного фрейма стека в вашем исходном коде.

Если появляется диалоговое окно с сообщением, что Нет исходного кода для текущего местоположения при достижении точки останова, отклонить его.


Примечание: Поскольку у меня не установлен SharePoint, я проверил это с System.IO.StreamReader.Dispose, но я предполагаю, что это также должно работать для SPContext.Current.Web. Напишите об этом.

0 голосов
/ 27 февраля 2009

В своем пользовательском коде убедитесь, что вы не получили ссылку на фактический объект SPWeb объекта Context и удалите его. Например, следующее очень плохо.

using (SPWeb myWeb = SPContext.Current.Web)
{
   // do something
}

Это приведет к удалению объекта SPContext и может не вызвать проблем в вашем коде, но, скорее всего, приведет к проблемам позже.

0 голосов
/ 14 октября 2008

Вы должны прочитать это: http://msdn.microsoft.com/en-us/library/aa973248.aspx

Чтобы быть быстрым: вы должны утилизировать все свои SPWeb и SPSite, используя либо

using(SPWeb web = ...)
{
    ....
}

или

SPWeb web = ...
...
web.Dispose()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...