'Refresh' errors with 'Could not synchronize offline schema model' due to TFS checkout error

stevebsteveb Posts: 14 Bronze 1
Hi,
I'm using Visual Studio 2015 Update 3 with ReadyRoll 1.14.11.4593. My solution is source controlled in on-premises TFS 2015 Update 3. All my database projects have the option to sync to an offline schema model switched on. One of the projects initially deploys fine to its target database but subsequently when I use the 'Refresh' capability in the ReadyRoll tool window, gives the 'Script verification failed' message. On clicking the 'Open log' link I get the following error trace:
Data = System.Collections.ListDictionaryInternal
Message = Error during compare. Could not synchronize offline schema model: Error HRESULT E_FAIL has been returned from a call to a COM component.Inner: Error HRESULT E_FAIL has been returned from a call to a COM component., Inner Stack:    at EnvDTE80.SourceControl2.CheckOutItems(Object[]& ItemNames)  at ReadyRoll.VsPackage.ShellIntegration.VsSourceControl.CheckoutFiles(IEnumerable`1 paths)
   at ReadyRoll.Filesystem.ScriptFolderBuilder.BuildFromDifferences(IDatabaseProject databaseProject, ProjectSyncType syncType, IDatabaseDifferences differences, IComparisonOptions options, Boolean organiseFilesBySchema, DirectoryInfo destinationFolder, IEnumerable`1 pendingChanges)
   at ReadyRoll.Services.ProjectComparisonService.CompareDatabaseWithProject(IDatabaseProject databaseProject, ProjectSyncType syncType, IDatabase sourceDB, IDatabase projectDBFolder, IEnumerable`1 pendingChanges, DatabaseObjectType[] supportedObjectTypes, IComparisonOptions options, Boolean organiseFilesBySchema, DirectoryInfo destinationFolder)
   at ReadyRoll.Services.ProjectComparisonService.CompareWithProject(IDatabaseProject databaseProject, ProjectSyncType syncType, IEnumerable`1 pendingChanges, ProgressHandlerWrapper progressHandlerWrapper, DirectoryInfo destinationFolder, DatabaseObjectType[] supportedObjectTypes, Boolean markAsDeployed, Boolean organiseFilesBySchema, IConnProperties syncSource)
   at ReadyRoll.Services.DatabaseProjectSynchronization.SyncDatabaseWithProject(IDatabaseProject databaseProject, ProjectSyncType syncType, IEnumerable`1 pendingChanges, ProgressHandlerWrapper progressHandlerWrapper, Boolean syncFromShadow, DirectoryInfo destinationFolder, DatabaseObjectType[] supportedObjectTypes, Boolean markAsDeployed, Boolean organiseFilesBySchema, IList`1& newFiles, IList`1& modifiedFiles)
   at ReadyRoll.Services.DatabaseRefresh.<>c__DisplayClass3_0.<Refresh>b__1(), Stack:    at ReadyRoll.Services.DatabaseRefresh.Refresh(IDatabaseProject databaseProject, IProgressHandler progressHandler, IProgress`1 progress, Boolean doDataCompare, ITaskLoggingHelperWrapper logger, String sourceDatabaseName, FileInfo sourceSnap)
InnerException = 
TargetSite = System.Collections.Generic.IList`1[ReadyRoll.PendingChanges.PendingChange] Refresh(ReadyRoll.IDatabaseProject, ReadyRoll.Engine.Interfaces.IProgressHandler, System.IProgress`1[System.Double], Boolean, ReadyRoll.ITaskLoggingHelperWrapper, System.String, System.IO.FileInfo)
StackTrace =    at ReadyRoll.Services.DatabaseRefresh.Refresh(IDatabaseProject databaseProject, IProgressHandler progressHandler, IProgress`1 progress, Boolean doDataCompare, ITaskLoggingHelperWrapper logger, String sourceDatabaseName, FileInfo sourceSnap)
   at ReadyRoll.VsPackage.PendingChangeModel.<>c__DisplayClass80_0.<CompareSandboxToProject>b__0()
   at System.Threading.Tasks.Task.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at ReadyRoll.VsPackage.PendingChangeModel.<CompareSandboxToProject>d__80.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at ReadyRoll.VsPackage.Commands.RefreshCommand.<Execute>d__12.MoveNext()
HelpLink = 
Source = ReadyRoll
HResult = -2146233088

The significant part of the error seems to be:
Error during compare. Could not synchronize offline schema model: Error HRESULT E_FAIL has been returned from a call to a COM component.Inner: Error HRESULT E_FAIL has been returned from a call to a COM component., Inner Stack:    at EnvDTE80.SourceControl2.CheckOutItems(Object[]& ItemNames)  at ReadyRoll.VsPackage.ShellIntegration.VsSourceControl.CheckoutFiles(IEnumerable`1 paths)
...

If I switch off the sync to the offline schema model in the project's properties, the error goes away.

Could anyone shed any light on this error? Is there any additional logging I can do to determine why CheckOutItems is failing? As the ReadyRoll refresh starts, there is a momentary flash of a TFS popup (the one you get when checking something in or out), but it's too quick to read.

I have tried deleting the ReadyRoll project from TFS source control and re-creating it from scratch - this seemed to rectify the problem at first - but now the problem has come back even though the schema hasn't changed in the project.

Ideally I would like the offline schema model enabled as our dev team is migrating from SSDT to ReadyRoll - the offline model will give some sense of familiarity during the transition!

Thanks,

Steve

Comments

Sign In or Register to comment.