I have never really had too much cause to use this method before but I am developing some generic classes to deal with column, content type and list management for use in a series of features.

My ListHelper class has a method called DeleteList which looks like this:

            Public Shared Function DeleteList(ByVal List As SPList, ByVal Operation As DeleteOperation) As Boolean

            If Operation = DeleteOperation.DeleteWithBackup Or Operation = DeleteOperation.ForcedDeleteWithBackup Then
                SaveListAsTemplate(List, True)
            End If

            If Operation = DeleteOperation.ForcedDelete Or Operation = DeleteOperation.ForcedDeleteWithBackup Then
                If List.AllowDeletion = False Then
                    List.AllowDeletion = True
                    List.Update()
                End If
            End If

            Try
                List.Delete()
            Catch ex As Exception
                Return False
            End Try

            Return True

        End Function

This is very much a work in progress, but I am having trouble with the SaveListAsTemplate method which looks like this:

            Public Shared Function SaveListAsTemplate(ByVal List As SPList, ByVal SaveContent As Boolean) As String

            If HttpContext.Current IsNot Nothing Then
                Dim tmpFileName As String = List.Title & "_saved_" & Now.ToFileTimeUtc & ".stp"
                List.SaveAsTemplate(tmpFileName, List.Title, "list template saved programmatically", SaveContent)
                Return List.ParentWeb.Site.Url & "/_catalogs/lt/" & tmpFileName
            Else
                Throw New Exception("List template cannot be saved unless the code is running in a valid HttpContext")
            End If

        End Function

The reason for the check into HttpContext is possibly not required, this is the reason for my post.  I cannot get this code to execute from within a console application.  Does the SPList.SaveAsTemplate method require a HttpContext?  If it does it is not metioned in any of the docs that I have seen.

As an aside any other comments on this code gratefully received.


**EDIT: Exception and Stack Trace**


> System.ArgumentException "Value does
> not fall within the expected range" 
> at
> Microsoft.SharePoint.SPGlobal.HandleException(Exception
> ex)    at
> Microsoft.SharePoint.SPList.SaveAsTemplate(String
> strFileName, String strName, String
> strDescription, Boolean bSaveData)   
> at
> XXXXXX.SharePoint.Lists.ListHelper.SaveListAsTemplate(SPList
> List, Boolean SaveContent) in
> C:\SharePoint Development
> Projects\XXXXXX.SharePoint\XXXXXX.SharePoint\Lists\ListHelper.vb:line
> 145    at
> XXXXXX.SharePoint.Lists.ListHelper.DeleteList(SPList
> List, DeleteOperation Operation) in
> C:\SharePoint Development
> Projects\XXXXXX.SharePoint\XXXXXX.SharePoint\Lists\ListHelper.vb:line
> 121    at
> XXXXXX.SharePoint.Lists.ListHelper.DeleteList(SPWeb
> Web, String ListName, DeleteOperation
> Operation) in C:\SharePoint
> Development
> Projects\XXXXXX.SharePoint\XXXXXX.SharePoint\Lists\ListHelper.vb:line
> 111    at
> XXXXXX_Feature_Receiver.XXXXXXDataStructureFeatureFactory.CreateOrUpdateListInstances(SPWeb
> Web) in C:\TestBed\XXXXXX Feature
> Receiver Development\XXXXXX Feature
> Receiver\XXXXXXDataStructureFeatureFactory.vb:line
> 37    at
> XXXXXX_Feature_Receiver.XXXXXXDataStructureFeatureFactory.Initiate(SPWeb
> Web) in C:\TestBed\XXXXXX Feature
> Receiver Development\XXXXXX Feature
> Receiver\XXXXXXDataStructureFeatureFactory.vb:line
> 14    at
> XXXXXX_Feature_Receiver.Module1.Main()
> in C:\TestBed\XXXXXX Feature Receiver
> Development\XXXXXX Feature
> Receiver\Module1.vb:line 11    at
> System.AppDomain._nExecuteAssembly(Assembly
> assembly, String[] args)    at
> System.AppDomain.ExecuteAssembly(String
> assemblyFile, Evidence
> assemblySecurity, String[] args)    at
> Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
> at
> System.Threading.ThreadHelper.ThreadStart_Context(Object
> state)    at
> System.Threading.ExecutionContext.Run(ExecutionContext
> executionContext, ContextCallback
> callback, Object state)    at
> System.Threading.ThreadHelper.ThreadStart()"