Created serializer which creates a data table. This can then be used for more efficient bulk Sql transfers

This commit is contained in:
David Sparer
2016-08-25 11:16:49 -06:00
parent 13d833ac5c
commit 03c8f96a46
4 changed files with 470 additions and 0 deletions

View File

@@ -0,0 +1,129 @@
using mRemoteNG.Config.Connections;
using mRemoteNG.Connection;
using mRemoteNG.Container;
using mRemoteNG.Security;
using mRemoteNG.Tree;
using mRemoteNG.Tree.Root;
using NUnit.Framework;
namespace mRemoteNGTests.Config.Connections
{
public class DataTableSerializerTests
{
private DataTableSerializer _dataTableSerializer;
private Save _saveFilter;
[SetUp]
public void Setup()
{
_saveFilter = new Save();
_dataTableSerializer = new DataTableSerializer(_saveFilter);
}
[TearDown]
public void Teardown()
{
_saveFilter = null;
_dataTableSerializer = null;
}
[Test]
public void AllItemsSerialized()
{
var model = CreateConnectionTreeModel();
var dataTable = _dataTableSerializer.Serialize(model);
Assert.That(dataTable.Rows.Count, Is.EqualTo(3));
}
[Test]
public void UsernameSerializedWhenSaveSecurityAllowsIt()
{
var model = CreateConnectionTreeModel();
_saveFilter.Username = true;
var dataTable = _dataTableSerializer.Serialize(model);
Assert.That(dataTable.Rows[0]["Username"], Is.Not.EqualTo(""));
}
[Test]
public void DomainSerializedWhenSaveSecurityAllowsIt()
{
var model = CreateConnectionTreeModel();
_saveFilter.Domain = true;
var dataTable = _dataTableSerializer.Serialize(model);
Assert.That(dataTable.Rows[0]["Domain"], Is.Not.EqualTo(""));
}
[Test]
public void PasswordSerializedWhenSaveSecurityAllowsIt()
{
var model = CreateConnectionTreeModel();
_saveFilter.Password = true;
var dataTable = _dataTableSerializer.Serialize(model);
Assert.That(dataTable.Rows[0]["Password"], Is.Not.EqualTo(""));
}
[Test]
public void InheritanceSerializedWhenSaveSecurityAllowsIt()
{
var model = CreateConnectionTreeModel();
_saveFilter.Inheritance = true;
var dataTable = _dataTableSerializer.Serialize(model);
Assert.That(dataTable.Rows[0]["InheritUsername"], Is.Not.EqualTo(""));
}
[Test]
public void UsernameNotSerializedWhenSaveSecurityDisabled()
{
var model = CreateConnectionTreeModel();
_saveFilter.Username = false;
var dataTable = _dataTableSerializer.Serialize(model);
Assert.That(dataTable.Rows[0]["Username"], Is.EqualTo(""));
}
[Test]
public void DomainNotSerializedWhenSaveSecurityDisabled()
{
var model = CreateConnectionTreeModel();
_saveFilter.Domain = false;
var dataTable = _dataTableSerializer.Serialize(model);
Assert.That(dataTable.Rows[0]["Domain"], Is.EqualTo(""));
}
[Test]
public void PasswordNotSerializedWhenSaveSecurityDisabled()
{
var model = CreateConnectionTreeModel();
_saveFilter.Password = false;
var dataTable = _dataTableSerializer.Serialize(model);
Assert.That(dataTable.Rows[0]["Password"], Is.EqualTo(""));
}
[Test]
public void InheritanceNotSerializedWhenSaveSecurityDisabled()
{
var model = CreateConnectionTreeModel();
_saveFilter.Inheritance = false;
var dataTable = _dataTableSerializer.Serialize(model);
Assert.That(dataTable.Rows[0]["InheritUsername"], Is.EqualTo(""));
}
private ConnectionTreeModel CreateConnectionTreeModel()
{
var model = new ConnectionTreeModel();
var root = new RootNodeInfo(RootNodeType.Connection);
var folder1 = new ContainerInfo {Name = "folder1", Username = "user1", Domain = "domain1", Password = "password1"};
var con1 = new ConnectionInfo {Name = "Con1", Username = "user1", Domain = "domain1", Password = "password1" };
var con2 = new ConnectionInfo {Name = "Con2", Username = "user2", Domain = "domain2", Password = "password2" };
root.Add(folder1);
root.Add(con2);
folder1.Add(con1);
model.AddRootNode(root);
return model;
}
}
}

View File

@@ -102,6 +102,7 @@
<ItemGroup>
<Compile Include="App\LoggerTests.cs" />
<Compile Include="BinaryFileTests.cs" />
<Compile Include="Config\Connections\DataTableSerializerTests.cs" />
<Compile Include="Config\Connections\XmlConnectionsDeserializerTests.cs" />
<Compile Include="Connection\ConnectionInfoInheritanceTests.cs" />
<Compile Include="Connection\ConnectionInfoTests.cs" />

View File

@@ -0,0 +1,339 @@
using System.Data;
using System.Linq;
using mRemoteNG.Connection;
using mRemoteNG.Container;
using mRemoteNG.Security;
using mRemoteNG.Tree;
using mRemoteNG.Tree.Root;
namespace mRemoteNG.Config.Connections
{
public class DataTableSerializer
{
private DataTable _dataTable;
private const string TableName = "tblCons";
private readonly Save _saveSecurity;
public DataTableSerializer(Save saveSecurity)
{
_saveSecurity = saveSecurity;
}
public DataTable Serialize(ConnectionTreeModel connectionTreeModel)
{
var rootNode = (RootNodeInfo)connectionTreeModel.RootNodes.First(node => node is RootNodeInfo);
SerializeToDataTable(rootNode);
return _dataTable;
}
private void SerializeToDataTable(RootNodeInfo rootNodeInfo)
{
_dataTable = new DataTable(TableName);
CreateSchema();
SetPrimaryKey();
SerializeNodesRecursive(rootNodeInfo);
}
private void CreateSchema()
{
_dataTable.Columns.Add("Name");
_dataTable.Columns.Add("Type");
_dataTable.Columns.Add("ConstantID");
_dataTable.Columns.Add("ParentID");
_dataTable.Columns.Add("Expanded");
_dataTable.Columns.Add("Descr");
_dataTable.Columns.Add("Icon");
_dataTable.Columns.Add("Panel");
_dataTable.Columns.Add("Username");
_dataTable.Columns.Add("Domain");
_dataTable.Columns.Add("Password");
_dataTable.Columns.Add("Hostname");
_dataTable.Columns.Add("Protocol");
_dataTable.Columns.Add("PuttySession");
_dataTable.Columns.Add("Port");
_dataTable.Columns.Add("ConnectToConsole");
_dataTable.Columns.Add("UseCredSsp");
_dataTable.Columns.Add("RenderingEngine");
_dataTable.Columns.Add("ICAEncryptionStrength");
_dataTable.Columns.Add("RDPAuthenticationLevel");
_dataTable.Columns.Add("LoadBalanceInfo");
_dataTable.Columns.Add("Colors");
_dataTable.Columns.Add("Resolution");
_dataTable.Columns.Add("AutomaticResize");
_dataTable.Columns.Add("DisplayWallpaper");
_dataTable.Columns.Add("DisplayThemes");
_dataTable.Columns.Add("EnableFontSmoothing");
_dataTable.Columns.Add("EnableDesktopComposition");
_dataTable.Columns.Add("CacheBitmaps");
_dataTable.Columns.Add("RedirectDiskDrives");
_dataTable.Columns.Add("RedirectPorts");
_dataTable.Columns.Add("RedirectPrinters");
_dataTable.Columns.Add("RedirectSmartCards");
_dataTable.Columns.Add("RedirectSound");
_dataTable.Columns.Add("RedirectKeys");
_dataTable.Columns.Add("Connected");
_dataTable.Columns.Add("PreExtApp");
_dataTable.Columns.Add("PostExtApp");
_dataTable.Columns.Add("MacAddress");
_dataTable.Columns.Add("UserField");
_dataTable.Columns.Add("ExtApp");
_dataTable.Columns.Add("VNCCompression");
_dataTable.Columns.Add("VNCEncoding");
_dataTable.Columns.Add("VNCAuthMode");
_dataTable.Columns.Add("VNCProxyType");
_dataTable.Columns.Add("VNCProxyIP");
_dataTable.Columns.Add("VNCProxyPort");
_dataTable.Columns.Add("VNCProxyUsername");
_dataTable.Columns.Add("VNCProxyPassword");
_dataTable.Columns.Add("VNCColors");
_dataTable.Columns.Add("VNCSmartSizeMode");
_dataTable.Columns.Add("VNCViewOnly");
_dataTable.Columns.Add("RDGatewayUsageMethod");
_dataTable.Columns.Add("RDGatewayHostname");
_dataTable.Columns.Add("RDGatewayUseConnectionCredentials");
_dataTable.Columns.Add("RDGatewayUsername");
_dataTable.Columns.Add("RDGatewayPassword");
_dataTable.Columns.Add("RDGatewayDomain");
_dataTable.Columns.Add("InheritCacheBitmaps");
_dataTable.Columns.Add("InheritColors");
_dataTable.Columns.Add("InheritDescription");
_dataTable.Columns.Add("InheritDisplayThemes");
_dataTable.Columns.Add("InheritDisplayWallpaper");
_dataTable.Columns.Add("InheritEnableFontSmoothing");
_dataTable.Columns.Add("InheritEnableDesktopComposition");
_dataTable.Columns.Add("InheritDomain");
_dataTable.Columns.Add("InheritIcon");
_dataTable.Columns.Add("InheritPanel");
_dataTable.Columns.Add("InheritPassword");
_dataTable.Columns.Add("InheritPort");
_dataTable.Columns.Add("InheritProtocol");
_dataTable.Columns.Add("InheritPuttySession");
_dataTable.Columns.Add("InheritRedirectDiskDrives");
_dataTable.Columns.Add("InheritRedirectKeys");
_dataTable.Columns.Add("InheritRedirectPorts");
_dataTable.Columns.Add("InheritRedirectPrinters");
_dataTable.Columns.Add("InheritRedirectSmartCards");
_dataTable.Columns.Add("InheritRedirectSound");
_dataTable.Columns.Add("InheritResolution");
_dataTable.Columns.Add("InheritAutomaticResize");
_dataTable.Columns.Add("InheritUseConsoleSession");
_dataTable.Columns.Add("InheritUseCredSsp");
_dataTable.Columns.Add("InheritRenderingEngine");
_dataTable.Columns.Add("InheritUsername");
_dataTable.Columns.Add("InheritICAEncryptionStrength");
_dataTable.Columns.Add("InheritRDPAuthenticationLevel");
_dataTable.Columns.Add("InheritLoadBalanceInfo");
_dataTable.Columns.Add("InheritPreExtApp");
_dataTable.Columns.Add("InheritPostExtApp");
_dataTable.Columns.Add("InheritMacAddress");
_dataTable.Columns.Add("InheritUserField");
_dataTable.Columns.Add("InheritExtApp");
_dataTable.Columns.Add("InheritVNCCompression");
_dataTable.Columns.Add("InheritVNCEncoding");
_dataTable.Columns.Add("InheritVNCAuthMode");
_dataTable.Columns.Add("InheritVNCProxyType");
_dataTable.Columns.Add("InheritVNCProxyIP");
_dataTable.Columns.Add("InheritVNCProxyPort");
_dataTable.Columns.Add("InheritVNCProxyUsername");
_dataTable.Columns.Add("InheritVNCProxyPassword");
_dataTable.Columns.Add("InheritVNCColors");
_dataTable.Columns.Add("InheritVNCSmartSizeMode");
_dataTable.Columns.Add("InheritVNCViewOnly");
_dataTable.Columns.Add("InheritRDGatewayUsageMethod");
_dataTable.Columns.Add("InheritRDGatewayHostname");
_dataTable.Columns.Add("InheritRDGatewayUseConnectionCredentials");
_dataTable.Columns.Add("InheritRDGatewayUsername");
_dataTable.Columns.Add("InheritRDGatewayPassword");
_dataTable.Columns.Add("InheritRDGatewayDomain");
}
private void SetPrimaryKey()
{
_dataTable.PrimaryKey = new[] { _dataTable.Columns["ConstantID"] };
}
private void SerializeNodesRecursive(ConnectionInfo connectionInfo)
{
if (!(connectionInfo is RootNodeInfo))
SerializeConnectionInfo(connectionInfo);
var containerInfo = connectionInfo as ContainerInfo;
if (containerInfo == null) return;
foreach (var child in containerInfo.Children)
SerializeNodesRecursive(child);
}
private void SerializeConnectionInfo(ConnectionInfo connectionInfo)
{
var dataRow = _dataTable.NewRow();
dataRow["Name"] = connectionInfo.Name;
dataRow["Type"] = ConnectionTreeNode.GetNodeType(connectionInfo.TreeNode).ToString();
dataRow["ConstantID"] = connectionInfo.ConstantID;
dataRow["ParentID"] = connectionInfo.Parent.ConstantID;
dataRow["Expanded"] = connectionInfo is ContainerInfo ? ((ContainerInfo)connectionInfo).IsExpanded.ToString() : "";
dataRow["Descr"] = connectionInfo.Description;
dataRow["Icon"] = connectionInfo.Icon;
dataRow["Panel"] = connectionInfo.Panel;
dataRow["Username"] = _saveSecurity.Username ? connectionInfo.Username : "";
dataRow["Domain"] = _saveSecurity.Domain ? connectionInfo.Domain : "";
dataRow["Password"] = _saveSecurity.Password ? connectionInfo.Password : "";
dataRow["Hostname"] = connectionInfo.Hostname;
dataRow["Protocol"] = connectionInfo.Protocol;
dataRow["PuttySession"] = connectionInfo.PuttySession;
dataRow["Port"] = connectionInfo.Port;
dataRow["ConnectToConsole"] = connectionInfo.UseConsoleSession;
dataRow["UseCredSsp"] = connectionInfo.UseCredSsp;
dataRow["RenderingEngine"] = connectionInfo.RenderingEngine;
dataRow["ICAEncryptionStrength"] = connectionInfo.ICAEncryptionStrength;
dataRow["RDPAuthenticationLevel"] = connectionInfo.RDPAuthenticationLevel;
dataRow["LoadBalanceInfo"] = connectionInfo.LoadBalanceInfo;
dataRow["Colors"] = connectionInfo.Colors;
dataRow["Resolution"] = connectionInfo.Resolution;
dataRow["AutomaticResize"] = connectionInfo.AutomaticResize;
dataRow["DisplayWallpaper"] = connectionInfo.DisplayWallpaper;
dataRow["DisplayThemes"] = connectionInfo.DisplayThemes;
dataRow["EnableFontSmoothing"] = connectionInfo.EnableFontSmoothing;
dataRow["EnableDesktopComposition"] = connectionInfo.EnableDesktopComposition;
dataRow["CacheBitmaps"] = connectionInfo.CacheBitmaps;
dataRow["RedirectDiskDrives"] = connectionInfo.RedirectDiskDrives;
dataRow["RedirectPorts"] = connectionInfo.RedirectPorts;
dataRow["RedirectPrinters"] = connectionInfo.RedirectPrinters;
dataRow["RedirectSmartCards"] = connectionInfo.RedirectSmartCards;
dataRow["RedirectSound"] = connectionInfo.RedirectSound;
dataRow["RedirectKeys"] = connectionInfo.RedirectKeys;
dataRow["Connected"] = connectionInfo.OpenConnections.Count > 0 ? "true" : "false";
dataRow["PreExtApp"] = connectionInfo.PreExtApp;
dataRow["PostExtApp"] = connectionInfo.PostExtApp;
dataRow["MacAddress"] = connectionInfo.MacAddress;
dataRow["UserField"] = connectionInfo.UserField;
dataRow["ExtApp"] = connectionInfo.ExtApp;
dataRow["VNCCompression"] = connectionInfo.VNCCompression;
dataRow["VNCEncoding"] = connectionInfo.VNCEncoding;
dataRow["VNCAuthMode"] = connectionInfo.VNCAuthMode;
dataRow["VNCProxyType"] = connectionInfo.VNCProxyType;
dataRow["VNCProxyIP"] = connectionInfo.VNCProxyIP;
dataRow["VNCProxyPort"] = connectionInfo.VNCProxyPort;
dataRow["VNCProxyUsername"] = connectionInfo.VNCProxyUsername;
dataRow["VNCProxyPassword"] = connectionInfo.VNCProxyPassword;
dataRow["VNCColors"] = connectionInfo.VNCColors;
dataRow["VNCSmartSizeMode"] = connectionInfo.VNCSmartSizeMode;
dataRow["VNCViewOnly"] = connectionInfo.VNCViewOnly;
dataRow["RDGatewayUsageMethod"] = connectionInfo.RDGatewayUsageMethod;
dataRow["RDGatewayHostname"] = connectionInfo.RDGatewayHostname;
dataRow["RDGatewayUseConnectionCredentials"] = connectionInfo.RDGatewayUseConnectionCredentials;
dataRow["RDGatewayUsername"] = connectionInfo.RDGatewayUsername;
dataRow["RDGatewayPassword"] = connectionInfo.RDGatewayPassword;
dataRow["RDGatewayDomain"] = connectionInfo.RDGatewayDomain;
if (_saveSecurity.Inheritance)
{
dataRow["InheritCacheBitmaps"] = connectionInfo.Inheritance.CacheBitmaps;
dataRow["InheritColors"] = connectionInfo.Inheritance.Colors;
dataRow["InheritDescription"] = connectionInfo.Inheritance.Description;
dataRow["InheritDisplayThemes"] = connectionInfo.Inheritance.DisplayThemes;
dataRow["InheritDisplayWallpaper"] = connectionInfo.Inheritance.DisplayWallpaper;
dataRow["InheritEnableFontSmoothing"] = connectionInfo.Inheritance.EnableFontSmoothing;
dataRow["InheritEnableDesktopComposition"] = connectionInfo.Inheritance.EnableDesktopComposition;
dataRow["InheritDomain"] = connectionInfo.Inheritance.Domain;
dataRow["InheritIcon"] = connectionInfo.Inheritance.Icon;
dataRow["InheritPanel"] = connectionInfo.Inheritance.Panel;
dataRow["InheritPassword"] = connectionInfo.Inheritance.Password;
dataRow["InheritPort"] = connectionInfo.Inheritance.Port;
dataRow["InheritProtocol"] = connectionInfo.Inheritance.Protocol;
dataRow["InheritPuttySession"] = connectionInfo.Inheritance.PuttySession;
dataRow["InheritRedirectDiskDrives"] = connectionInfo.Inheritance.RedirectDiskDrives;
dataRow["InheritRedirectKeys"] = connectionInfo.Inheritance.RedirectKeys;
dataRow["InheritRedirectPorts"] = connectionInfo.Inheritance.RedirectPorts;
dataRow["InheritRedirectPrinters"] = connectionInfo.Inheritance.RedirectPrinters;
dataRow["InheritRedirectSmartCards"] = connectionInfo.Inheritance.RedirectSmartCards;
dataRow["InheritRedirectSound"] = connectionInfo.Inheritance.RedirectSound;
dataRow["InheritResolution"] = connectionInfo.Inheritance.Resolution;
dataRow["InheritAutomaticResize"] = connectionInfo.Inheritance.AutomaticResize;
dataRow["InheritUseConsoleSession"] = connectionInfo.Inheritance.UseConsoleSession;
dataRow["InheritUseCredSsp"] = connectionInfo.Inheritance.UseCredSsp;
dataRow["InheritRenderingEngine"] = connectionInfo.Inheritance.RenderingEngine;
dataRow["InheritUsername"] = connectionInfo.Inheritance.Username;
dataRow["InheritICAEncryptionStrength"] = connectionInfo.Inheritance.ICAEncryptionStrength;
dataRow["InheritRDPAuthenticationLevel"] = connectionInfo.Inheritance.RDPAuthenticationLevel;
dataRow["InheritLoadBalanceInfo"] = connectionInfo.Inheritance.LoadBalanceInfo;
dataRow["InheritPreExtApp"] = connectionInfo.Inheritance.PreExtApp;
dataRow["InheritPostExtApp"] = connectionInfo.Inheritance.PostExtApp;
dataRow["InheritMacAddress"] = connectionInfo.Inheritance.MacAddress;
dataRow["InheritUserField"] = connectionInfo.Inheritance.UserField;
dataRow["InheritExtApp"] = connectionInfo.Inheritance.ExtApp;
dataRow["InheritVNCCompression"] = connectionInfo.Inheritance.VNCCompression;
dataRow["InheritVNCEncoding"] = connectionInfo.Inheritance.VNCEncoding;
dataRow["InheritVNCAuthMode"] = connectionInfo.Inheritance.VNCAuthMode;
dataRow["InheritVNCProxyType"] = connectionInfo.Inheritance.VNCProxyType;
dataRow["InheritVNCProxyIP"] = connectionInfo.Inheritance.VNCProxyIP;
dataRow["InheritVNCProxyPort"] = connectionInfo.Inheritance.VNCProxyPort;
dataRow["InheritVNCProxyUsername"] = connectionInfo.Inheritance.VNCProxyUsername;
dataRow["InheritVNCProxyPassword"] = connectionInfo.Inheritance.VNCProxyPassword;
dataRow["InheritVNCColors"] = connectionInfo.Inheritance.VNCColors;
dataRow["InheritVNCSmartSizeMode"] = connectionInfo.Inheritance.VNCSmartSizeMode;
dataRow["InheritVNCViewOnly"] = connectionInfo.Inheritance.VNCViewOnly;
dataRow["InheritRDGatewayUsageMethod"] = connectionInfo.Inheritance.RDGatewayUsageMethod;
dataRow["InheritRDGatewayHostname"] = connectionInfo.Inheritance.RDGatewayHostname;
dataRow["InheritRDGatewayUseConnectionCredentials"] = connectionInfo.Inheritance.RDGatewayUseConnectionCredentials;
dataRow["InheritRDGatewayUsername"] = connectionInfo.Inheritance.RDGatewayUsername;
dataRow["InheritRDGatewayPassword"] = connectionInfo.Inheritance.RDGatewayPassword;
dataRow["InheritRDGatewayDomain"] = connectionInfo.Inheritance.RDGatewayDomain;
}
else
{
dataRow["InheritCacheBitmaps"] = "";
dataRow["InheritColors"] = "";
dataRow["InheritDescription"] = "";
dataRow["InheritDisplayThemes"] = "";
dataRow["InheritDisplayWallpaper"] = "";
dataRow["InheritEnableFontSmoothing"] = "";
dataRow["InheritEnableDesktopComposition"] = "";
dataRow["InheritDomain"] = "";
dataRow["InheritIcon"] = "";
dataRow["InheritPanel"] = "";
dataRow["InheritPassword"] = "";
dataRow["InheritPort"] = "";
dataRow["InheritProtocol"] = "";
dataRow["InheritPuttySession"] = "";
dataRow["InheritRedirectDiskDrives"] = "";
dataRow["InheritRedirectKeys"] = "";
dataRow["InheritRedirectPorts"] = "";
dataRow["InheritRedirectPrinters"] = "";
dataRow["InheritRedirectSmartCards"] = "";
dataRow["InheritRedirectSound"] = "";
dataRow["InheritResolution"] = "";
dataRow["InheritAutomaticResize"] = "";
dataRow["InheritUseConsoleSession"] = "";
dataRow["InheritUseCredSsp"] = "";
dataRow["InheritRenderingEngine"] = "";
dataRow["InheritUsername"] = "";
dataRow["InheritICAEncryptionStrength"] = "";
dataRow["InheritRDPAuthenticationLevel"] = "";
dataRow["InheritLoadBalanceInfo"] = "";
dataRow["InheritPreExtApp"] = "";
dataRow["InheritPostExtApp"] = "";
dataRow["InheritMacAddress"] = "";
dataRow["InheritUserField"] = "";
dataRow["InheritExtApp"] = "";
dataRow["InheritVNCCompression"] = "";
dataRow["InheritVNCEncoding"] = "";
dataRow["InheritVNCAuthMode"] = "";
dataRow["InheritVNCProxyType"] = "";
dataRow["InheritVNCProxyIP"] = "";
dataRow["InheritVNCProxyPort"] = "";
dataRow["InheritVNCProxyUsername"] = "";
dataRow["InheritVNCProxyPassword"] = "";
dataRow["InheritVNCColors"] = "";
dataRow["InheritVNCSmartSizeMode"] = "";
dataRow["InheritVNCViewOnly"] = "";
dataRow["InheritRDGatewayUsageMethod"] = "";
dataRow["InheritRDGatewayHostname"] = "";
dataRow["InheritRDGatewayUseConnectionCredentials"] = "";
dataRow["InheritRDGatewayUsername"] = "";
dataRow["InheritRDGatewayPassword"] = "";
dataRow["InheritRDGatewayDomain"] = "";
}
_dataTable.Rows.Add(dataRow);
}
}
}

View File

@@ -129,6 +129,7 @@
<Compile Include="App\Windows.cs" />
<Compile Include="Config\Connections\CsvConnectionsSerializerMremotengFormat.cs" />
<Compile Include="Config\Connections\CsvConnectionsSerializerRemoteDesktop2008Format.cs" />
<Compile Include="Config\Connections\DataTableSerializer.cs" />
<Compile Include="Config\Connections\SqlConnectionsSerializer.cs" />
<Compile Include="Config\DataProviders\FileDataProviderWithBackup.cs" />
<Compile Include="Config\Connections\ConnectionsDecryptor.cs" />