Skip to content

Commit f8219a6

Browse files
authored
Fix VS 2026 crash (#1044)
* Fix VS 2026 crash * fix file count
1 parent 81a4305 commit f8219a6

29 files changed

+156
-1176
lines changed

.github/workflows/vsix.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ jobs:
6464
mkdir vsix
6565
7z x src/GUI/SqlCe35Toolbox/bin/Release/SqlCeVsToolbox.vsix -ovsix -y
6666
dir /a:-d /s /b "vsix" | find /c ":\" > filecount.txt
67-
findstr "37" filecount.txt
67+
findstr "39" filecount.txt
6868
6969
- name: Move build output
7070
if: github.ref == 'refs/heads/master' && github.repository_owner == 'erikej' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch')

src/GUI/SSMSToolbox/Commands/DatabasesMenuCommandsHandler.cs

Lines changed: 0 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -256,109 +256,6 @@ public void DesignDatabase(object sender, ExecutedRoutedEventArgs e)
256256
EnvDteHelper.LaunchUrl("http://sqlcompact.dk/sqldesigner/");
257257
}
258258

259-
public void SyncFxGenerateLocalDatabaseCacheCode(object sender, ExecutedRoutedEventArgs e)
260-
{
261-
// http://www.mztools.com/articles/2007/MZ2007011.aspx
262-
var menuItem = sender as MenuItem;
263-
if (menuItem == null) return;
264-
var dte = _package.GetServiceHelper(typeof(DTE)) as DTE2;
265-
var dteH = new EnvDteHelper();
266-
var project = dteH.GetProject(dte);
267-
if (project == null)
268-
{
269-
EnvDteHelper.ShowError("Please select a project in Solution Explorer, where you want the SyncFx classes to be placed");
270-
return;
271-
}
272-
if (!dteH.AllowedProjectKinds.Contains(new Guid(project.Kind)))
273-
{
274-
EnvDteHelper.ShowError("The selected project type does not support Sync Framework (please let me know if I am wrong)");
275-
return;
276-
}
277-
if (project.CodeModel.Language != CodeModelLanguageConstants.vsCMLanguageCSharp)
278-
{
279-
EnvDteHelper.ShowError("Unsupported code language, only C# is currently supported");
280-
return;
281-
}
282-
if (project.Properties.Item("TargetFrameworkMoniker") == null)
283-
{
284-
EnvDteHelper.ShowError("The selected project type does not support Sync Framework - missing TargetFrameworkMoniker");
285-
return;
286-
}
287-
if (!project.Properties.Item("TargetFrameworkMoniker").Value.ToString().Contains(".NETFramework"))
288-
{
289-
EnvDteHelper.ShowError("The selected project type does not support .NET Desktop - wrong TargetFrameworkMoniker: " + project.Properties.Item("TargetFrameworkMoniker").Value);
290-
return;
291-
}
292-
293-
try
294-
{
295-
var serverConnectionString = DataConnectionHelper.PromptForConnectionString(_package);
296-
if (string.IsNullOrEmpty(serverConnectionString)) return;
297-
string clientConnectionString;
298-
299-
//grab target SQL CE Database
300-
var dialog = new ConnectionDialog();
301-
dialog.DbType = DatabaseType.SQLCE35;
302-
var result = dialog.ShowModal();
303-
if (result.HasValue && result.Value && !string.IsNullOrWhiteSpace(dialog.ConnectionString))
304-
{
305-
clientConnectionString = dialog.ConnectionString;
306-
}
307-
else
308-
{
309-
return;
310-
}
311-
312-
var model = string.Empty;
313-
var sfd = new SyncFxDialog();
314-
var databaseInfo = new DatabaseMenuCommandParameters
315-
{
316-
DatabaseInfo = new DatabaseInfo
317-
{
318-
ConnectionString = serverConnectionString,
319-
DatabaseType = DatabaseType.SQLServer
320-
}
321-
};
322-
SyncFxGetObjectsForSync(sfd, databaseInfo);
323-
sfd.ModelName = model;
324-
325-
var res = sfd.ShowModal();
326-
if (res.HasValue && res.Value && (sfd.Tables.Count > 0) && !string.IsNullOrWhiteSpace(sfd.ModelName))
327-
{
328-
model = sfd.ModelName;
329-
var defaultNamespace = project.Properties.Item("DefaultNamespace").Value.ToString();
330-
331-
var columns = sfd.Columns.Where(c => sfd.Tables.Contains(c.TableName)).ToList();
332-
var classes = new SyncFxHelper().GenerateCodeForScope(serverConnectionString, clientConnectionString, "SQL", model, columns, defaultNamespace);
333-
var projectPath = project.Properties.Item("FullPath").Value.ToString();
334-
335-
foreach (var item in classes)
336-
{
337-
var fileName = Path.Combine(projectPath, item.Key + ".cs");
338-
if (File.Exists(fileName))
339-
{
340-
File.Delete(fileName);
341-
}
342-
File.WriteAllText(fileName, item.Value);
343-
project.ProjectItems.AddFromFile(fileName);
344-
}
345-
//Adding references - http://blogs.msdn.com/b/murat/archive/2008/07/30/envdte-adding-a-refernce-to-a-project.aspx
346-
EnvDteHelper.AddReference(project, "System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91");
347-
348-
EnvDteHelper.AddReference(project, "Microsoft.Synchronization, Version=2.1.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91");
349-
EnvDteHelper.AddReference(project, "Microsoft.Synchronization.Data, Version=3.1.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91");
350-
EnvDteHelper.AddReference(project, "Microsoft.Synchronization.Data.SqlServer, Version=3.1.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91");
351-
EnvDteHelper.AddReference(project, "Microsoft.Synchronization.Data.SqlServerCe, Version=3.1.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91");
352-
EnvDteHelper.ShowMessage("Scope: " + model + " code generated.");
353-
DataConnectionHelper.LogUsage("DatabasesSyncAddLocalDBCache");
354-
}
355-
}
356-
catch (Exception ex)
357-
{
358-
DataConnectionHelper.SendError(ex, DatabaseType.SQLServer);
359-
}
360-
}
361-
362259
public void CheckCeVersion(object sender, ExecutedRoutedEventArgs e)
363260
{
364261
var helper = Helpers.RepositoryHelper.CreateEngineHelper(DatabaseType.SQLCE40);
@@ -399,15 +296,5 @@ public void CheckCeVersion(object sender, ExecutedRoutedEventArgs e)
399296
}
400297
}
401298
}
402-
403-
private static void SyncFxGetObjectsForSync(SyncFxDialog sfd, DatabaseMenuCommandParameters databaseInfo)
404-
{
405-
using (var repository = Helpers.RepositoryHelper.CreateRepository(databaseInfo.DatabaseInfo))
406-
{
407-
sfd.Tables = repository.GetAllTableNames().Where(t => !t.EndsWith("scope_info") && !t.EndsWith("scope_config") && !t.EndsWith("schema_info") && !t.EndsWith("_tracking")).ToList();
408-
sfd.Columns = repository.GetAllColumns().Where(t => !t.TableName.EndsWith("scope_info") && !t.TableName.EndsWith("scope_config") && !t.TableName.EndsWith("schema_info") && !t.TableName.EndsWith("_tracking")).ToList();
409-
sfd.PrimaryKeyColumns = repository.GetAllPrimaryKeys().Where(t => !t.TableName.EndsWith("scope_info") && !t.TableName.EndsWith("scope_config") && !t.TableName.EndsWith("schema_info") && !t.TableName.EndsWith("_tracking")).ToList();
410-
}
411-
}
412299
}
413300
}

src/GUI/SSMSToolbox/Commands/SqlCeDatabaseMenuCommandsHandler.cs

Lines changed: 0 additions & 141 deletions
Original file line numberDiff line numberDiff line change
@@ -698,147 +698,6 @@ public void SyncFxGenerateSnapshot(object sender, ExecutedRoutedEventArgs e)
698698
}
699699
}
700700

701-
public void SyncFxProvisionScope(object sender, ExecutedRoutedEventArgs e)
702-
{
703-
var databaseInfo = ValidateMenuInfo(sender);
704-
if (databaseInfo == null) return;
705-
706-
if (databaseInfo.DatabaseInfo.DatabaseType != DatabaseType.SQLCE35)
707-
{
708-
EnvDteHelper.ShowError("Sorry, only version 3.5 databases are supported for now");
709-
return;
710-
}
711-
712-
try
713-
{
714-
var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(databaseInfo.DatabaseInfo.Caption);
715-
if (fileNameWithoutExtension == null) return;
716-
var model = fileNameWithoutExtension.Replace(" ", string.Empty).Replace("#", string.Empty).Replace(".", string.Empty).Replace("-", string.Empty);
717-
var sfd = new SyncFxDialog {ModelName = model};
718-
719-
var res = sfd.ShowModal();
720-
721-
if (!res.HasValue || res.Value != true || (sfd.Tables.Count <= 0)) return;
722-
if (SyncFxHelper.SqlCeScopeExists(databaseInfo.DatabaseInfo.ConnectionString, model))
723-
{
724-
EnvDteHelper.ShowError("Scope name is already in use. Please enter a different scope name.");
725-
return;
726-
}
727-
728-
model = sfd.ModelName;
729-
new SyncFxHelper().ProvisionScope(databaseInfo.DatabaseInfo.ConnectionString, model, sfd.Columns.Where(c => sfd.Tables.Contains(c.TableName)).ToList());
730-
EnvDteHelper.ShowMessage("Scope: " + model + " has been provisioned.");
731-
DataConnectionHelper.LogUsage("DatabaseSyncProvision");
732-
}
733-
catch (Exception ex)
734-
{
735-
DataConnectionHelper.SendError(ex, databaseInfo.DatabaseInfo.DatabaseType, false);
736-
}
737-
}
738-
739-
public void SyncFxGenerateSyncCodeInProject(object sender, ExecutedRoutedEventArgs e)
740-
{
741-
var databaseInfo = ValidateMenuInfo(sender);
742-
if (databaseInfo == null) return;
743-
744-
if (package == null) return;
745-
var dte = package.GetServiceHelper(typeof(DTE)) as DTE2;
746-
747-
var dteH = new EnvDteHelper();
748-
749-
var project = dteH.GetProject(dte);
750-
if (project == null)
751-
{
752-
EnvDteHelper.ShowError("Please select a project in Solution Explorer, where you want the SyncFx classes to be placed");
753-
return;
754-
}
755-
if (!dteH.AllowedProjectKinds.Contains(new Guid(project.Kind)))
756-
{
757-
EnvDteHelper.ShowError("The selected project type does not support Sync Framework (please let me know if I am wrong)");
758-
return;
759-
}
760-
if (project.CodeModel.Language != CodeModelLanguageConstants.vsCMLanguageCSharp)
761-
{
762-
EnvDteHelper.ShowError("Unsupported code language, only C# is currently supported");
763-
return;
764-
}
765-
if (project.Properties.Item("TargetFrameworkMoniker") == null)
766-
{
767-
EnvDteHelper.ShowError("The selected project type does not support Sync Framework - missing TargetFrameworkMoniker");
768-
return;
769-
}
770-
if (!project.Properties.Item("TargetFrameworkMoniker").Value.ToString().Contains(".NETFramework"))
771-
{
772-
EnvDteHelper.ShowError("The selected project type does not support .NET Desktop - wrong TargetFrameworkMoniker: " + project.Properties.Item("TargetFrameworkMoniker").Value);
773-
return;
774-
}
775-
if (databaseInfo.DatabaseInfo.DatabaseType != DatabaseType.SQLCE35)
776-
{
777-
EnvDteHelper.ShowError("Sorry, only version 3.5 databases are supported for now");
778-
return;
779-
}
780-
781-
try
782-
{
783-
var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(databaseInfo.DatabaseInfo.Caption);
784-
if (fileNameWithoutExtension != null)
785-
{
786-
var model = fileNameWithoutExtension.Replace(" ", string.Empty).Replace("#", string.Empty).Replace(".", string.Empty).Replace("-", string.Empty);
787-
var sfd = new SyncFxDialog {ModelName = model};
788-
789-
var res = sfd.ShowModal();
790-
if (!res.HasValue || res.Value != true || (sfd.Tables.Count <= 0)) return;
791-
model = sfd.ModelName;
792-
var defaultNamespace = project.Properties.Item("DefaultNamespace").Value.ToString();
793-
794-
var classes = new SyncFxHelper().GenerateCodeForScope(string.Empty, databaseInfo.DatabaseInfo.ConnectionString, "SQLCE", model, sfd.Columns.Where(c => sfd.Tables.Contains(c.TableName)).ToList(), defaultNamespace);
795-
var projectPath = project.Properties.Item("FullPath").Value.ToString();
796-
797-
foreach (var item in classes)
798-
{
799-
var fileName = Path.Combine(projectPath, item.Key + ".cs");
800-
if (File.Exists(fileName))
801-
{
802-
File.Delete(fileName);
803-
}
804-
File.WriteAllText(fileName, item.Value);
805-
project.ProjectItems.AddFromFile(fileName);
806-
}
807-
//Adding references - http://blogs.msdn.com/b/murat/archive/2008/07/30/envdte-adding-a-refernce-to-a-project.aspx
808-
EnvDteHelper.AddReference(project, "System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91");
809-
810-
EnvDteHelper.AddReference(project, "Microsoft.Synchronization, Version=2.1.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91");
811-
EnvDteHelper.AddReference(project, "Microsoft.Synchronization.Data, Version=3.1.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91");
812-
EnvDteHelper.AddReference(project, "Microsoft.Synchronization.Data.SqlServer, Version=3.1.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91");
813-
EnvDteHelper.AddReference(project, "Microsoft.Synchronization.Data.SqlServerCe, Version=3.1.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91");
814-
EnvDteHelper.ShowMessage("Scope: " + model + " code generated.");
815-
DataConnectionHelper.LogUsage("DatabaseSyncCodegen");
816-
}
817-
}
818-
catch (Exception ex)
819-
{
820-
DataConnectionHelper.SendError(ex, databaseInfo.DatabaseInfo.DatabaseType, false);
821-
}
822-
}
823-
824-
private static void AddRowVersionColumns(DatabaseMenuCommandParameters databaseInfo)
825-
{
826-
using (var repository = Helpers.RepositoryHelper.CreateRepository(databaseInfo.DatabaseInfo))
827-
{
828-
var list = repository.GetAllTableNames();
829-
var allColumns = repository.GetAllColumns();
830-
foreach (var table in list)
831-
{
832-
if (table.StartsWith("__")) continue;
833-
var rowVersionCol = allColumns.SingleOrDefault(c => c.TableName == table && c.DataType == "rowversion");
834-
if (rowVersionCol == null)
835-
{
836-
repository.ExecuteSql(string.Format("ALTER TABLE {0} ADD COLUMN VersionColumn rowversion NOT NULL;{1}GO", table, Environment.NewLine));
837-
}
838-
}
839-
}
840-
}
841-
842701
private static DatabaseMenuCommandParameters ValidateMenuInfo(object sender)
843702
{
844703
var menuItem = sender as MenuItem;

src/GUI/SSMSToolbox/Dialogs/SyncFxDialog.xaml

Lines changed: 0 additions & 40 deletions
This file was deleted.

0 commit comments

Comments
 (0)