Когда вы получаете объект SPSite от GetContextSite, вы получаете объект, который используется совместно со всем, что выполняется на этой странице.
После того, как вы утилизируете его, другой код пытается его использовать - отсюда и ошибка.
Вы должны распоряжаться только теми объектами, которые вы создали сами, а не теми, которые вы получаете с GetContextSite.
Быстрое решение (как говорит Iambriansreed) состоит в том, чтобы удалить блок finally и заменить первые две строки на.
SPSite site = SPContext.Current.Site; // Do you even need this?
SPweb web = SPContext.Current.Web;
Повышение производительности и отсутствие утечек памяти, поскольку среда SharePoint обрабатывает как создание, так и удаление объектов, извлеченных с помощью SPContext.
Однако - это сложный и плохо изученный предмет, поэтому необходимо внимательно прочитать Рекомендации: использование одноразовых объектов Windows SharePoint Services и использование SPDisposeCheck tool . *