2008-10-14 3 views
3

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

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

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

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

+0

Я решил настоящую проблему (я действительно случайно удалил объект в совершенно другом месте), но поскольку я решил его, комментируя материал и просто «угадывая», я оставляю вопрос открытым, поскольку он может быть интересен другим , – 2008-10-14 15:12:50

+0

Вы можете отправить этот комментарий в качестве фактического ответа ... – 2008-10-14 15:43:06

+0

Я согласен с Джоном - я прочитал это несколько раз, прежде чем увидеть комментарий, который также решил мою проблему :) – 2009-02-26 22:43:29

ответ

6

Проверьте, если это поможет:

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

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


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

+0

Я проверю как можно скорее, но это выглядит как что-то, что могло бы сработать. – 2008-10-14 18:46:52

0

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

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

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

Смежные вопросы