Visual Studio Extensions (VSe) Deploy Failed (for SharePoint Solution)


This blog posting applies to Microsoft Office SharePoint Server 2007.

When using Visual Studio 2005 extensions for Windows SharePoint Services 3.0 to deploy a solution, you may see “Deploy started” then Deploy failed” in the status window and the error “‘Object reference not set to an instance of an object.” in the Error List window.  Typical behavior is that the solution deployment works at first, possibly even for many deployments in a row, then at some point this error begins to appear and you can’t deploy the solution any more.

A workaround that fixes this problem for me is as follows:

1. Close Visual Studio 2005.

2. Uninstall (retract and remove) all deployed solutions.  You only need to uninstall the ones you want to redeploy.  The quickest way to uninstall is to open a command window to the directory of your Project\bin\debug folder and enter setup /uninstall.  This runs faster than the solution management page in central administration (that one’s performed by a timer job, which has a “now” setting but still seems to take a minute to launch itself).

3. IISRESET.  Oh, iisreset, what would we do without you?

4. Open you solution in VS2005 again and Deploy Solution from the Build menu, or you can Deploy <project> to get just the ones you uninstalled in step 2.

 

If this doesn’t work for you, a discussion at http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1165399&SiteID=1 may give some additional clues.  This theorizes the Object reference error stems from the deployment code trying to enumerate features that have a null definition property, and this prompted me to try the above steps.  These have worked several times now for me, so I’m hoping this is the case.

Good luck!

Comments (2)

  1. Body: They have been available for quite a while now: http://www.microsoft.com/downloads/details.aspx

  2. shaunmosher@hotmail.com says:

    I wrote this quick macro in Visual Studio to automate the above solution.

     Sub UnDeployWSSProjandRestart()

       Dim objSelectedProj As Project

       Dim strProjectPath As String

       Dim strAssembly As String

       Dim strBuildDir As String

       Dim strVSToolsDir As String = System.Environment.GetEnvironmentVariable("VS80COMNTOOLS")

       ‘Get the selected project

       For Each prjThis As Project In DTE.Solution.Projects

         If DTE.ActiveDocument.ProjectItem.ContainingProject.Name = prjThis.Name Then _

           objSelectedProj = prjThis

       Next

       ‘Make sure we’ve got a project to work with

       If objSelectedProj Is Nothing Then

         MsgBox("No project selected")

         Exit Sub

       End If

       ‘Check for unsaved changes before we reload this project in a new instance

       ‘This is necessary because we actally start VS before closing the current one to allow the macro to complete.

       If (DTE.Solution.Saved = False) Then

         If (MsgBox("You must save changes to continue.", MsgBoxStyle.YesNo) = MsgBoxResult.Yes) Then

           DTE.ExecuteCommand("File.SaveAll")

         Else

           Exit Sub

         End If

       End If

       ‘Get the assembly path details

       strProjectPath = objSelectedProj.FullName

       strAssembly = objSelectedProj.Properties.Item("OutputFileName").Value

       strBuildDir = objSelectedProj.ConfigurationManager.ActiveConfiguration.Properties.Item("OutputPath").Value

       If strBuildDir.IndexOf(":") = -1 Then

         strBuildDir = objSelectedProj.FullName.Substring(0, objSelectedProj.FullName.LastIndexOf("")) & "" & strBuildDir

       End If

       ‘Web part projects using the VSeWSS have a SETUP.BAT file in the build directory

       Shell("cmd /c echo | """ & strBuildDir & "setup.bat"" /uninstall", AppWinStyle.NormalFocus, True)

       Shell("iisreset", AppWinStyle.NormalFocus)

       ‘Now reload the project 😉

       Dim strVSDevEnvPath As String

       strVSDevEnvPath = strVSToolsDir.Substring(0, strVSToolsDir.Trim("").LastIndexOf("")) & "IDEdevenv.exe"

       Shell("""" & strVSDevEnvPath & """ """ & strProjectPath & """", AppWinStyle.MaximizedFocus)

       DTE.Quit()

     End Sub