From 104cad5ee53eb05d3a89d508a029425726ae89ae Mon Sep 17 00:00:00 2001
From: chr <chr@mailcom>
Date: 星期一, 24 二月 2025 13:40:52 +0800
Subject: [PATCH] 上传长时间代码;

---
 WPFProject/Style/MainTab.xaml                                                    |    2 
 HMI.AlermInfoManage/AlermInfoManage_Setting.xaml                                 |   29 
 HMI.ParameterManage/ProductModal.xaml.cs                                         |  159 
 HMI.SettingControl/SettingControl.xaml.cs                                        |  104 
 HMI.Core/Annotation/InitAttribute.cs                                             |   18 
 HMI.MenuManage/Util/UserRoleRelHelper.cs                                         |   65 
 WPFProject/Controls/MainTabControl.xaml                                          |  113 
 HMI.DataViewer/Properties/Settings.Designer.cs                                   |   30 
 HMI.IOMonitor/Properties/Resources.Designer.cs                                   |   62 
 WPFProject/UI/Test/FunctionSetting.xaml                                          |    2 
 HMI.Core/Entity/NotifyBase.cs                                                    |  102 
 HMI.IOMonitor/IOMonitor.xaml                                                     |  126 
 WPFProject/UI/Test/SequnceList.xaml                                              |    6 
 HMI.MenuManage/Modal/RoleModal.xaml                                              |   69 
 WPFProject/UI/StepSetting.xaml                                                   |    2 
 HMI.AlermInfoManage/Properties/Settings.settings                                 |    7 
 HMI.AlermInfoManage/Properties/AssemblyInfo.cs                                   |   54 
 VisionBuilder.Run/Properties/Settings.settings                                   |    7 
 HMI.Core/Api/IProgram.cs                                                         |    2 
 HMI.Core/Util/UtilContainer.cs                                                   |   22 
 HMI.UnitTest/packages.config                                                     |    6 
 WPFProject/Controls/InnerWindow.xaml                                             |    4 
 Libs/SQLite.Interop.dll                                                          |    0 
 WPFProject/packages.config                                                       |    3 
 HMI.SettingControl/Properties/Settings.Designer.cs                               |   30 
 HMI.UI/Converter/PathImageConverter.cs                                           |   29 
 HMI.UI/Util/MsgBoxHelper.cs                                                      |   48 
 HMI.UI/Properties/Resources.resx                                                 |  117 
 Libs/System.Data.SQLite.dll                                                      |    0 
 HMI.SettingControl/Properties/Resources.resx                                     |  117 
 HMI.AlermInfoManage/Entity/AimSetting.cs                                         |   65 
 HMI.UnitTest/Properties/AssemblyInfo.cs                                          |   52 
 HMI.UI/Style/FormStyle.xaml                                                      |  148 
 HMI.IOMonitor/Properties/Settings.Designer.cs                                    |   30 
 HMI.UI/Style/PanuonResource.xaml                                                 |  133 
 WPFProject/PanuonWindow.xaml                                                     |   58 
 HMI.Base/Properties/Settings.Designer.cs                                         |   30 
 HMI.UnitTest/Properties/Settings.settings                                        |    7 
 HMI.Core/Util/DllHelper.cs                                                       |  197 
 HMI.UnitTest/App.xaml                                                            |   16 
 HMI.Core/Api/ISequnce.cs                                                         |    2 
 HMI.SettingControl/HMI.SettingControl.csproj                                     |  139 
 VisionBuilder.Run/Properties/AssemblyInfo.cs                                     |   52 
 HMI.AlermInfoManage/Properties/Resources.Designer.cs                             |   62 
 HMI.MenuManage/Properties/Settings.Designer.cs                                   |   26 
 WPFProject/Controls/MenuTabControl.xaml.cs                                       |   39 
 HMI.Core/Api/IStep.cs                                                            |    2 
 HMI.MenuManage/Modal/MenuModal.xaml                                              |   98 
 HMI.UI/Converter/DataGridRowNumberConverter.cs                                   |   24 
 WPFProject/TestWindow.xaml.cs                                                    |   57 
 HMI.UnitTest/App.config                                                          |    6 
 HMI.MenuManage/Modal/RoleModal.xaml.cs                                           |  168 
 HMI.IOMonitor/IOMonitor.xaml.cs                                                  |   29 
 WPFProject/App.xaml.cs                                                           |   22 
 VisionBuilder.Run/VisionBuilder.Run.csproj                                       |   74 
 HMI.UI/HMI.UI.csproj                                                             |  169 
 Libs/DatabaseHelper.dll                                                          |    0 
 HMI.MenuManage/Entity/MenuData.cs                                                |   46 
 HMI.DataViewer/DataViewer.xaml                                                   |  127 
 HMI.MenuManage/Properties/Resources.resx                                         |  117 
 HMI.MenuManage/Properties/AssemblyInfo.cs                                        |   54 
 HMI.Base/HMI.Base.csproj                                                         |   89 
 HMI.IOMonitor/packages.config                                                    |    6 
 HMI.UnitTest/Properties/Resources.resx                                           |  117 
 HMI.MenuManage/Entity/UserRoleRel.cs                                             |   26 
 HMI.Core/Event/TabChange.cs                                                      |    2 
 HMI.DataViewer/HMI.DataViewer.csproj                                             |  128 
 WPFProject/Utils/MainToastHandler.cs                                             |   42 
 HMI.UnitTest/MainWindow.xaml                                                     |   12 
 HMI.UnitTest/Properties/Settings.Designer.cs                                     |   26 
 HMI.DataViewer/DataViewer.xaml.cs                                                |   22 
 WPFProject/MainWindow.xaml                                                       |   18 
 WPFProject/UI/BottomBar.xaml.cs                                                  |    2 
 HMI.UI/Style/MsgBoxStyle.xaml                                                    |  133 
 HMI.DataViewer/Properties/Resources.Designer.cs                                  |   62 
 HMI.SettingControl/Properties/AssemblyInfo.cs                                    |   52 
 HMI.Base/Properties/Resources.resx                                               |  117 
 HMI.Core/Api/IFolderOwner.cs                                                     |   13 
 WPFProject/Entity/PluginSettingInfo.cs                                           |   15 
 HMI.AlermInfoManage/AlermInfoManage.xaml.cs                                      |   27 
 VisionBuilder.Run/Properties/Settings.Designer.cs                                |   30 
 HMI.Core/Util/PathHelper.cs                                                      |  121 
 HMI.ParameterManage/ProductModal.xaml                                            |   57 
 HMI.UI/packages.config                                                           |    5 
 WPFProject/MigrationBackup/fde93b81/VisionBuilder.Core/packages.config           |   11 
 HMI.DataViewer/Properties/Resources.resx                                         |  117 
 HMI.UI/Resources/Font/Font.xaml                                                  |    6 
 HMI.Core/Api/IPlugin.cs                                                          |   34 
 HMI.MenuManage/Properties/Settings.settings                                      |    7 
 HMI.ParameterManage/ControlModel.cs                                              |   98 
 WPFProject/WPFProject.csproj                                                     |  175 
 HMI.SettingControl/packages.config                                               |    6 
 Libs/System.Data.SQLite.dll.config                                               |   22 
 HMI.IOMonitor/HMI.IOMonitor.csproj                                               |  133 
 HMI.MenuManage/Entity/RoleData.cs                                                |   29 
 HMI.ParameterManage/Properties/Resources.Designer.cs                             |   62 
 HMI.UI/Style/BaseWindow.xaml                                                     |   62 
 HMI.ParameterManage/ParameterModal.xaml.cs                                       |  141 
 HMI.UI/DpUtil/FormGroupHelper.cs                                                 |   99 
 HMI.SettingControl/SystemConfig.xaml.cs                                          |   27 
 HMI.MenuManage/Modal/UserModal.xaml                                              |   81 
 HMI.MenuManage/UserManage.xaml                                                   |  132 
 HMI.ParameterManage/Entity/ProductData.cs                                        |   11 
 VisionBuilder.Test/app.config                                                    |   19 
 WPFProject/Controls/MainTabControl.xaml.cs                                       |  156 
 HMI.DataViewer/Properties/Settings.settings                                      |    7 
 HMI.SettingControl/Properties/Settings.settings                                  |    7 
 HMI.SettingControl/SystemConfig.xaml                                             |   46 
 HMI.SettingControl/SettingControl.xaml                                           |   77 
 HMI.UI/Style/Colors.xaml                                                         |   39 
 HMI.IOMonitor/Entity/DioData.cs                                                  |   12 
 HMI.UI/Properties/Resources.Designer.cs                                          |   63 
 HMI.Core/Api/IStepRunner.cs                                                      |    4 
 HMI.MenuManage/Entity/RoleMenuRel.cs                                             |   64 
 VisionBuilder.Engine/app.config                                                  |   19 
 HMI.MenuManage/Properties/Resources.Designer.cs                                  |   63 
 HMI.UI/DpUtil/TreeViewHelper.cs                                                  |   90 
 HMI.MenuManage/Modal/UserModal.xaml.cs                                           |  173 
 HMI.AlermInfoManage/Properties/Settings.Designer.cs                              |   30 
 HMI.UI/Properties/Settings.settings                                              |    7 
 HMI.Core/Setting/SystemSetting.cs                                                |   78 
 WPFProject/Controls/MenuTabControl.xaml                                          |  109 
 HMI.AlermInfoManage/Properties/Resources.resx                                    |  117 
 HMI.ParameterManage/ParameterModal.xaml                                          |   62 
 WPFProject/PanuonWindow.xaml.cs                                                  |   93 
 HMI.ParameterManage/ParameterManage.xaml                                         |  126 
 WPFProject/Style/CommonTree.xaml                                                 |    2 
 WPFProject/Utils/Resize.cs                                                       |    2 
 WPFProject/App.config                                                            |   16 
 HMI.MenuManage/Modal/MenuModal.xaml.cs                                           |  298 
 HMI.ParameterManage/Properties/Resources.resx                                    |  117 
 WPFProject/App.xaml                                                              |   18 
 HMI.AlermInfoManage/AlermInfoManage.xaml                                         |   96 
 HMI.MenuManage/Model/MenuManageModel.cs                                          |  110 
 VisionBuilder.Test/PluginOne.cs                                                  |    4 
 HMI.IOMonitor/Properties/AssemblyInfo.cs                                         |   52 
 HMI.MenuManage/Util/RoleHelper.cs                                                |   71 
 HMI.Core/packages.config                                                         |    4 
 HMI.UI/Properties/Settings.Designer.cs                                           |   26 
 WPFProject/Controls/MinInnerWindow.xaml                                          |    4 
 HMI.AlermInfoManage/packages.config                                              |    6 
 HMI.Base/PluginControl.cs                                                        |   68 
 HMI.Core/Util/XmlHelper.cs                                                       |   74 
 HMI.IOMonitor/Properties/Settings.settings                                       |    7 
 WPFProject/MigrationBackup/fde93b81/VisionBuilder.Core/NuGetUpgradeLog.html      |  167 
 Libs/System.Data.SQLite.xml                                                      | 21379 +++++++++++++++++++++++++++++++++++++
 WPFProject/WPFProject.sln                                                        |  124 
 HMI.MenuManage/packages.config                                                   |    6 
 HMI.UI/Entity/NotifyBase.cs                                                      |   97 
 HMI.UI/DpUtil/StackPanelHelper.cs                                                |   38 
 HMI.Core/Properties/AssemblyInfo.cs                                              |    4 
 HMI.Core/Util/SqliteHelper.cs                                                    |  235 
 HMI.ParameterManage/Properties/Settings.Designer.cs                              |   30 
 HMI.MenuManage/MenuManage.xaml                                                   |  131 
 HMI.DataViewer/Properties/AssemblyInfo.cs                                        |   52 
 HMI.UI/Style/WindowResources.xaml                                                |   26 
 HMI.UnitTest/App.xaml.cs                                                         |   17 
 HMI.ParameterManage/Properties/AssemblyInfo.cs                                   |   52 
 HMI.IOMonitor/Properties/Resources.resx                                          |  117 
 HMI.ParameterManage/ParameterManage.xaml.cs                                      |  119 
 WPFProject/MainWindow.xaml.cs                                                    |   21 
 HMI.Base/packages.config                                                         |    4 
 HMI.UI/Style/BaseWindow.xaml.cs                                                  |   45 
 HMI.UI/Util/IValueValidator.cs                                                   |    7 
 HMI.Core/Exceptions/FormValidateException.cs                                     |   34 
 HMI.ParameterManage/Entity/ParameterData.cs                                      |   19 
 HMI.AlermInfoManage/AlermInfoManage_Setting.xaml.cs                              |   45 
 HMI.UnitTest/Properties/Resources.Designer.cs                                    |   63 
 HMI.ParameterManage/HMI.ParameterManage.csproj                                   |  146 
 HMI.MenuManage/MenuManage.xaml.cs                                                |  149 
 HMI.MenuManage/RoleManage.xaml                                                   |  127 
 WPFProject/LoadingWindow.xaml.cs                                                 |   36 
 WPFProject/Models/Step.cs                                                        |    2 
 HMI.MenuManage/Util/RoleMenuHelper.cs                                            |   91 
 WPFProject/Models/Program.cs                                                     |    4 
 HMI.SettingControl/Properties/Resources.Designer.cs                              |   62 
 HMI.MenuManage/RoleManage.xaml.cs                                                |  159 
 WPFProject/UI/WorkControl.xaml                                                   |   13 
 HMI.Base/PluginInfo.cs                                                           |   25 
 HMI.Core/Api/IConfigRefresh.cs                                                   |    7 
 HMI.Core/app.config                                                              |   19 
 HMI.Core/Entity/Param.cs                                                         |    2 
 HMI.UI/Util/ToastHelper.cs                                                       |   48 
 HMI.UnitTest/MainWindow.xaml.cs                                                  |   31 
 WPFProject/Icon/xinzeng_1.png                                                    |    0 
 HMI.MenuManage/Model/UserManageModel.cs                                          |   98 
 HMI.ParameterManage/Properties/Settings.settings                                 |    7 
 WPFProject/LoadingWindow.xaml                                                    |   20 
 HMI.MenuManage/Entity/UserData.cs                                                |   31 
 HMI.UI/Properties/AssemblyInfo.cs                                                |   52 
 HMI.MenuManage/UserManage.xaml.cs                                                |   93 
 HMI.UI/DpUtil/DpPlugin.cs                                                        |   22 
 WPFProject/Controls/IconTabItem.cs                                               |   18 
 HMI.AlermInfoManage/HMI.AlermInfoManage.csproj                                   |  136 
 HMI.MenuManage/Model/RoleManageModel.cs                                          |  110 
 HMI.Base/Properties/AssemblyInfo.cs                                              |   52 
 HMI.Core/HMI.Core.csproj                                                         |  108 
 HMI.Base/PluginLoader.cs                                                         |  132 
 Libs/System.Data.SQLite.EF6.dll                                                  |    0 
 HMI.UI/Resources/Icon/xinzeng_1.png                                              |    0 
 VisionBuilder.Test/VisionBuilder.Test.csproj                                     |   22 
 VisionBuilder.Run/Properties/Resources.resx                                      |  117 
 VisionBuilder.Engine/VisionBuilder.Engine.csproj                                 |   22 
 HMI.MenuManage/HMI.MenuManage.csproj                                             |  186 
 Libs/System.Data.SQLite.Linq.dll                                                 |    0 
 WPFProject/MigrationBackup/fde93b81/VisionBuilder.Core/VisionBuilder.Core.csproj |   93 
 WPFProject/Entity/PluginLoadMessage.cs                                           |   18 
 VisionBuilder.Run/Properties/Resources.Designer.cs                               |   62 
 WPFProject/TestWindow.xaml                                                       |   37 
 HMI.Base/Properties/Settings.settings                                            |    7 
 WPFProject/Models/Sequence.cs                                                    |    4 
 HMI.Base/Properties/Resources.Designer.cs                                        |   62 
 HMI.UI/Resources/Font/iconfont.ttf                                               |    0 
 /dev/null                                                                        |   14 
 WPFProject/Properties/AssemblyInfo.cs                                            |    3 
 WPFProject/UI/WorkControl.xaml.cs                                                |  104 
 HMI.DataViewer/packages.config                                                   |    6 
 HMI.UnitTest/HMI.UnitTest.csproj                                                 |  144 
 HMI.Core/Util/BeanUtil.cs                                                        |   24 
 WPFProject/log4net.config                                                        |   38 
 220 files changed, 33,596 insertions(+), 194 deletions(-)

diff --git a/HMI.AlermInfoManage/AlermInfoManage.xaml b/HMI.AlermInfoManage/AlermInfoManage.xaml
new file mode 100644
index 0000000..7e66085
--- /dev/null
+++ b/HMI.AlermInfoManage/AlermInfoManage.xaml
@@ -0,0 +1,96 @@
+锘�<hb:PluginControl x:Class="HMI.AlermInfoManage.AlermInfoManage"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:hb="clr-namespace:HMI.Base;assembly=HMI.Base"
+             xmlns:local="clr-namespace:HMI.AlermInfoManage"
+             xmlns:uic="clr-namespace:HMI.UI.Converter;assembly=HMI.UI"
+             xmlns:pw="https://opensource.panuon.com/wpf"
+             xmlns:pu="https://opensource.panuon.com/wpf-ui"
+             mc:Ignorable="d"
+             Background="{StaticResource WorkspaceBackground}"
+             Loaded="UserControl_Loaded"
+             d:DesignHeight="450" d:DesignWidth="800">
+    <UserControl.Resources>
+        <ResourceDictionary>
+            <ResourceDictionary.MergedDictionaries>
+                <ResourceDictionary Source="/HMI.UI;component/Style/BaseWindow.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/FormStyle.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/Colors.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/PanuonResource.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/MsgBoxStyle.xaml"/>
+            </ResourceDictionary.MergedDictionaries>
+            <uic:PathImageConverter x:Key="path2Image"/>
+            <uic:DataGridRowNumberConverter x:Key="rowNumber"/>
+        </ResourceDictionary>
+    </UserControl.Resources>
+
+    <Border Style="{StaticResource CardBoarder}">
+        <StackPanel>
+            <DockPanel Margin="0,0,0,10">
+                <Button DockPanel.Dock="Right" pu:ButtonHelper.Icon="&#xe934;" Style="{StaticResource DangerButton}">鍒犻櫎</Button>
+                <Button DockPanel.Dock="Right" Style="{StaticResource PrimaryButton}" 
+pu:IconHelper.FontFamily="{StaticResource iconfont}"
+pu:ButtonHelper.Icon="&#xe631;" Margin="0,0,10,0" x:Name="refreshBtn" Click="Button_Click">鍒锋柊</Button>
+                <Button DockPanel.Dock="Right" Style="{StaticResource PrimaryButton}" 
+            pu:IconHelper.FontFamily="{StaticResource iconfont}"
+            pu:ButtonHelper.Icon="&#xe61a;" Margin="0,0,10,0" x:Name="addBtn" Click="Button_Click">鏂板</Button>
+                <TextBlock DockPanel.Dock="Left" FontSize="{StaticResource TitleFontSize}" 
+                           VerticalAlignment="Center" HorizontalAlignment="Left" Text="鎶ヨ淇℃伅鍒楄〃"/>
+            </DockPanel>
+
+            <DataGrid x:Name="table" Style="{StaticResource DefaultDataGrid}" ItemsSource="{Binding DataSource}">
+                <DataGrid.Columns>
+                    <DataGridTemplateColumn Header="" Width="Auto" CanUserResize="False">
+                        <DataGridTemplateColumn.CellTemplate>
+                            <DataTemplate>
+                                <CheckBox VerticalAlignment="Center" IsChecked="{Binding Selected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
+                            </DataTemplate>
+                        </DataGridTemplateColumn.CellTemplate>
+                    </DataGridTemplateColumn>
+                    <DataGridTemplateColumn Header="#" CanUserResize="False">
+                        <DataGridTemplateColumn.CellTemplate>
+                            <DataTemplate>
+                                <TextBlock Text="{Binding Converter={StaticResource rowNumber},
+                    RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}"/>
+                            </DataTemplate>
+                        </DataGridTemplateColumn.CellTemplate>
+                    </DataGridTemplateColumn>
+                    <DataGridTextColumn Width="*" Binding="{Binding Source}" Header="鏉ユ簮" />
+                    <DataGridTextColumn Width="*" Binding="{Binding Code}" Header="缂栫爜" />
+                    <DataGridTextColumn Width="*" Binding="{Binding Info}" Header="淇℃伅" />
+                    <DataGridTextColumn Width="*" Binding="{Binding Time}" Header="鏃堕棿" />
+                    <DataGridTemplateColumn Header="鎿嶄綔" Width="100" IsReadOnly="True" CanUserResize="False">
+                        <DataGridTemplateColumn.CellTemplate>
+                            <DataTemplate>
+                                <StackPanel Orientation="Horizontal">
+                                    <Button x:Name="editBtn" Style="{StaticResource LinkButton}" 
+                            Margin="0,0,10,0" 
+                            Click="Button_Click"
+                            DataContext="{Binding }">缂栬緫</Button>
+                                    <Button x:Name="delBtn" Style="{StaticResource DangerLinkButton}" 
+                            DataContext="{Binding }"
+                            Click="Button_Click">鍒犻櫎</Button>
+                                </StackPanel>
+
+                                <DataTemplate.Triggers>
+                                    <DataTrigger Binding="{Binding Path=IsMouseOver,
+                        RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}" 
+                                 Value="True">
+                                        <Setter TargetName="editBtn" Property="Foreground" Value="#FFF"/>
+                                    </DataTrigger>
+                                    <DataTrigger Binding="{Binding Path=IsSelected,
+                        RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}" 
+                                 Value="True">
+                                        <Setter TargetName="editBtn" Property="Foreground" Value="#FFF"/>
+                                    </DataTrigger>
+                                </DataTemplate.Triggers>
+                            </DataTemplate>
+                        </DataGridTemplateColumn.CellTemplate>
+                    </DataGridTemplateColumn>
+                </DataGrid.Columns>
+            </DataGrid>
+        </StackPanel>
+    </Border>
+</hb:PluginControl>
diff --git a/HMI.AlermInfoManage/AlermInfoManage.xaml.cs b/HMI.AlermInfoManage/AlermInfoManage.xaml.cs
new file mode 100644
index 0000000..7656b46
--- /dev/null
+++ b/HMI.AlermInfoManage/AlermInfoManage.xaml.cs
@@ -0,0 +1,27 @@
+锘縰sing System.Windows;
+using HMI.Base;
+
+namespace HMI.AlermInfoManage
+{
+    /// <summary>
+    /// UserControl1.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class AlermInfoManage : PluginControl
+    {
+
+        public AlermInfoManage()
+        {
+            InitializeComponent();
+        }
+
+        private void Button_Click(object sender, RoutedEventArgs e)
+        {
+
+        }
+
+        private void UserControl_Loaded(object sender, RoutedEventArgs e)
+        {
+
+        }
+    }
+}
diff --git a/HMI.AlermInfoManage/AlermInfoManage_Setting.xaml b/HMI.AlermInfoManage/AlermInfoManage_Setting.xaml
new file mode 100644
index 0000000..c468c29
--- /dev/null
+++ b/HMI.AlermInfoManage/AlermInfoManage_Setting.xaml
@@ -0,0 +1,29 @@
+锘�<UserControl x:Class="HMI.AlermInfoManage.AlermInfoManage_Setting"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="clr-namespace:HMI.AlermInfoManage"
+            xmlns:pw="https://opensource.panuon.com/wpf"
+            xmlns:pu="https://opensource.panuon.com/wpf-ui"
+             Loaded="UserControl_Loaded"
+             mc:Ignorable="d" 
+             d:DesignHeight="450" d:DesignWidth="800">
+    <Grid>
+        <StackPanel>
+            <GroupBox Header="PLC璁剧疆">
+                <StackPanel>
+                    <pu:FormGroup Header="PLC IP" GroupName="MyFormGroup">
+                        <TextBox Text="{Binding PlcIp}"/>
+                    </pu:FormGroup>
+
+                    <pu:FormGroup Header="鍚敤PLC" GroupName="MyFormGroup">
+                        <CheckBox IsChecked="{Binding PlcEnabled,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
+                    </pu:FormGroup>
+                </StackPanel>
+            </GroupBox>
+
+            <Button Click="Button_Click">淇濆瓨</Button>
+        </StackPanel>
+    </Grid>
+</UserControl>
diff --git a/HMI.AlermInfoManage/AlermInfoManage_Setting.xaml.cs b/HMI.AlermInfoManage/AlermInfoManage_Setting.xaml.cs
new file mode 100644
index 0000000..358cea4
--- /dev/null
+++ b/HMI.AlermInfoManage/AlermInfoManage_Setting.xaml.cs
@@ -0,0 +1,45 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using HMI.AlermInfoManage.Entity;
+using HMI.Core.Util;
+
+namespace HMI.AlermInfoManage
+{
+    /// <summary>
+    /// AlermInfoManage_Setting.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class AlermInfoManage_Setting : UserControl
+    {
+        public AlermInfoManage_Setting()
+        {
+            InitializeComponent();
+        }
+
+        private void UserControl_Loaded(object sender, RoutedEventArgs e)
+        {
+            DataContext = AimSetting.Instance.GetModel();
+        }
+
+        private void Button_Click(object sender, RoutedEventArgs e)
+        {
+            AimSettingModel model = (AimSettingModel)DataContext;
+
+            AimSetting newSetting = AimSetting.FromModel(model);
+
+            XmlHelper.SerializeToXml(PathHelper.ConfigFolder + "\\AimSetting.xml", model);
+
+        }
+    }
+}
diff --git a/HMI.AlermInfoManage/Entity/AimSetting.cs b/HMI.AlermInfoManage/Entity/AimSetting.cs
new file mode 100644
index 0000000..5ae2606
--- /dev/null
+++ b/HMI.AlermInfoManage/Entity/AimSetting.cs
@@ -0,0 +1,65 @@
+锘縰sing HMI.Core.Entity;
+using HMI.Core.Util;
+
+namespace HMI.AlermInfoManage.Entity
+{
+    public class AimSetting
+    {
+        public static AimSetting Instance { get; private set; }
+
+        public string PlcIp { get; private set; }
+        public bool PlcEnabled { get; private set; }
+
+        private AimSetting() { }
+
+        static AimSetting()
+        {
+            LoadFromXml();
+        }
+
+        public static void LoadFromXml()
+        {
+            try
+            {
+                string path = PathHelper.ConfigFolder + "\\AimSetting.xml";
+                AimSettingModel model = XmlHelper.DeserializeFromXml<AimSettingModel>(path);
+                Instance = FromModel(model);
+            }
+            catch
+            {
+                Instance = new AimSetting();
+            }
+        }
+
+        public AimSettingModel GetModel()
+        {
+            return new AimSettingModel() { PlcIp = PlcIp, PlcEnabled = PlcEnabled };
+        }
+
+        public static AimSetting FromModel(AimSettingModel model)
+        {
+            return new AimSetting() { PlcIp = model.PlcIp, PlcEnabled = model.PlcEnabled };
+        }
+
+    }
+
+    public class AimSettingModel : NotifyBase
+    {
+        private string plcIp;
+        public string PlcIp
+        {
+            get => plcIp;
+            set
+            {
+                Set(ref plcIp, value);
+            }
+        }
+
+        private bool plcEnabled;
+        public bool PlcEnabled
+        {
+            get { return plcEnabled; }
+            set { Set(ref plcEnabled, value); }
+        }
+    }
+}
diff --git a/HMI.AlermInfoManage/HMI.AlermInfoManage.csproj b/HMI.AlermInfoManage/HMI.AlermInfoManage.csproj
new file mode 100644
index 0000000..ad1dded
--- /dev/null
+++ b/HMI.AlermInfoManage/HMI.AlermInfoManage.csproj
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{945C2577-4558-45E3-891A-096CB3047304}</ProjectGuid>
+    <OutputType>library</OutputType>
+    <RootNamespace>HMI.AlermInfoManage</RootNamespace>
+    <AssemblyName>HMI.AlermInfoManage</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <WarningLevel>4</WarningLevel>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="log4net, Version=3.0.3.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\log4net.3.0.3\lib\net462\log4net.dll</HintPath>
+    </Reference>
+    <Reference Include="Panuon.WPF, Version=1.1.2.2, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\Panuon.WPF.1.1.2.2\lib\net472\Panuon.WPF.dll</HintPath>
+    </Reference>
+    <Reference Include="Panuon.WPF.UI, Version=1.2.4.8, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\Panuon.WPF.UI.1.2.4.9\lib\net472\Panuon.WPF.UI.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Web" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xaml">
+      <RequiredTargetFramework>4.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="WindowsBase" />
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="AlermInfoManage.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Compile Include="AlermInfoManage.xaml.cs">
+      <DependentUpon>AlermInfoManage.xaml</DependentUpon>
+      <SubType>Code</SubType>
+    </Compile>
+    <Page Include="AlermInfoManage_Setting.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AlermInfoManage_Setting.xaml.cs">
+      <DependentUpon>AlermInfoManage_Setting.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="Entity\AimSetting.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <None Include="packages.config" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HMI.Base\HMI.Base.csproj">
+      <Project>{2a6f9720-a890-4036-9d73-41a0dae28341}</Project>
+      <Name>HMI.Base</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HMI.Core\HMI.Core.csproj">
+      <Project>{3e3bf44a-0b69-45c5-9512-528cb48a7106}</Project>
+      <Name>HMI.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HMI.UI\HMI.UI.csproj">
+      <Project>{f17de6b5-af1d-48c6-94a0-6b763a6546a6}</Project>
+      <Name>HMI.UI</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/HMI.AlermInfoManage/Properties/AssemblyInfo.cs b/HMI.AlermInfoManage/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..7dc26f0
--- /dev/null
+++ b/HMI.AlermInfoManage/Properties/AssemblyInfo.cs
@@ -0,0 +1,54 @@
+锘縰sing System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+using HMI.Core.Annotation;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
+[assembly: AssemblyTitle("HMI.AlermInfoManage")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Organization")]
+[assembly: AssemblyProduct("HMI.AlermInfoManage")]
+[assembly: AssemblyCopyright("Copyright 漏 Organization 2025")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏� ComVisible 璁剧疆涓� false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵� COM 缁勪欢涓嶅彲瑙併�傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�ц缃负 true銆�
+[assembly: ComVisible(false)]
+
+//鑻ヨ寮�濮嬬敓鎴愬彲鏈湴鍖栫殑搴旂敤绋嬪簭锛岃璁剧疆
+//.csproj 鏂囦欢涓殑 <UICulture>CultureYouAreCodingWith</UICulture>
+//鍦� <PropertyGroup> 涓�備緥濡傦紝濡傛灉浣犱娇鐢ㄧ殑鏄編鍥借嫳璇��
+//浣跨敤鐨勬槸缇庡浗鑻辫锛岃灏� <UICulture> 璁剧疆涓� en-US銆�  鐒跺悗鍙栨秷
+//瀵逛互涓� NeutralResourceLanguage 鐗规�х殑娉ㄩ噴銆�  鏇存柊
+//浠ヤ笅琛屼腑鐨勨�渆n-US鈥濅互鍖归厤椤圭洰鏂囦欢涓殑 UICulture 璁剧疆銆�
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly:ThemeInfo(
+    ResourceDictionaryLocation.None, //涓婚鐗瑰畾璧勬簮璇嶅吀鎵�澶勪綅缃�
+                             //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                             //鎴栧簲鐢ㄧ▼搴忚祫婧愬瓧鍏镐腑鎵惧埌鏃朵娇鐢�)
+    ResourceDictionaryLocation.SourceAssembly //甯歌璧勬簮璇嶅吀鎵�澶勪綅缃�
+                                      //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                                      //銆佸簲鐢ㄧ▼搴忔垨浠讳綍涓婚涓撶敤璧勬簮瀛楀吀涓壘鍒版椂浣跨敤)
+)]
+
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�肩粍鎴�: 
+//
+//      涓荤増鏈�
+//      娆$増鏈�
+//      鐢熸垚鍙�
+//      淇鍙�
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: PluginClassName("HMI.AlermInfoManage.AlermInfoManage")]
diff --git a/HMI.AlermInfoManage/Properties/Resources.Designer.cs b/HMI.AlermInfoManage/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..ea89dfe
--- /dev/null
+++ b/HMI.AlermInfoManage/Properties/Resources.Designer.cs
@@ -0,0 +1,62 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
+//     杩愯鏃剁増鏈�: 4.0.30319.42000
+//
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳藉鑷翠笉姝g‘鐨勮涓猴紝濡傛灉
+//     閲嶆柊鐢熸垚浠g爜锛屽垯鎵�鍋氭洿鏀瑰皢涓㈠け銆�
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HMI.AlermInfoManage.Properties {
+    
+    
+    /// <summary>
+    ///   寮虹被鍨嬭祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲瀛楃涓茬瓑銆�
+    /// </summary>
+    // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+    // 绫婚�氳繃绫讳技浜� ResGen 鎴� Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆�
+    // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈� .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛� ResGen
+    // (浠� /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆�
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   杩斿洖姝ょ被浣跨敤鐨勭紦瀛� ResourceManager 瀹炰緥銆�
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if ((resourceMan == null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HMI.AlermInfoManage.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   閲嶅啓褰撳墠绾跨▼鐨� CurrentUICulture 灞炴�э紝瀵�
+        ///   浣跨敤姝ゅ己绫诲瀷璧勬簮绫荤殑鎵�鏈夎祫婧愭煡鎵炬墽琛岄噸鍐欍��
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}
diff --git a/HMI.AlermInfoManage/Properties/Resources.resx b/HMI.AlermInfoManage/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/HMI.AlermInfoManage/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/HMI.AlermInfoManage/Properties/Settings.Designer.cs b/HMI.AlermInfoManage/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..0110c48
--- /dev/null
+++ b/HMI.AlermInfoManage/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HMI.AlermInfoManage.Properties
+{
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}
diff --git a/HMI.AlermInfoManage/Properties/Settings.settings b/HMI.AlermInfoManage/Properties/Settings.settings
new file mode 100644
index 0000000..033d7a5
--- /dev/null
+++ b/HMI.AlermInfoManage/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘�<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>
\ No newline at end of file
diff --git a/HMI.AlermInfoManage/packages.config b/HMI.AlermInfoManage/packages.config
new file mode 100644
index 0000000..63cdc53
--- /dev/null
+++ b/HMI.AlermInfoManage/packages.config
@@ -0,0 +1,6 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="log4net" version="3.0.3" targetFramework="net472" />
+  <package id="Panuon.WPF" version="1.1.2.2" targetFramework="net472" />
+  <package id="Panuon.WPF.UI" version="1.2.4.9" targetFramework="net472" />
+</packages>
\ No newline at end of file
diff --git a/HMI.Base/HMI.Base.csproj b/HMI.Base/HMI.Base.csproj
new file mode 100644
index 0000000..423b990
--- /dev/null
+++ b/HMI.Base/HMI.Base.csproj
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{2A6F9720-A890-4036-9D73-41A0DAE28341}</ProjectGuid>
+    <OutputType>library</OutputType>
+    <RootNamespace>HMI.Base</RootNamespace>
+    <AssemblyName>HMI.Base</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <WarningLevel>4</WarningLevel>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="log4net, Version=3.0.3.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\log4net.3.0.3\lib\net462\log4net.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Web" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xaml">
+      <RequiredTargetFramework>4.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="WindowsBase" />
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="PluginControl.cs" />
+    <Compile Include="PluginInfo.cs" />
+    <Compile Include="PluginLoader.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <None Include="packages.config" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HMI.Core\HMI.Core.csproj">
+      <Project>{3e3bf44a-0b69-45c5-9512-528cb48a7106}</Project>
+      <Name>HMI.Core</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/HMI.Base/PluginControl.cs b/HMI.Base/PluginControl.cs
new file mode 100644
index 0000000..b8b307b
--- /dev/null
+++ b/HMI.Base/PluginControl.cs
@@ -0,0 +1,68 @@
+锘縰sing System.ComponentModel;
+using System.Runtime.CompilerServices;
+using System.Windows.Controls;
+using HMI.Core.Api;
+using log4net;
+
+namespace HMI.Base
+{
+    public class PluginControl : UserControl, IPlugin, INotifyPropertyChanged
+    {
+        #region ...
+        public event PropertyChangedEventHandler PropertyChanged;
+
+        protected void Set([CallerMemberName] string name = null)
+        {
+
+            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
+        }
+
+        protected void Set<T>(ref T old, T @new, [CallerMemberName] string propertyName = null)
+        {
+            old = @new;
+            if (propertyName != null)
+            {
+                Set(propertyName);
+            }
+        }
+        #endregion
+
+        protected ILog log;
+        protected string BaseFolder;
+
+        public virtual object Active()
+        {
+            return null;
+        }
+
+        public virtual object DeActive()
+        {
+            return null;
+        }
+
+        public virtual object Init()
+        {
+            return null;
+        }
+
+        public virtual void OnTabChange(object sender, object args)
+        {
+
+        }
+
+        public virtual void SetBaseFolder(string folder)
+        {
+            BaseFolder = folder;
+        }
+
+        public virtual void SetLogger(ILog logger)
+        {
+            log = logger;
+        }
+
+        public virtual void InitFinish()
+        {
+            
+        }
+    }
+}
diff --git a/HMI.Base/PluginInfo.cs b/HMI.Base/PluginInfo.cs
new file mode 100644
index 0000000..edc4a8b
--- /dev/null
+++ b/HMI.Base/PluginInfo.cs
@@ -0,0 +1,25 @@
+锘縰sing System.Collections.ObjectModel;
+using System.Windows.Media.Imaging;
+
+namespace HMI.Base
+{
+    public class PluginInfo
+    {
+        public PluginInfo()
+        {
+
+        }
+        public bool IsFont { get; set; }
+        public string Code { get; set; }
+        public string Name { get; set; }
+        public string ParentCode { get; set; }
+        public string DllPath { get; set; }
+        public string ClassName { get; set; }
+        public ObservableCollection<PluginInfo> Children { get; set; } = new ObservableCollection<PluginInfo>();
+        public BitmapImage Icon { get; set; }
+
+        public object Content;
+
+        public object SettingControl;
+    }
+}
diff --git a/HMI.Base/PluginLoader.cs b/HMI.Base/PluginLoader.cs
new file mode 100644
index 0000000..b3a4952
--- /dev/null
+++ b/HMI.Base/PluginLoader.cs
@@ -0,0 +1,132 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Data;
+using System.IO;
+using System.Reflection;
+using System.Windows.Media.Imaging;
+using HMI.Core.Api;
+using HMI.Core.Util;
+using log4net;
+
+namespace HMI.Base
+{
+    public class PluginLoader
+    {
+        private static string PluginFolder = PathHelper.PluginFolder();
+
+        public bool Completed { get; private set; } = false;
+        public SqliteHelper sqliteHelper;
+        public ObservableCollection<PluginInfo> Menus { get; private set; }
+        public ObservableCollection<PluginInfo> Plugins { get; private set; }
+
+        public static PluginLoader Instance { get; private set; }
+
+        public event EventHandler<string> LoadMessageAppend;
+
+        private PluginLoader()
+        {
+            sqliteHelper = new SqliteHelper(PathHelper.DatabasePath);
+        }
+
+        public static PluginLoader GetLoader()
+        {
+            if (Instance == null)
+            {
+                Instance = new PluginLoader();
+            }
+            return Instance;
+        }
+
+        public void LoadMenuAndPlugin()
+        {
+            if (Menus == null)
+            {
+                Plugins = new ObservableCollection<PluginInfo>();
+                Menus = LoadTreeMenu();
+            }
+        }
+
+        private void LoadChildrenMenu(PluginInfo menu)
+        {
+            LoadMessageAppend?.Invoke(this, $"姝e湪鍔犺浇{menu.Name}鑿滃崟...");
+            try
+            {
+                if (!string.IsNullOrEmpty(menu.DllPath))
+                {
+                    string dllPath = Path.Combine(PluginFolder, menu.DllPath);
+                    Assembly ass = Assembly.LoadFrom(dllPath);
+                    Type ClassType = ass.GetType(menu.ClassName);
+                    object Instance = Activator.CreateInstance(ClassType);
+                    menu.Content = Instance;
+                    if (Instance is IPlugin plugin)
+                    {
+                        plugin.SetLogger(LogManager.GetLogger(menu.Code));
+                        string configFolder = Path.Combine(PathHelper.ConfigFolder, menu.Code);
+                        if (!Directory.Exists(configFolder))
+                        {
+                            Directory.CreateDirectory(configFolder);
+                        }
+                        plugin.SetBaseFolder(configFolder);
+                        plugin.InitFinish();
+                    }
+                    Type SettingType = ass.GetType($"{menu.ClassName}_Setting");
+                    if (SettingType != null)
+                    {
+                        object SettingInstance = Activator.CreateInstance(SettingType);
+                        menu.SettingControl = SettingInstance;
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                LoadMessageAppend?.Invoke(this, $"{ex.Message} {ex.StackTrace}");
+            }
+        }
+
+        public ObservableCollection<PluginInfo> LoadTreeMenu()
+        {
+            ObservableCollection<PluginInfo> data = new ObservableCollection<PluginInfo>();
+            Dictionary<string, PluginInfo> cache = new Dictionary<string, PluginInfo>();
+            try
+            {
+                LoadMessageAppend?.Invoke(this, "寮�濮嬪姞杞借彍鍗�...");
+                DataTable dt = sqliteHelper.GetDataTable(@"SELECT * FROM menu ORDER BY level,id;");
+                if (dt != null)
+                {
+                    LoadMessageAppend?.Invoke(this, $"鍏辨湁{dt.Rows.Count}鏉¤彍鍗曞緟鍔犺浇...");
+                    foreach (DataRow dr in dt.Rows)
+                    {
+                        string path = Path.Combine(PathHelper.IconFolder, dr["iconPath"].ToString());
+                        var menu = new PluginInfo
+                        {
+                            Code = dr["code"].ToString(),
+                            Name = dr["name"].ToString(),
+                            ParentCode = dr["parentCode"].ToString(),
+                            DllPath = dr["dllPath"].ToString(),
+                            ClassName = dr["className"].ToString(),
+                            Icon = new BitmapImage(new Uri(Path.Combine(PathHelper.IconFolder, dr["iconPath"].ToString())))
+                        };
+                        cache[menu.Code] = menu;
+                        if (!cache.ContainsKey(menu.ParentCode))
+                        {
+                            data.Add(menu);
+                        }
+                        else
+                        {
+                            cache[menu.ParentCode].Children.Add(menu);
+                        }
+                        Plugins.Add(menu);
+                        LoadChildrenMenu(menu);
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                LoadMessageAppend?.Invoke(this, ex.Message);
+            }
+            return data;
+        }
+
+    }
+}
diff --git a/HMI.Base/Properties/AssemblyInfo.cs b/HMI.Base/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..cfa173d
--- /dev/null
+++ b/HMI.Base/Properties/AssemblyInfo.cs
@@ -0,0 +1,52 @@
+锘縰sing System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
+[assembly: AssemblyTitle("HMI.Base")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Organization")]
+[assembly: AssemblyProduct("HMI.Base")]
+[assembly: AssemblyCopyright("Copyright 漏 Organization 2025")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏� ComVisible 璁剧疆涓� false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵� COM 缁勪欢涓嶅彲瑙併�傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�ц缃负 true銆�
+[assembly: ComVisible(false)]
+
+//鑻ヨ寮�濮嬬敓鎴愬彲鏈湴鍖栫殑搴旂敤绋嬪簭锛岃璁剧疆
+//.csproj 鏂囦欢涓殑 <UICulture>CultureYouAreCodingWith</UICulture>
+//鍦� <PropertyGroup> 涓�備緥濡傦紝濡傛灉浣犱娇鐢ㄧ殑鏄編鍥借嫳璇��
+//浣跨敤鐨勬槸缇庡浗鑻辫锛岃灏� <UICulture> 璁剧疆涓� en-US銆�  鐒跺悗鍙栨秷
+//瀵逛互涓� NeutralResourceLanguage 鐗规�х殑娉ㄩ噴銆�  鏇存柊
+//浠ヤ笅琛屼腑鐨勨�渆n-US鈥濅互鍖归厤椤圭洰鏂囦欢涓殑 UICulture 璁剧疆銆�
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly:ThemeInfo(
+    ResourceDictionaryLocation.None, //涓婚鐗瑰畾璧勬簮璇嶅吀鎵�澶勪綅缃�
+                             //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                             //鎴栧簲鐢ㄧ▼搴忚祫婧愬瓧鍏镐腑鎵惧埌鏃朵娇鐢�)
+    ResourceDictionaryLocation.SourceAssembly //甯歌璧勬簮璇嶅吀鎵�澶勪綅缃�
+                                      //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                                      //銆佸簲鐢ㄧ▼搴忔垨浠讳綍涓婚涓撶敤璧勬簮瀛楀吀涓壘鍒版椂浣跨敤)
+)]
+
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�肩粍鎴�: 
+//
+//      涓荤増鏈�
+//      娆$増鏈�
+//      鐢熸垚鍙�
+//      淇鍙�
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/HMI.Base/Properties/Resources.Designer.cs b/HMI.Base/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..d5ce4eb
--- /dev/null
+++ b/HMI.Base/Properties/Resources.Designer.cs
@@ -0,0 +1,62 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
+//     杩愯鏃剁増鏈�: 4.0.30319.42000
+//
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳藉鑷翠笉姝g‘鐨勮涓猴紝濡傛灉
+//     閲嶆柊鐢熸垚浠g爜锛屽垯鎵�鍋氭洿鏀瑰皢涓㈠け銆�
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HMI.Base.Properties {
+    
+    
+    /// <summary>
+    ///   寮虹被鍨嬭祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲瀛楃涓茬瓑銆�
+    /// </summary>
+    // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+    // 绫婚�氳繃绫讳技浜� ResGen 鎴� Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆�
+    // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈� .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛� ResGen
+    // (浠� /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆�
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   杩斿洖姝ょ被浣跨敤鐨勭紦瀛� ResourceManager 瀹炰緥銆�
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if ((resourceMan == null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HMI.Base.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   閲嶅啓褰撳墠绾跨▼鐨� CurrentUICulture 灞炴�э紝瀵�
+        ///   浣跨敤姝ゅ己绫诲瀷璧勬簮绫荤殑鎵�鏈夎祫婧愭煡鎵炬墽琛岄噸鍐欍��
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}
diff --git a/HMI.Base/Properties/Resources.resx b/HMI.Base/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/HMI.Base/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/HMI.Base/Properties/Settings.Designer.cs b/HMI.Base/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..d903d88
--- /dev/null
+++ b/HMI.Base/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HMI.Base.Properties
+{
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}
diff --git a/HMI.Base/Properties/Settings.settings b/HMI.Base/Properties/Settings.settings
new file mode 100644
index 0000000..033d7a5
--- /dev/null
+++ b/HMI.Base/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘�<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>
\ No newline at end of file
diff --git a/HMI.Base/packages.config b/HMI.Base/packages.config
new file mode 100644
index 0000000..4bea106
--- /dev/null
+++ b/HMI.Base/packages.config
@@ -0,0 +1,4 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="log4net" version="3.0.3" targetFramework="net472" />
+</packages>
\ No newline at end of file
diff --git a/HMI.Core/Annotation/InitAttribute.cs b/HMI.Core/Annotation/InitAttribute.cs
new file mode 100644
index 0000000..a6d1767
--- /dev/null
+++ b/HMI.Core/Annotation/InitAttribute.cs
@@ -0,0 +1,18 @@
+锘縰sing System;
+using System.Runtime.InteropServices;
+
+namespace HMI.Core.Annotation
+{
+
+    [AttributeUsage(AttributeTargets.Assembly, Inherited = false)]
+    [ComVisible(true)]
+    public class PluginClassNameAttribute : Attribute
+    {
+        public string ClassName { get; private set; }
+
+        public PluginClassNameAttribute(string ClassName)
+        {
+            this.ClassName = ClassName;
+        }
+    }
+}
diff --git a/HMI.Core/Api/IConfigRefresh.cs b/HMI.Core/Api/IConfigRefresh.cs
new file mode 100644
index 0000000..6a799be
--- /dev/null
+++ b/HMI.Core/Api/IConfigRefresh.cs
@@ -0,0 +1,7 @@
+锘縩amespace HMI.Core.Api
+{
+    public interface IConfigRefresh
+    {
+        void OnConfigRefrsh(object sender, object setting);
+    }
+}
diff --git a/HMI.Core/Api/IFolderOwner.cs b/HMI.Core/Api/IFolderOwner.cs
new file mode 100644
index 0000000..3079c4d
--- /dev/null
+++ b/HMI.Core/Api/IFolderOwner.cs
@@ -0,0 +1,13 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HMI.Core.Api
+{
+    public interface IFolderOwner
+    {
+        void SetBaseFolder(string folder);
+    }
+}
diff --git a/HMI.Core/Api/IPlugin.cs b/HMI.Core/Api/IPlugin.cs
new file mode 100644
index 0000000..c4cc74d
--- /dev/null
+++ b/HMI.Core/Api/IPlugin.cs
@@ -0,0 +1,34 @@
+锘縰sing log4net;
+
+namespace HMI.Core.Api
+{
+    public interface IPlugin : IFolderOwner
+    {
+        /// <summary>
+        /// 鍒濆鍖�
+        /// </summary>
+        /// <returns></returns>
+        object Init();
+
+        void InitFinish();
+        /// <summary>
+        /// 鎻掍欢闈㈡澘琚縺娲绘椂鐨勬搷浣�
+        /// </summary>
+        /// <returns></returns>
+        object Active();
+        /// <summary>
+        /// 澶辨椿鏃剁殑鎿嶄綔
+        /// </summary>
+        /// <returns></returns>
+        object DeActive();
+
+        /// <summary>
+        /// 闈㈡澘鍒囨崲浜嬩欢
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="args"></param>
+        void OnTabChange(object sender, object args);
+
+        void SetLogger(ILog logger);
+    }
+}
diff --git a/VisionBuilder.Core/Api/IProgram.cs b/HMI.Core/Api/IProgram.cs
similarity index 66%
rename from VisionBuilder.Core/Api/IProgram.cs
rename to HMI.Core/Api/IProgram.cs
index 5d7a4e3..6a04c6a 100644
--- a/VisionBuilder.Core/Api/IProgram.cs
+++ b/HMI.Core/Api/IProgram.cs
@@ -1,4 +1,4 @@
-锘縩amespace VisionBuilder.Core.Api
+锘縩amespace HMI.Core.Api
 {
     public interface IProgram
     {
diff --git a/VisionBuilder.Core/Api/ISequnce.cs b/HMI.Core/Api/ISequnce.cs
similarity index 90%
rename from VisionBuilder.Core/Api/ISequnce.cs
rename to HMI.Core/Api/ISequnce.cs
index 9cdf060..be92417 100644
--- a/VisionBuilder.Core/Api/ISequnce.cs
+++ b/HMI.Core/Api/ISequnce.cs
@@ -1,6 +1,6 @@
 锘縰sing System.Collections.Generic;
 
-namespace VisionBuilder.Core.Api
+namespace HMI.Core.Api
 {
     public interface ISequence
     {
diff --git a/VisionBuilder.Core/Api/IStep.cs b/HMI.Core/Api/IStep.cs
similarity index 64%
rename from VisionBuilder.Core/Api/IStep.cs
rename to HMI.Core/Api/IStep.cs
index bc8385b..6470b1b 100644
--- a/VisionBuilder.Core/Api/IStep.cs
+++ b/HMI.Core/Api/IStep.cs
@@ -1,4 +1,4 @@
-锘縩amespace VisionBuilder.Core.Api
+锘縩amespace HMI.Core.Api
 {
     public interface IStep
     {
diff --git a/VisionBuilder.Core/Api/IStepRunner.cs b/HMI.Core/Api/IStepRunner.cs
similarity index 68%
rename from VisionBuilder.Core/Api/IStepRunner.cs
rename to HMI.Core/Api/IStepRunner.cs
index 22ceb11..82a85b2 100644
--- a/VisionBuilder.Core/Api/IStepRunner.cs
+++ b/HMI.Core/Api/IStepRunner.cs
@@ -1,7 +1,7 @@
 锘縰sing System.Collections.Generic;
-using VisionBuilder.Core.Entity;
+using HMI.Core.Entity;
 
-namespace VisionBuilder.Core.Api
+namespace HMI.Core.Api
 {
     public interface IStepRunner
     {
diff --git a/HMI.Core/Entity/NotifyBase.cs b/HMI.Core/Entity/NotifyBase.cs
new file mode 100644
index 0000000..ae2c761
--- /dev/null
+++ b/HMI.Core/Entity/NotifyBase.cs
@@ -0,0 +1,102 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Runtime.CompilerServices;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Input;
+
+namespace HMI.Core.Entity
+{
+    public class NotifyBase : INotifyPropertyChanged
+    {
+        #region ...
+        public virtual event PropertyChangedEventHandler PropertyChanged;
+
+        protected virtual void Set([CallerMemberName] string name = null)
+        {
+
+            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
+        }
+
+        protected void Set<T>(ref T old, T @new, [CallerMemberName] string propertyName = null)
+        {
+            old = @new;
+            if (propertyName != null)
+            {
+                Set(propertyName);
+            }
+        }
+        #endregion
+
+
+    }
+
+    public class RelayCommand<T> : ICommand
+    {
+        /// <summary>
+        /// 鍛戒护鑳藉惁鎵ц
+        /// </summary>
+        readonly Func<bool> _canExecute;
+        /// <summary>
+        /// 鍛戒护鎵ц鐨勬柟娉�
+        /// </summary>
+        readonly Action<T> _execute;
+
+        /// <summary>
+        /// 鍛戒护鐨勬瀯閫犲嚱鏁�
+        /// </summary>
+        /// <param name="action">鍛戒护闇�鎵ц鐨勬柟娉�</param>
+        /// <param name="canExecute">鍛戒护鏄惁鍙互鎵ц鐨勬柟娉�</param>
+        public RelayCommand(Action<T> action, Func<bool> canExecute)
+        {
+            _execute = action;
+            _canExecute = canExecute;
+        }
+
+        public RelayCommand(Action<T> action)
+        {
+            _execute = action;
+        }
+
+        /// <summary>
+        /// 鍒ゆ柇鍛戒护鏄惁鍙互鎵ц
+        /// </summary>
+        /// <param name="parameter"></param>
+        /// <returns></returns>
+        public bool CanExecute(Object parameter)
+        {
+            if (_canExecute == null)
+                return true;
+            return _canExecute();
+        }
+
+        /// <summary>
+        /// 鎵ц鍛戒护
+        /// </summary>
+        /// <param name="parameter"></param>
+        public void Execute(Object parameter)
+        {
+            _execute((T)parameter);
+        }
+
+        /// <summary>
+        /// 浜嬩欢杩藉姞銆佺Щ闄�
+        /// </summary>
+        public event EventHandler CanExecuteChanged
+        {
+            add
+            {
+                if (_canExecute != null)
+                    CommandManager.RequerySuggested += value;
+            }
+            remove
+            {
+                if (_canExecute != null)
+                    CommandManager.RequerySuggested -= value;
+            }
+        }
+
+    }
+}
diff --git a/VisionBuilder.Core/Entity/Param.cs b/HMI.Core/Entity/Param.cs
similarity index 89%
rename from VisionBuilder.Core/Entity/Param.cs
rename to HMI.Core/Entity/Param.cs
index 58b60f8..69c0449 100644
--- a/VisionBuilder.Core/Entity/Param.cs
+++ b/HMI.Core/Entity/Param.cs
@@ -1,4 +1,4 @@
-锘縩amespace VisionBuilder.Core.Entity
+锘縩amespace HMI.Core.Entity
 {
     public class Param
     {
diff --git a/WPFProject/Events/TabChange.cs b/HMI.Core/Event/TabChange.cs
similarity index 87%
rename from WPFProject/Events/TabChange.cs
rename to HMI.Core/Event/TabChange.cs
index 0279f26..4b5fe4e 100644
--- a/WPFProject/Events/TabChange.cs
+++ b/HMI.Core/Event/TabChange.cs
@@ -5,7 +5,7 @@
 using System.Threading.Tasks;
 using System.Windows;
 
-namespace WPFProject.Events
+namespace HMI.Core.Api
 {
     public class TabChangeEventArgs
     {
diff --git a/HMI.Core/Exceptions/FormValidateException.cs b/HMI.Core/Exceptions/FormValidateException.cs
new file mode 100644
index 0000000..765b080
--- /dev/null
+++ b/HMI.Core/Exceptions/FormValidateException.cs
@@ -0,0 +1,34 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HMI.Core.Exceptions
+{
+    public class FormValidateException : Exception
+    {
+        public readonly List<FormGroupValidateResult> Result;
+        public bool Success
+        {
+            get => Result == null || Result.Count == 0;
+        }
+
+        public FormValidateException()
+        {
+            Result = new List<FormGroupValidateResult>();
+        }
+    }
+
+    public class FormGroupValidateResult
+    {
+        public readonly string Message;
+        public readonly object Sender;
+
+        public FormGroupValidateResult(string message, object sender)
+        {
+            Message = message;
+            Sender = sender;
+        }
+    }
+}
diff --git a/HMI.Core/HMI.Core.csproj b/HMI.Core/HMI.Core.csproj
new file mode 100644
index 0000000..c170457
--- /dev/null
+++ b/HMI.Core/HMI.Core.csproj
@@ -0,0 +1,108 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{3E3BF44A-0B69-45C5-9512-528CB48A7106}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HMI.Core</RootNamespace>
+    <AssemblyName>HMI.Core</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <Deterministic>true</Deterministic>
+    <NuGetPackageImportStamp>
+    </NuGetPackageImportStamp>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="log4net, Version=3.0.3.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\log4net.3.0.3\lib\net462\log4net.dll</HintPath>
+    </Reference>
+    <Reference Include="PresentationCore" />
+    <Reference Include="System" />
+    <Reference Include="System.ComponentModel.DataAnnotations" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Data.SQLite">
+      <HintPath>..\Libs\System.Data.SQLite.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Data.SQLite.EF6">
+      <HintPath>..\Libs\System.Data.SQLite.EF6.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Data.SQLite.Linq">
+      <HintPath>..\Libs\System.Data.SQLite.Linq.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Numerics" />
+    <Reference Include="System.Web" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Api\IConfigRefresh.cs" />
+    <Compile Include="Api\IFolderOwner.cs" />
+    <Compile Include="Api\IPlugin.cs" />
+    <Compile Include="Api\IProgram.cs" />
+    <Compile Include="Api\ISequnce.cs" />
+    <Compile Include="Api\IStep.cs" />
+    <Compile Include="Api\IStepRunner.cs" />
+    <Compile Include="Annotation\InitAttribute.cs" />
+    <Compile Include="Entity\NotifyBase.cs" />
+    <Compile Include="Entity\Param.cs" />
+    <Compile Include="Event\TabChange.cs" />
+    <Compile Include="Exceptions\FormValidateException.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Setting\SystemSetting.cs" />
+    <Compile Include="Util\BeanUtil.cs" />
+    <Compile Include="Util\DllHelper.cs" />
+    <Compile Include="Util\PathHelper.cs" />
+    <Compile Include="Util\SqliteHelper.cs" />
+    <Compile Include="Util\UtilContainer.cs" />
+    <Compile Include="Util\XmlHelper.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+    <None Include="packages.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/VisionBuilder.Core/Properties/AssemblyInfo.cs b/HMI.Core/Properties/AssemblyInfo.cs
similarity index 92%
rename from VisionBuilder.Core/Properties/AssemblyInfo.cs
rename to HMI.Core/Properties/AssemblyInfo.cs
index 921acd0..fa4d953 100644
--- a/VisionBuilder.Core/Properties/AssemblyInfo.cs
+++ b/HMI.Core/Properties/AssemblyInfo.cs
@@ -5,11 +5,11 @@
 // 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
 // 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
 // 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
-[assembly: AssemblyTitle("VisionBuilder.Core")]
+[assembly: AssemblyTitle("HMI.Core")]
 [assembly: AssemblyDescription("")]
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("HP Inc.")]
-[assembly: AssemblyProduct("VisionBuilder.Core")]
+[assembly: AssemblyProduct("HMI.Core")]
 [assembly: AssemblyCopyright("Copyright 漏 HP Inc. 2024")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
diff --git a/HMI.Core/Setting/SystemSetting.cs b/HMI.Core/Setting/SystemSetting.cs
new file mode 100644
index 0000000..774d75b
--- /dev/null
+++ b/HMI.Core/Setting/SystemSetting.cs
@@ -0,0 +1,78 @@
+锘縰sing System;
+using System.IO;
+using HMI.Core.Entity;
+using HMI.Core.Util;
+
+namespace HMI.Core.Setting
+{
+    public class SystemSetting
+    {
+        public static SystemSetting Instance { get; private set; }
+        public static event EventHandler<SystemSetting> SystemSettingChanged;
+
+        static SystemSetting()
+        {
+            LoadFromXml();
+        }
+
+        private SystemSetting()
+        {
+
+        }
+
+        public string LogoPath { get; private set; }
+        public string WindowTitle { get; private set; }
+
+        private static void LoadFromXml()
+        {
+            if (Instance != null) return;
+            string XmlFilePath = PathHelper.ConfigFolder + "\\SystemConfig.xml";
+            if (!File.Exists(XmlFilePath))
+            {
+                Instance = new SystemSetting();
+            }
+            else
+            {
+                SystemSettingModel model = XmlHelper.DeserializeFromXml<SystemSettingModel>(XmlFilePath);
+                SystemSetting setting = new SystemSetting();
+                BeanUtil.Copy(model, setting);
+                Instance = setting;
+            }
+        }
+
+        public static void ReLoad()
+        {
+            string XmlFilePath = PathHelper.ConfigFolder + "\\SystemConfig.xml";
+            if (!File.Exists(XmlFilePath))
+            {
+                Instance = new SystemSetting();
+            }
+            else
+            {
+                SystemSettingModel model = XmlHelper.DeserializeFromXml<SystemSettingModel>(XmlFilePath);
+                SystemSetting setting = new SystemSetting();
+                BeanUtil.Copy(model, setting);
+                Instance = setting;
+            }
+            SystemSettingChanged?.Invoke(null, Instance);
+        }
+    }
+
+
+    public class SystemSettingModel : NotifyBase
+    {
+        private string logoPath;
+        public string LogoPath
+        {
+            get => logoPath;
+            set { Set(ref logoPath, value); }
+        }
+
+        private string windowTitle;
+        public string WindowTitle
+        {
+            get => windowTitle;
+            set { Set(ref windowTitle, value); }
+        }
+    }
+}
diff --git a/HMI.Core/Util/BeanUtil.cs b/HMI.Core/Util/BeanUtil.cs
new file mode 100644
index 0000000..1ac90f8
--- /dev/null
+++ b/HMI.Core/Util/BeanUtil.cs
@@ -0,0 +1,24 @@
+锘縰sing System;
+using System.Reflection;
+using System.Xml;
+
+namespace HMI.Core.Util
+{
+    public class BeanUtil
+    {
+        public static void Copy<S, T>(S source, T target)
+        {
+            Type sourceType = typeof(S);
+            Type targetType = typeof(T);
+            PropertyInfo[] fieldArray = targetType.GetProperties(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
+            foreach (PropertyInfo field in fieldArray)
+            {
+                string fileName = field.Name;
+                PropertyInfo sourceField = sourceType.GetProperty(fileName);
+                if (sourceField == null) continue;
+                field.SetValue(target, sourceField.GetValue(source));
+            }
+
+        }
+    }
+}
diff --git a/HMI.Core/Util/DllHelper.cs b/HMI.Core/Util/DllHelper.cs
new file mode 100644
index 0000000..6f01c9b
--- /dev/null
+++ b/HMI.Core/Util/DllHelper.cs
@@ -0,0 +1,197 @@
+锘縰sing System;
+using System.CodeDom.Compiler;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.CSharp;
+
+namespace HMI.Core.Util
+{
+    /// <summary>
+    /// DLL鏂囦欢鎿嶄綔绫�
+    /// </summary>
+    public class DllHelper
+    {
+        /// <summary>
+        /// 鑾峰彇褰撳墠DLL鎵�澶勭殑璺緞
+        /// </summary>
+        /// <returns>Dll璺緞</returns>
+        public static string GetAssemblyPath()
+        {
+            string CodeBase = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
+            CodeBase = CodeBase.Substring(8, CodeBase.Length - 8);    // 8鏄� file:// 鐨勯暱搴�
+            string[] arrSection = CodeBase.Split(new char[] { '/' });
+            string FolderPath = string.Empty;
+            for (int i = 0; i < arrSection.Length - 1; i++)
+            {
+                FolderPath += arrSection[i] + "\\";
+            }
+
+            return FolderPath;
+        }
+
+        /// <summary>
+        /// 瀵煎叆DLL(瑕佸鍏ョ殑DLL瑕佹斁鍦ㄧ▼搴忕殑鏍圭洰褰曚腑锛�
+        /// </summary>
+        /// <param name="DLLName">瑕佸鍏ョ殑DLL鍚嶇О</param>
+        public static void ImportDLL(string DllPath)
+        {
+            try
+            {
+                //string DllPath = GetAssemblyPath() + DLLName;
+                Assembly[] assemblyArray = AppDomain.CurrentDomain.GetAssemblies();
+                foreach (Assembly dll in assemblyArray)
+                {
+                    if (dll.Location == DllPath)
+                    {
+                        return;
+                    }
+                }
+
+                Assembly.LoadFrom(DllPath);
+            }
+            catch (Exception ex)
+            {
+                throw new Exception(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 瀵煎叆DLL
+        /// </summary>
+        /// <param name="DllPath">瑕佸鍏ョ殑DLL鏂囦欢璺緞</param>
+        public static void ImportDLL2(string DllPath)
+        {
+            try
+            {
+                Assembly[] assemblyArray = AppDomain.CurrentDomain.GetAssemblies();
+                foreach (Assembly dll in assemblyArray)
+                {
+                    if (!dll.FullName.Contains("Microsoft.GeneratedCode"))
+                    {
+                        if (dll.Location == DllPath)
+                        {
+                            return;
+                        }
+                    }
+                }
+
+                Assembly.LoadFile(DllPath);
+            }
+            catch (Exception ex)
+            {
+                throw new Exception(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 鐢熸垚鏃犲弬鏁扮殑鏋勯�犲嚱鏁扮殑瀹炰緥
+        /// </summary>
+        /// <param name="NameSpaceStr">鍛藉悕绌洪棿</param>
+        /// <param name="ClassStr">鍖呭惈鍛藉悕鎺т欢鐨勭被鍚�</param>
+        /// <returns>鐢熸垚鐨勫搴旂被鐨勫疄渚�</returns>
+        public static object CreateInstance(string NameSpaceStr, string ClassStr)
+        {
+            try
+            {
+                Type DllType = Assembly.Load(NameSpaceStr).GetType(ClassStr); // 鐢熸垚绫诲瀷
+                object Instance = Activator.CreateInstance(DllType); // 鐢熸垚瀹炰緥
+                return Instance;
+            }
+            catch (Exception ex)
+            {
+                throw new Exception(ex.Message);
+            }
+        }
+
+        /// <summary>
+        /// 鍔ㄦ�佺紪璇戝拰鎵ц璇彞
+        /// </summary>
+        /// <param name="Expression">瑕佺紪璇戞墽琛岀殑璇彞</param>
+        /// <returns>鎵ц鐨勭粨鏋�</returns>
+        public static object GetValue(string Expression)
+        {
+            object Rtn = null;
+            // 1.CSharpCodePrivoder
+            CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();
+            // 2.ICodeComplier
+            ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler();
+            // 3.CompilerParameters
+            CompilerParameters objCompilerParameters = new CompilerParameters();
+            objCompilerParameters.ReferencedAssemblies.Add("System.dll");
+            objCompilerParameters.GenerateExecutable = false;
+            objCompilerParameters.GenerateInMemory = true;
+            // 4.CompilerResults
+            CompilerResults cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, GenerateCode(Expression));
+            if (cr.Errors.HasErrors)
+            {
+                throw new Exception("缂栬瘧閿欒:" + cr.Errors[0].ErrorText);
+            }
+            else
+            {
+                // 閫氳繃鍙嶅皠锛岃皟鐢℉elloWorld鐨勫疄渚�
+                Assembly objAssembly = cr.CompiledAssembly;
+                object Obj = objAssembly.CreateInstance("CommonLibs.Eval");
+                MethodInfo objMI = Obj.GetType().GetMethod("GetValue");
+                Rtn = objMI.Invoke(Obj, null);
+            }
+            return Rtn;
+        }
+
+        /// <summary>
+        /// 鐢熸垚缂栬瘧璇彞
+        /// </summary>
+        /// <param name="Expression">闇�瑕佺紪璇戠殑璇彞</param>
+        /// <returns>缂栬瘧鎵ц鍚庣殑缁撴灉</returns>
+        private static string GenerateCode(string Expression)
+        {
+            StringBuilder sb = new StringBuilder();
+            sb.Append("using System;");
+            sb.Append(Environment.NewLine);
+            sb.Append("namespace CommonLibs");
+            sb.Append(Environment.NewLine);
+            sb.Append("{");
+            sb.Append(Environment.NewLine);
+            sb.Append("    public class Eval");
+            sb.Append(Environment.NewLine);
+            sb.Append("    {");
+            sb.Append(Environment.NewLine);
+            sb.Append("        public object GetValue()");
+            sb.Append(Environment.NewLine);
+            sb.Append("        {");
+            sb.Append(Environment.NewLine);
+            sb.Append("             return " + Expression + " ;");
+            sb.Append(Environment.NewLine);
+            sb.Append("        }");
+            sb.Append(Environment.NewLine);
+            sb.Append("    }");
+            sb.Append(Environment.NewLine);
+            sb.Append("}");
+            string code = sb.ToString();
+            return code;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="obj"></param>
+        /// <returns></returns>
+        public static T DeepCopy<T>(T obj)
+        {
+            //濡傛灉鏄瓧绗︿覆鎴栧�肩被鍨嬪垯鐩存帴杩斿洖
+            if (obj is string || obj.GetType().IsValueType) return obj;
+
+            object retval = Activator.CreateInstance(obj.GetType());
+            FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
+            foreach (FieldInfo field in fields)
+            {
+                try { field.SetValue(retval, DeepCopy(field.GetValue(obj))); }
+                catch { }
+            }
+            return (T)retval;
+        }
+    }
+}
diff --git a/HMI.Core/Util/PathHelper.cs b/HMI.Core/Util/PathHelper.cs
new file mode 100644
index 0000000..be757b0
--- /dev/null
+++ b/HMI.Core/Util/PathHelper.cs
@@ -0,0 +1,121 @@
+锘縰sing System;
+using System.IO;
+
+namespace HMI.Core.Util
+{
+    public class PathHelper
+    {
+        public static string AppFolder { get; private set; } = RootPath();
+        public static string IconFolder { get; private set; }
+        public static string ConfigFolder { get; private set; }
+        public static string DatabaseFolder { get; private set; }
+        public static string DatabasePath { get; private set; }
+
+        /// <summary>
+        /// 搴旂敤绋嬪簭鐨勬牴鐩綍
+        /// </summary>
+        /// <returns></returns>
+        private static string RootPath()
+        {
+            string DllPath = DllHelper.GetAssemblyPath();
+            string path = Path.GetFullPath(".");
+            IconFolder = InitFolder(path + "\\Icon");
+            ConfigFolder = InitFolder(path + "\\Config");
+            DatabaseFolder = InitFolder(ConfigFolder + "\\Database");
+            DatabasePath = DatabaseFolder + "\\database.db";
+            return path;
+        }
+
+        public static string SettingFolder()
+        {
+            string Path = RootPath() + "\\Config\\Setting";
+            return Path;
+        }
+
+        /// <summary>
+        /// 绯荤粺閰嶇疆淇℃伅瀛樺偍鏂囦欢澶硅矾寰�
+        /// </summary>
+        /// <returns>绯荤粺閰嶇疆淇℃伅鏂囦欢澶�</returns>
+        public static string SystemSettingFolder()
+        {
+            string Path = RootPath() + "\\Config\\SystemSetting";
+            return Path;
+        }
+
+        /// <summary>
+        /// 绯荤粺閰嶇疆鏂囦欢
+        /// </summary>
+        /// <returns>绯荤粺閰嶇疆鏂囦欢璺緞</returns>
+        public static string SystemSettingFile()
+        {
+            string Path = RootPath() + "\\Config\\SystemSetting\\system.setting";
+            return Path;
+        }
+
+        // <summary>
+        /// 鑿滃崟閰嶇疆鏂囦欢
+        /// </summary>
+        /// <returns>鑿滃崟閰嶇疆鏂囦欢</returns>
+        public static string MenuFile()
+        {
+            string Path = RootPath() + "\\Config\\SystemSetting\\menu.setting";
+            return Path;
+        }
+
+        /// <summary>
+        /// 鐢熶骇閰嶇疆鏂囦欢澶�
+        /// </summary>
+        /// <returns>鐢熶骇閰嶇疆鏂囦欢澶�</returns>
+        public static string ProductionFolder()
+        {
+            string Path = RootPath() + "\\Config\\ProductionSetting";
+            return Path;
+        }
+
+        /// <summary>
+        /// 娴嬭瘯椤逛俊鎭瓨鍌ㄦ枃浠跺す
+        /// </summary>
+        /// <returns>娴嬭瘯椤瑰瓨鍌ㄦ枃浠跺す</returns>
+        public static string TestItemFolder()
+        {
+            string Path = ProductionFolder() + "\\TestItem";
+            return Path;
+        }
+
+        /// <summary>
+        /// 璁剧疆鍙傛暟鏂囦欢澶�
+        /// </summary>
+        /// <returns>璁剧疆鍙傛暟鏂囦欢澶�</returns>
+        public static string ParameterFolder()
+        {
+            string Path = ProductionFolder() + "\\Parameter";
+            return Path;
+        }
+
+        /// <summary>
+        /// 鎻掍欢瀛樺偍鐩綍
+        /// </summary>
+        /// <returns>鎻掍欢瀛樺偍鐩綍</returns>
+        public static string PluginFolder()
+        {
+            string Path = RootPath() + "\\Plugin";
+            return Path;
+        }
+
+        private static string InitFolder(string path)
+        {
+            try
+            {
+                if (!Directory.Exists(path))
+                {
+                    Directory.CreateDirectory(path);
+                }
+            }
+            catch (Exception ex)
+            {
+
+            }
+            return path;
+        }
+    }
+}
diff --git a/HMI.Core/Util/SqliteHelper.cs b/HMI.Core/Util/SqliteHelper.cs
new file mode 100644
index 0000000..34502b6
--- /dev/null
+++ b/HMI.Core/Util/SqliteHelper.cs
@@ -0,0 +1,235 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.Common;
+using System.Data.Odbc;
+using System.Data.SQLite;
+
+namespace HMI.Core.Util
+{
+    public class SqliteHelper
+    {
+        private string DataBaseFile = string.Empty;
+
+        private string ConnectString = string.Empty;
+
+        private SQLiteConnection conn = null;
+
+        private SQLiteCommand cmd = null;
+
+        public SqliteHelper(string DBFile)
+        {
+            DataBaseFile = DBFile;
+            ConnectString = "DataSource=" + DataBaseFile + ";Version=3;Pooling=False;Max Pool Size=100";
+            conn = new SQLiteConnection(ConnectString);
+            cmd = new SQLiteCommand(conn);
+        }
+
+        public static bool CreateDatabase(string DataBaseFile)
+        {
+            try
+            {
+                SQLiteConnection.CreateFile(DataBaseFile);
+                return true;
+            }
+            catch (Exception ex)
+            {
+                throw new Exception($"Create Database [${DataBaseFile}] Failed.", ex);
+            }
+        }
+
+        public int ExecuteSql(string Sql)
+        {
+            try
+            {
+                Connect();
+                cmd.CommandType = CommandType.Text;
+                cmd.CommandText = Sql;
+                return cmd.ExecuteNonQuery();
+            }
+            catch (Exception ex)
+            {
+                string message = "ExecuteSql Error:" + ex.Message;
+                throw new Exception(message);
+            }
+            finally
+            {
+                DisConnect();
+            }
+        }
+
+        public void ExecuteBatchSql(IEnumerable<string> sqls)
+        {
+            SQLiteTransaction tr = null;
+            try
+            {
+                Connect();
+                tr = conn.BeginTransaction();
+                cmd.CommandType = CommandType.Text;
+                foreach (string sql in sqls)
+                {
+                    if (string.IsNullOrEmpty(sql) || string.IsNullOrWhiteSpace(sql)) continue;
+                    cmd.CommandText = sql;
+                    cmd.ExecuteNonQuery();
+                }
+                tr.Commit();
+            }
+            catch (Exception ex)
+            {
+                tr?.Rollback();
+                throw ex;
+            }
+            finally
+            {
+                DisConnect();
+            }
+        }
+
+        public DataTable GetDataTable(string Sql)
+        {
+            DataTable dataTable = new DataTable();
+            SQLiteDataAdapter sQLiteDataAdapter = new SQLiteDataAdapter();
+            try
+            {
+                Connect();
+                cmd.CommandType = CommandType.Text;
+                cmd.CommandText = Sql;
+                sQLiteDataAdapter.SelectCommand = cmd;
+                sQLiteDataAdapter.Fill(dataTable);
+            }
+            catch (Exception ex)
+            {
+                string message = "ExecuteSql Error:" + ex.Message;
+                throw new Exception(message);
+            }
+            finally
+            {
+                DisConnect();
+            }
+
+            return dataTable;
+        }
+
+        public string[,] GetDataTableToArray(string Sql)
+        {
+            try
+            {
+                DataTable dataTable = GetDataTable(Sql);
+                string[,] array = new string[dataTable.Rows.Count, dataTable.Columns.Count];
+                int num = 0;
+                int num2 = 0;
+                foreach (DataRow row in dataTable.Rows)
+                {
+                    num2 = 0;
+                    object[] itemArray = row.ItemArray;
+                    foreach (object obj in itemArray)
+                    {
+                        array[num, num2] = obj.ToString();
+                        num2++;
+                    }
+
+                    num++;
+                }
+
+                return array;
+            }
+            catch (Exception ex)
+            {
+                throw new Exception(ex.Message);
+            }
+        }
+
+        public void Close()
+        {
+            try
+            {
+                if (conn.State == ConnectionState.Open)
+                {
+                    conn.Close();
+                }
+
+                if (cmd != null)
+                {
+                    cmd.Dispose();
+                }
+
+                if (conn != null)
+                {
+                    conn.Dispose();
+                }
+            }
+            catch (Exception ex)
+            {
+                throw new Exception(ex.Message);
+            }
+        }
+
+        public bool HasData(string sql)
+        {
+            DataTable dataTable = GetDataTable(sql);
+            return dataTable.Rows.Count > 0;
+        }
+
+        public string[] GetColumnNameFromTable(string TableName)
+        {
+            try
+            {
+                string sql = $"PRAGMA table_info('{TableName}')";
+                DataTable dataTable = GetDataTable(sql);
+                string[] array = new string[dataTable.Rows.Count];
+                int num = 0;
+                foreach (DataRow row in dataTable.Rows)
+                {
+                    array[num] = row.ItemArray[1].ToString();
+                    num++;
+                }
+
+                return array;
+            }
+            catch (Exception ex)
+            {
+                throw new Exception("鑾峰彇瀛楁鍚嶇О澶辫触:" + ex.Message);
+            }
+        }
+
+        public string[] GetAllTableInFile()
+        {
+            try
+            {
+                string sql = "select name from sqlite_master where type = 'table' order by name";
+                DataTable dataTable = GetDataTable(sql);
+                string[] array = new string[dataTable.Rows.Count];
+                int num = 0;
+                foreach (DataRow row in dataTable.Rows)
+                {
+                    array[num] = row.ItemArray[0].ToString();
+                    num++;
+                }
+
+                return array;
+            }
+            catch (Exception ex)
+            {
+                throw new Exception("鑾峰彇瀛楁鍚嶇О澶辫触:" + ex.Message);
+            }
+        }
+
+        private void Connect()
+        {
+            if (conn.State == ConnectionState.Closed)
+            {
+                conn.ConnectionString = ConnectString;
+                cmd.Connection = conn;
+                conn.Open();
+            }
+        }
+
+        private void DisConnect()
+        {
+            if (conn.State == ConnectionState.Open)
+            {
+                conn.Close();
+            }
+        }
+    }
+}
diff --git a/HMI.Core/Util/UtilContainer.cs b/HMI.Core/Util/UtilContainer.cs
new file mode 100644
index 0000000..1706a20
--- /dev/null
+++ b/HMI.Core/Util/UtilContainer.cs
@@ -0,0 +1,22 @@
+锘縰sing System.Collections.Generic;
+
+namespace HMI.Core.Util
+{
+    public class UtilContainer
+    {
+        private static Dictionary<string, object> Map = new Dictionary<string, object>();
+
+        public static bool RegisterUtil(string name, object value)
+        {
+            if (Map.ContainsKey(name)) return false;
+            Map[name] = value;
+            return true;
+        }
+
+        public T GetUtil<T>(string name)
+        {
+            if (!Map.ContainsKey(name)) return default(T);
+            return (T)Map[name];
+        }
+    }
+}
diff --git a/HMI.Core/Util/XmlHelper.cs b/HMI.Core/Util/XmlHelper.cs
new file mode 100644
index 0000000..d0dba0d
--- /dev/null
+++ b/HMI.Core/Util/XmlHelper.cs
@@ -0,0 +1,74 @@
+锘縰sing System;
+using System.IO;
+using System.Reflection;
+using System.Xml;
+using System.Xml.Serialization;
+using static System.Net.WebRequestMethods;
+
+namespace HMI.Core.Util
+{
+    public static class XmlHelper
+    {
+        /// <summary>
+        /// serialize object to xml file.
+        /// </summary>
+        /// <param name="path">the path to save the xml file</param>
+        /// <param name="obj">the object you want to serialize</param>
+        public static void SerializeToXml(string path, object obj)
+        { 
+            XmlSerializer serializer = new XmlSerializer(obj.GetType());
+            string content = string.Empty;
+            //serialize
+            using (StringWriter writer = new StringWriter())
+            {
+                serializer.Serialize(writer, obj);
+                content = writer.ToString();
+            }
+            //save to file
+            using (StreamWriter stream_writer = new StreamWriter(path))
+            {
+                stream_writer.Write(content);
+            }
+        }
+
+        /// <summary>
+        /// xml 鏂囦欢鍙嶅簭鍒楀寲涓哄璞�
+        /// </summary>
+        /// <typeparam name="T">搴忓垪鍖栫被鍨�</typeparam>
+        /// <param name="path">the path of the xml file</param>
+        /// <returns>瀵硅薄</returns>
+        public static T DeserializeFromXml<T>(string path)
+        {
+            XmlSerializer serializer = new XmlSerializer(typeof(T));
+            using (StreamReader reader = new StreamReader(path))
+            {
+                return (T)serializer.Deserialize(reader);
+            }
+        }
+        public static bool ReadFromXml<T>(T obj, string path) {
+            XmlDocument xd = new XmlDocument();
+            xd.Load(path);
+
+            Type type = typeof(T);
+            XmlNode root = xd.SelectSingleNode(type.Name);
+            if (root == null) {
+                return false;
+            }
+
+            //鑾峰彇 RefHero 涓墍鏈夌殑瀹炰緥绉佹湁瀛楁
+            FieldInfo[] fieldArray = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.DeclaredOnly);
+            foreach (FieldInfo filed in fieldArray)
+            {
+                string fileName = filed.Name;
+                XmlNode node = root.SelectSingleNode(fileName);
+                if (node == null)
+                {
+                    continue;
+                }
+                filed.SetValue(obj, node.InnerText);
+            }
+            return true;
+        }
+
+    }
+}
diff --git a/HMI.Core/app.config b/HMI.Core/app.config
new file mode 100644
index 0000000..d93dea3
--- /dev/null
+++ b/HMI.Core/app.config
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
+        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
+        <bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.2.1.0"/>
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral"/>
+        <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0"/>
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/></startup></configuration>
diff --git a/HMI.Core/packages.config b/HMI.Core/packages.config
new file mode 100644
index 0000000..4bea106
--- /dev/null
+++ b/HMI.Core/packages.config
@@ -0,0 +1,4 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="log4net" version="3.0.3" targetFramework="net472" />
+</packages>
\ No newline at end of file
diff --git a/HMI.DataViewer/DataViewer.xaml b/HMI.DataViewer/DataViewer.xaml
new file mode 100644
index 0000000..ebd4758
--- /dev/null
+++ b/HMI.DataViewer/DataViewer.xaml
@@ -0,0 +1,127 @@
+锘�<hb:PluginControl x:Class="HMI.DataViewer.DataViewer"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:hb="clr-namespace:HMI.Base;assembly=HMI.Base"
+             xmlns:local="clr-namespace:HMI.DataViewer"
+             mc:Ignorable="d" 
+             xmlns:uic="clr-namespace:HMI.UI.Converter;assembly=HMI.UI"
+             xmlns:pw="https://opensource.panuon.com/wpf"
+             xmlns:pu="https://opensource.panuon.com/wpf-ui"
+             xmlns:dp="clr-namespace:HMI.UI;assembly=HMI.UI"
+             d:DesignHeight="450" d:DesignWidth="800">
+    <UserControl.Resources>
+        <ResourceDictionary>
+            <ResourceDictionary.MergedDictionaries>
+                <pu:StyleDictionary Includes="TreeView" />
+                <ResourceDictionary Source="/HMI.UI;component/Style/PanuonResource.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Resources/Font/Font.xaml"/>
+            </ResourceDictionary.MergedDictionaries>
+
+            <uic:PathImageConverter x:Key="path2Image"/>
+            <uic:DataGridRowNumberConverter x:Key="rowNumber"/>
+        </ResourceDictionary>
+    </UserControl.Resources>
+
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="7*"/>
+            <ColumnDefinition Width="3*"/>
+        </Grid.ColumnDefinitions>
+
+        <Border Style="{StaticResource CardBoarder}" Margin="0,0,2,0">
+            <StackPanel>
+                <DockPanel Margin="0,0,0,10">
+                    <Button DockPanel.Dock="Right" pu:ButtonHelper.Icon="&#xe934;" Style="{StaticResource DangerButton}">鍒犻櫎</Button>
+                    <Button DockPanel.Dock="Right" Style="{StaticResource PrimaryButton}" 
+pu:IconHelper.FontFamily="{StaticResource iconfont}"
+pu:ButtonHelper.Icon="&#xe631;" Margin="0,0,10,0" x:Name="refreshBtn" Click="Button_Click">鍒锋柊</Button>
+                    <Button DockPanel.Dock="Right" Style="{StaticResource PrimaryButton}" 
+            pu:IconHelper.FontFamily="{StaticResource iconfont}"
+            pu:ButtonHelper.Icon="&#xe61a;" Margin="0,0,10,0" x:Name="addBtn" Click="Button_Click">鏂板</Button>
+                    <TextBlock DockPanel.Dock="Left" FontSize="{StaticResource TitleFontSize}" 
+                           VerticalAlignment="Center" HorizontalAlignment="Left" Text="鑿滃崟鍒楄〃"/>
+                </DockPanel>
+
+                <DataGrid Grid.Column="1" x:Name="table" Style="{StaticResource DefaultDataGrid}" ItemsSource="{Binding DataSource}">
+                    <DataGrid.Columns>
+                        <DataGridTemplateColumn Header="" Width="Auto" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <CheckBox VerticalAlignment="Center" IsChecked="{Binding Selected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+                        <DataGridTemplateColumn Header="#" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <TextBlock Text="{Binding Converter={StaticResource rowNumber},
+                    RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}"/>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+                        <DataGridTextColumn Binding="{Binding Code}" Header="鑿滃崟缂栧彿" />
+                        <DataGridTextColumn Binding="{Binding Name}" Header="鑿滃崟鍚嶇О" />
+                        <DataGridTextColumn Binding="{Binding Level}" Header="绛夌骇" />
+                        <DataGridTextColumn Binding="{Binding Type}" Header="绫诲瀷" />
+                        <DataGridTextColumn Binding="{Binding Name}" Header="鑿滃崟鍚嶇О" />
+                        <DataGridTextColumn Binding="{Binding ParentCode}" Header="鐖惰彍鍗曠紪鍙�" />
+                        <DataGridTextColumn Binding="{Binding ParentName}" Header="鐖惰彍鍗曞悕绉�" />
+                        <DataGridTextColumn Width="*" Binding="{Binding DllPath}" Header="Dll璺緞" />
+                        <DataGridTextColumn Width="*" Binding="{Binding ClassName}" Header="绫诲悕" />
+                        <DataGridTemplateColumn Header="鎿嶄綔" Width="100" IsReadOnly="True" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <StackPanel Orientation="Horizontal">
+                                        <Button x:Name="editBtn" Style="{StaticResource LinkButton}" 
+                            Margin="0,0,10,0" 
+                            Click="Button_Click"
+                            DataContext="{Binding }">缂栬緫</Button>
+                                        <Button x:Name="delBtn" Style="{StaticResource DangerLinkButton}" 
+                            DataContext="{Binding }"
+                            Click="Button_Click">鍒犻櫎</Button>
+                                    </StackPanel>
+
+                                    <DataTemplate.Triggers>
+                                        <DataTrigger Binding="{Binding Path=IsMouseOver,
+                        RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}" 
+                                 Value="True">
+                                            <Setter TargetName="editBtn" Property="Foreground" Value="#FFF"/>
+                                        </DataTrigger>
+                                        <DataTrigger Binding="{Binding Path=IsSelected,
+                        RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}" 
+                                 Value="True">
+                                            <Setter TargetName="editBtn" Property="Foreground" Value="#FFF"/>
+                                        </DataTrigger>
+                                    </DataTemplate.Triggers>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+                    </DataGrid.Columns>
+                </DataGrid>
+            </StackPanel>
+        </Border>
+
+        <Border Grid.Column="1" Style="{StaticResource CardBoarder}" Margin="2,0,0,0">
+            <StackPanel>
+                <DockPanel Margin="0,0,0,10" >
+                    <TextBlock DockPanel.Dock="Left" FontSize="{StaticResource TitleFontSize}" 
+                   VerticalAlignment="Center" HorizontalAlignment="Left" Text="鑿滃崟缁撴瀯"/>
+                </DockPanel>
+
+                <TreeView x:Name="treeViewer" Style="{StaticResource DefaultTreeView}" ItemsSource="{Binding TreeDataSource}">
+                    <TreeView.ItemTemplate>
+                        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
+                            <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
+                                <Image Width="{StaticResource ContentFontSize}" Height="{StaticResource ContentFontSize}" Margin="5" 
+                                       Source="{Binding IconPath,Converter={StaticResource path2Image},Mode=OneWay}"/>
+                                <TextBlock VerticalAlignment="Center" FontSize="{StaticResource ContentFontSize}" Text="{Binding Name}"/>
+                            </StackPanel>
+                        </HierarchicalDataTemplate>
+                    </TreeView.ItemTemplate>
+                </TreeView>
+            </StackPanel>
+        </Border>
+    </Grid>
+</hb:PluginControl>
diff --git a/HMI.DataViewer/DataViewer.xaml.cs b/HMI.DataViewer/DataViewer.xaml.cs
new file mode 100644
index 0000000..7616abc
--- /dev/null
+++ b/HMI.DataViewer/DataViewer.xaml.cs
@@ -0,0 +1,22 @@
+锘縰sing System.Windows;
+using System.Windows.Controls;
+using HMI.Base;
+
+namespace HMI.DataViewer
+{
+    /// <summary>
+    /// UserControl1.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class DataViewer : PluginControl
+    {
+        public DataViewer()
+        {
+            InitializeComponent();
+        }
+
+        private void Button_Click(object sender, RoutedEventArgs e)
+        {
+
+        }
+    }
+}
diff --git a/HMI.DataViewer/HMI.DataViewer.csproj b/HMI.DataViewer/HMI.DataViewer.csproj
new file mode 100644
index 0000000..3a115ca
--- /dev/null
+++ b/HMI.DataViewer/HMI.DataViewer.csproj
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{A580DE4A-34E7-4EFE-AD2C-0871396000E9}</ProjectGuid>
+    <OutputType>library</OutputType>
+    <RootNamespace>HMI.DataViewer</RootNamespace>
+    <AssemblyName>HMI.DataViewer</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <WarningLevel>4</WarningLevel>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="log4net, Version=3.0.3.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\log4net.3.0.3\lib\net462\log4net.dll</HintPath>
+    </Reference>
+    <Reference Include="Panuon.WPF, Version=1.1.2.2, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\Panuon.WPF.1.1.2.2\lib\net472\Panuon.WPF.dll</HintPath>
+    </Reference>
+    <Reference Include="Panuon.WPF.UI, Version=1.2.4.8, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\Panuon.WPF.UI.1.2.4.9\lib\net472\Panuon.WPF.UI.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Web" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xaml">
+      <RequiredTargetFramework>4.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="WindowsBase" />
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="DataViewer.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Compile Include="DataViewer.xaml.cs">
+      <DependentUpon>DataViewer.xaml</DependentUpon>
+      <SubType>Code</SubType>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <None Include="packages.config" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HMI.Base\HMI.Base.csproj">
+      <Project>{2a6f9720-a890-4036-9d73-41a0dae28341}</Project>
+      <Name>HMI.Base</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HMI.Core\HMI.Core.csproj">
+      <Project>{3e3bf44a-0b69-45c5-9512-528cb48a7106}</Project>
+      <Name>HMI.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HMI.UI\HMI.UI.csproj">
+      <Project>{f17de6b5-af1d-48c6-94a0-6b763a6546a6}</Project>
+      <Name>HMI.UI</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/HMI.DataViewer/Properties/AssemblyInfo.cs b/HMI.DataViewer/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..b4f8140
--- /dev/null
+++ b/HMI.DataViewer/Properties/AssemblyInfo.cs
@@ -0,0 +1,52 @@
+锘縰sing System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
+[assembly: AssemblyTitle("HMI.DataViewer")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Organization")]
+[assembly: AssemblyProduct("HMI.DataViewer")]
+[assembly: AssemblyCopyright("Copyright 漏 Organization 2025")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏� ComVisible 璁剧疆涓� false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵� COM 缁勪欢涓嶅彲瑙併�傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�ц缃负 true銆�
+[assembly: ComVisible(false)]
+
+//鑻ヨ寮�濮嬬敓鎴愬彲鏈湴鍖栫殑搴旂敤绋嬪簭锛岃璁剧疆
+//.csproj 鏂囦欢涓殑 <UICulture>CultureYouAreCodingWith</UICulture>
+//鍦� <PropertyGroup> 涓�備緥濡傦紝濡傛灉浣犱娇鐢ㄧ殑鏄編鍥借嫳璇��
+//浣跨敤鐨勬槸缇庡浗鑻辫锛岃灏� <UICulture> 璁剧疆涓� en-US銆�  鐒跺悗鍙栨秷
+//瀵逛互涓� NeutralResourceLanguage 鐗规�х殑娉ㄩ噴銆�  鏇存柊
+//浠ヤ笅琛屼腑鐨勨�渆n-US鈥濅互鍖归厤椤圭洰鏂囦欢涓殑 UICulture 璁剧疆銆�
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly:ThemeInfo(
+    ResourceDictionaryLocation.None, //涓婚鐗瑰畾璧勬簮璇嶅吀鎵�澶勪綅缃�
+                             //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                             //鎴栧簲鐢ㄧ▼搴忚祫婧愬瓧鍏镐腑鎵惧埌鏃朵娇鐢�)
+    ResourceDictionaryLocation.SourceAssembly //甯歌璧勬簮璇嶅吀鎵�澶勪綅缃�
+                                      //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                                      //銆佸簲鐢ㄧ▼搴忔垨浠讳綍涓婚涓撶敤璧勬簮瀛楀吀涓壘鍒版椂浣跨敤)
+)]
+
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�肩粍鎴�: 
+//
+//      涓荤増鏈�
+//      娆$増鏈�
+//      鐢熸垚鍙�
+//      淇鍙�
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/HMI.DataViewer/Properties/Resources.Designer.cs b/HMI.DataViewer/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..15eaf01
--- /dev/null
+++ b/HMI.DataViewer/Properties/Resources.Designer.cs
@@ -0,0 +1,62 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
+//     杩愯鏃剁増鏈�: 4.0.30319.42000
+//
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳藉鑷翠笉姝g‘鐨勮涓猴紝濡傛灉
+//     閲嶆柊鐢熸垚浠g爜锛屽垯鎵�鍋氭洿鏀瑰皢涓㈠け銆�
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HMI.DataViewer.Properties {
+    
+    
+    /// <summary>
+    ///   寮虹被鍨嬭祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲瀛楃涓茬瓑銆�
+    /// </summary>
+    // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+    // 绫婚�氳繃绫讳技浜� ResGen 鎴� Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆�
+    // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈� .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛� ResGen
+    // (浠� /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆�
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   杩斿洖姝ょ被浣跨敤鐨勭紦瀛� ResourceManager 瀹炰緥銆�
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if ((resourceMan == null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HMI.DataViewer.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   閲嶅啓褰撳墠绾跨▼鐨� CurrentUICulture 灞炴�э紝瀵�
+        ///   浣跨敤姝ゅ己绫诲瀷璧勬簮绫荤殑鎵�鏈夎祫婧愭煡鎵炬墽琛岄噸鍐欍��
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}
diff --git a/HMI.DataViewer/Properties/Resources.resx b/HMI.DataViewer/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/HMI.DataViewer/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/HMI.DataViewer/Properties/Settings.Designer.cs b/HMI.DataViewer/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..5b2c89d
--- /dev/null
+++ b/HMI.DataViewer/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HMI.DataViewer.Properties
+{
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}
diff --git a/HMI.DataViewer/Properties/Settings.settings b/HMI.DataViewer/Properties/Settings.settings
new file mode 100644
index 0000000..033d7a5
--- /dev/null
+++ b/HMI.DataViewer/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘�<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>
\ No newline at end of file
diff --git a/HMI.DataViewer/packages.config b/HMI.DataViewer/packages.config
new file mode 100644
index 0000000..63cdc53
--- /dev/null
+++ b/HMI.DataViewer/packages.config
@@ -0,0 +1,6 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="log4net" version="3.0.3" targetFramework="net472" />
+  <package id="Panuon.WPF" version="1.1.2.2" targetFramework="net472" />
+  <package id="Panuon.WPF.UI" version="1.2.4.9" targetFramework="net472" />
+</packages>
\ No newline at end of file
diff --git a/HMI.IOMonitor/Entity/DioData.cs b/HMI.IOMonitor/Entity/DioData.cs
new file mode 100644
index 0000000..3aa4595
--- /dev/null
+++ b/HMI.IOMonitor/Entity/DioData.cs
@@ -0,0 +1,12 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HMI.IOMonitor.Entity
+{
+    public class DioData
+    {
+    }
+}
diff --git a/HMI.IOMonitor/HMI.IOMonitor.csproj b/HMI.IOMonitor/HMI.IOMonitor.csproj
new file mode 100644
index 0000000..a8c39f4
--- /dev/null
+++ b/HMI.IOMonitor/HMI.IOMonitor.csproj
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{F7663C79-7047-42F3-B129-73A2575EE7C6}</ProjectGuid>
+    <OutputType>library</OutputType>
+    <RootNamespace>HMI.IOMonitor</RootNamespace>
+    <AssemblyName>HMI.IOMonitor</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <WarningLevel>4</WarningLevel>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="log4net, Version=3.0.3.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\log4net.3.0.3\lib\net462\log4net.dll</HintPath>
+    </Reference>
+    <Reference Include="Panuon.WPF, Version=1.1.2.2, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\Panuon.WPF.1.1.2.2\lib\net472\Panuon.WPF.dll</HintPath>
+    </Reference>
+    <Reference Include="Panuon.WPF.UI, Version=1.2.4.8, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\Panuon.WPF.UI.1.2.4.9\lib\net472\Panuon.WPF.UI.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Web" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xaml">
+      <RequiredTargetFramework>4.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="WindowsBase" />
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="IOMonitor.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Compile Include="Entity\DioData.cs" />
+    <Compile Include="IOMonitor.xaml.cs">
+      <DependentUpon>IOMonitor.xaml</DependentUpon>
+      <SubType>Code</SubType>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <None Include="packages.config" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HMI.Base\HMI.Base.csproj">
+      <Project>{2a6f9720-a890-4036-9d73-41a0dae28341}</Project>
+      <Name>HMI.Base</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HMI.Core\HMI.Core.csproj">
+      <Project>{3e3bf44a-0b69-45c5-9512-528cb48a7106}</Project>
+      <Name>HMI.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HMI.UI\HMI.UI.csproj">
+      <Project>{f17de6b5-af1d-48c6-94a0-6b763a6546a6}</Project>
+      <Name>HMI.UI</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>copy /Y "$(TargetPath)" "$(SolutionDir)bin\$(PlatformName)\$(ConfigurationName)\Plugin\$(TargetFileName)" 
+copy /Y "$(TargetDir)$(TargetName).pdb" "$(SolutionDir)bin\$(PlatformName)\$(ConfigurationName)\Plugin\$(TargetName).pdb"</PostBuildEvent>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/HMI.IOMonitor/IOMonitor.xaml b/HMI.IOMonitor/IOMonitor.xaml
new file mode 100644
index 0000000..26a0da3
--- /dev/null
+++ b/HMI.IOMonitor/IOMonitor.xaml
@@ -0,0 +1,126 @@
+锘�<hb:PluginControl x:Class="HMI.IOMonitor.IOMonitor"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:hb="clr-namespace:HMI.Base;assembly=HMI.Base"
+             xmlns:local="clr-namespace:HMI.IOMonitor"
+             xmlns:uic="clr-namespace:HMI.UI.Converter;assembly=HMI.UI"
+             xmlns:ui="clr-namespace:HMI.UI;assembly=HMI.UI"
+             xmlns:pw="https://opensource.panuon.com/wpf"
+             xmlns:pu="https://opensource.panuon.com/wpf-ui"
+             xmlns:dp="clr-namespace:HMI.UI;assembly=HMI.UI"
+             mc:Ignorable="d" 
+             Padding="10"
+             Loaded="UserControl_Loaded"
+             Background="{StaticResource WorkspaceBackground}"
+             d:DesignHeight="450" d:DesignWidth="800">
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="5*"/>
+            <ColumnDefinition Width="5*"/>
+        </Grid.ColumnDefinitions>
+
+        <Border Style="{StaticResource CardBoarder}" Margin="0,0,2,0">
+            <StackPanel>
+                <DockPanel Margin="0,0,0,10">
+                    <Button DockPanel.Dock="Right" pu:ButtonHelper.Icon="&#xe934;" Style="{StaticResource DangerButton}">鍒犻櫎</Button>
+                    <Button DockPanel.Dock="Right" Style="{StaticResource PrimaryButton}" 
+pu:IconHelper.FontFamily="{StaticResource iconfont}"
+pu:ButtonHelper.Icon="&#xe631;" Margin="0,0,10,0" x:Name="refreshBtn" Click="Button_Click">鍒锋柊</Button>
+                    <Button DockPanel.Dock="Right" Style="{StaticResource PrimaryButton}" 
+            pu:IconHelper.FontFamily="{StaticResource iconfont}"
+            pu:ButtonHelper.Icon="&#xe61a;" Margin="0,0,10,0" x:Name="addBtn" Click="Button_Click">鏂板</Button>
+                    <TextBlock DockPanel.Dock="Left" FontSize="{StaticResource TitleFontSize}" 
+                           VerticalAlignment="Center" HorizontalAlignment="Left" Text="鑿滃崟鍒楄〃"/>
+                </DockPanel>
+
+                <DataGrid Grid.Column="1" x:Name="diTable" Style="{StaticResource DefaultDataGrid}" ItemsSource="{Binding DataSource}">
+                    <DataGrid.Columns>
+                        <DataGridTemplateColumn Header="" Width="Auto" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <CheckBox VerticalAlignment="Center" IsChecked="{Binding Selected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+                        <DataGridTemplateColumn Header="#" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <TextBlock Text="{Binding Converter={StaticResource rowNumber},
+                    RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}"/>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+                        <DataGridTextColumn Width="*" Binding="{Binding Code}" Header="缂栧彿" />
+                        <DataGridTextColumn Width="*" Binding="{Binding Name}" Header="鍚嶇О" />
+                        <DataGridTextColumn Width="*" Binding="{Binding Type}" Header="绫诲瀷" />
+                        <DataGridTextColumn Width="*" Binding="{Binding Value}" Header="DI鍊�" />
+                        <DataGridTemplateColumn Header="鎿嶄綔" Width="100" IsReadOnly="True" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <StackPanel Orientation="Horizontal">
+                                        <Button x:Name="editBtn" Style="{StaticResource RowLink}" 
+                            Margin="0,0,10,0" 
+                            Click="Button_Click"
+                            DataContext="{Binding }">缂栬緫</Button>
+                                        <Button x:Name="delBtn" Style="{StaticResource DangerLinkButton}" 
+                            DataContext="{Binding }"
+                            Click="Button_Click">鍒犻櫎</Button>
+                                    </StackPanel>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+                    </DataGrid.Columns>
+                </DataGrid>
+            </StackPanel>
+        </Border>
+
+        <Border Grid.Column="1" Style="{StaticResource CardBoarder}" Margin="2,0,0,0">
+            <StackPanel>
+                <DockPanel Margin="0,0,0,10" >
+                    <TextBlock DockPanel.Dock="Left" FontSize="{StaticResource TitleFontSize}" 
+                   VerticalAlignment="Center" HorizontalAlignment="Left" Text="鑿滃崟缁撴瀯"/>
+                </DockPanel>
+
+                <DataGrid Grid.Column="1" x:Name="doTable" Style="{StaticResource DefaultDataGrid}" ItemsSource="{Binding DataSource}">
+                    <DataGrid.Columns>
+                        <DataGridTemplateColumn Header="" Width="Auto" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <CheckBox VerticalAlignment="Center" IsChecked="{Binding Selected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+                        <DataGridTemplateColumn Header="#" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <TextBlock Text="{Binding Converter={StaticResource rowNumber},
+    RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}"/>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+                        <DataGridTextColumn Width="*" Binding="{Binding Code}" Header="缂栧彿"/>
+                        <DataGridTextColumn Width="*" Binding="{Binding Name}" Header="鍚嶇О" />
+                        <DataGridTextColumn Width="*" Binding="{Binding Type}" Header="绫诲瀷" />
+                        <DataGridTextColumn Width="*" Binding="{Binding Value}" Header="DO鍊�" />
+                        <DataGridTemplateColumn Header="鎿嶄綔" Width="100" IsReadOnly="True" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <StackPanel Orientation="Horizontal" ui:StackPanelHelper.ChildSpace="10">
+                                        <Button x:Name="editBtn" Style="{StaticResource RowLink}"
+            Click="Button_Click"
+            DataContext="{Binding }">缂栬緫</Button>
+                                        <Button x:Name="delBtn" Style="{StaticResource DangerLinkButton}" 
+            DataContext="{Binding }"
+            Click="Button_Click">鍒犻櫎</Button>
+                                    </StackPanel>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+                    </DataGrid.Columns>
+                </DataGrid>
+            </StackPanel>
+        </Border>
+    </Grid>
+</hb:PluginControl>
\ No newline at end of file
diff --git a/HMI.IOMonitor/IOMonitor.xaml.cs b/HMI.IOMonitor/IOMonitor.xaml.cs
new file mode 100644
index 0000000..cae019c
--- /dev/null
+++ b/HMI.IOMonitor/IOMonitor.xaml.cs
@@ -0,0 +1,29 @@
+锘縰sing System.Windows;
+using System.Windows.Controls;
+using HMI.Base;
+using HMI.Core.Api;
+using log4net;
+
+namespace HMI.IOMonitor
+{
+    /// <summary>
+    /// UserControl1.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class IOMonitor : PluginControl
+    {
+        public IOMonitor()
+        {
+            InitializeComponent();
+        }
+
+        private void UserControl_Loaded(object sender, RoutedEventArgs e)
+        {
+
+        }
+
+        private void Button_Click(object sender, RoutedEventArgs e)
+        {
+
+        }
+    }
+}
diff --git a/HMI.IOMonitor/Properties/AssemblyInfo.cs b/HMI.IOMonitor/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..881d24a
--- /dev/null
+++ b/HMI.IOMonitor/Properties/AssemblyInfo.cs
@@ -0,0 +1,52 @@
+锘縰sing System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
+[assembly: AssemblyTitle("HMI.IOMonitor")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Organization")]
+[assembly: AssemblyProduct("HMI.IOMonitor")]
+[assembly: AssemblyCopyright("Copyright 漏 Organization 2025")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏� ComVisible 璁剧疆涓� false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵� COM 缁勪欢涓嶅彲瑙併�傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�ц缃负 true銆�
+[assembly: ComVisible(false)]
+
+//鑻ヨ寮�濮嬬敓鎴愬彲鏈湴鍖栫殑搴旂敤绋嬪簭锛岃璁剧疆
+//.csproj 鏂囦欢涓殑 <UICulture>CultureYouAreCodingWith</UICulture>
+//鍦� <PropertyGroup> 涓�備緥濡傦紝濡傛灉浣犱娇鐢ㄧ殑鏄編鍥借嫳璇��
+//浣跨敤鐨勬槸缇庡浗鑻辫锛岃灏� <UICulture> 璁剧疆涓� en-US銆�  鐒跺悗鍙栨秷
+//瀵逛互涓� NeutralResourceLanguage 鐗规�х殑娉ㄩ噴銆�  鏇存柊
+//浠ヤ笅琛屼腑鐨勨�渆n-US鈥濅互鍖归厤椤圭洰鏂囦欢涓殑 UICulture 璁剧疆銆�
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly:ThemeInfo(
+    ResourceDictionaryLocation.None, //涓婚鐗瑰畾璧勬簮璇嶅吀鎵�澶勪綅缃�
+                             //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                             //鎴栧簲鐢ㄧ▼搴忚祫婧愬瓧鍏镐腑鎵惧埌鏃朵娇鐢�)
+    ResourceDictionaryLocation.SourceAssembly //甯歌璧勬簮璇嶅吀鎵�澶勪綅缃�
+                                      //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                                      //銆佸簲鐢ㄧ▼搴忔垨浠讳綍涓婚涓撶敤璧勬簮瀛楀吀涓壘鍒版椂浣跨敤)
+)]
+
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�肩粍鎴�: 
+//
+//      涓荤増鏈�
+//      娆$増鏈�
+//      鐢熸垚鍙�
+//      淇鍙�
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/HMI.IOMonitor/Properties/Resources.Designer.cs b/HMI.IOMonitor/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..faca3a5
--- /dev/null
+++ b/HMI.IOMonitor/Properties/Resources.Designer.cs
@@ -0,0 +1,62 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
+//     杩愯鏃剁増鏈�: 4.0.30319.42000
+//
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳藉鑷翠笉姝g‘鐨勮涓猴紝濡傛灉
+//     閲嶆柊鐢熸垚浠g爜锛屽垯鎵�鍋氭洿鏀瑰皢涓㈠け銆�
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HMI.IOMonitor.Properties {
+    
+    
+    /// <summary>
+    ///   寮虹被鍨嬭祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲瀛楃涓茬瓑銆�
+    /// </summary>
+    // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+    // 绫婚�氳繃绫讳技浜� ResGen 鎴� Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆�
+    // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈� .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛� ResGen
+    // (浠� /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆�
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   杩斿洖姝ょ被浣跨敤鐨勭紦瀛� ResourceManager 瀹炰緥銆�
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if ((resourceMan == null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HMI.IOMonitor.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   閲嶅啓褰撳墠绾跨▼鐨� CurrentUICulture 灞炴�э紝瀵�
+        ///   浣跨敤姝ゅ己绫诲瀷璧勬簮绫荤殑鎵�鏈夎祫婧愭煡鎵炬墽琛岄噸鍐欍��
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}
diff --git a/HMI.IOMonitor/Properties/Resources.resx b/HMI.IOMonitor/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/HMI.IOMonitor/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/HMI.IOMonitor/Properties/Settings.Designer.cs b/HMI.IOMonitor/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..d5b5de5
--- /dev/null
+++ b/HMI.IOMonitor/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HMI.IOMonitor.Properties
+{
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}
diff --git a/HMI.IOMonitor/Properties/Settings.settings b/HMI.IOMonitor/Properties/Settings.settings
new file mode 100644
index 0000000..033d7a5
--- /dev/null
+++ b/HMI.IOMonitor/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘�<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>
\ No newline at end of file
diff --git a/HMI.IOMonitor/packages.config b/HMI.IOMonitor/packages.config
new file mode 100644
index 0000000..63cdc53
--- /dev/null
+++ b/HMI.IOMonitor/packages.config
@@ -0,0 +1,6 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="log4net" version="3.0.3" targetFramework="net472" />
+  <package id="Panuon.WPF" version="1.1.2.2" targetFramework="net472" />
+  <package id="Panuon.WPF.UI" version="1.2.4.9" targetFramework="net472" />
+</packages>
\ No newline at end of file
diff --git a/HMI.MenuManage/Entity/MenuData.cs b/HMI.MenuManage/Entity/MenuData.cs
new file mode 100644
index 0000000..ee3f1fb
--- /dev/null
+++ b/HMI.MenuManage/Entity/MenuData.cs
@@ -0,0 +1,46 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using HMI.Core.Entity;
+
+namespace HMI.MenuManage.Entity
+{
+    public class MenuData : NotifyBase
+    {
+        public string Id { get; set; }
+        public string Code { get; set; }
+        public string Name { get; set; }
+        public string IconPath { get; set; }
+        public string Level { get; set; }
+        public string Type { get; set; }
+        public string ParentCode { get; set; }
+        public string ParentName { get; set; }
+        public string DllPath { get; set; }
+        public string ClassName { get; set; }
+
+        private ObservableCollection<MenuData> _Children = new ObservableCollection<MenuData>();
+
+        public ObservableCollection<MenuData> Children
+        {
+            get => _Children;
+            set
+            {
+                Set(ref _Children, value);
+            }
+        }
+
+        private bool _Selected;
+
+        public bool Selected
+        {
+            get => _Selected;
+            set
+            {
+                Set(ref _Selected, value);
+            }
+        }
+    }
+}
diff --git a/HMI.MenuManage/Entity/RoleData.cs b/HMI.MenuManage/Entity/RoleData.cs
new file mode 100644
index 0000000..472d757
--- /dev/null
+++ b/HMI.MenuManage/Entity/RoleData.cs
@@ -0,0 +1,29 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using HMI.Core.Entity;
+
+namespace HMI.MenuManage.Entity
+{
+    public class RoleData : NotifyBase
+    {
+        public string Id { get; set; }
+        public string Code { get; set; }
+        public string Name { get; set; }
+
+        private bool _Selected;
+        public bool Selected
+        {
+            get => _Selected;
+            set
+            {
+                if (_Selected != value)
+                {
+                    Set(ref _Selected, value);
+                }
+            }
+        }
+    }
+}
diff --git a/HMI.MenuManage/Entity/RoleMenuRel.cs b/HMI.MenuManage/Entity/RoleMenuRel.cs
new file mode 100644
index 0000000..54bde29
--- /dev/null
+++ b/HMI.MenuManage/Entity/RoleMenuRel.cs
@@ -0,0 +1,64 @@
+锘縰sing System;
+using System.Collections.ObjectModel;
+using System.Windows.Input;
+using HMI.Core.Entity;
+
+namespace HMI.MenuManage.Entity
+{
+    public class RoleMenuRel : NotifyBase
+    {
+        private event EventHandler<bool> SelectedChanged;
+
+        public string Id { get; set; }
+        public string RoleCode { get; set; }
+        public string RoleName { get; set; }
+        public string MenuCode { get; set; }
+        public string ParentCode { get; set; }
+        public string MenuName { get; set; }
+        public string MenuIcon { get; set; }
+
+        private bool _Selected;
+        public bool Selected
+        {
+            get => _Selected;
+            set
+            {
+                if (_Selected != value)
+                {
+                    Set(ref _Selected, value);
+                }
+            }
+        }
+
+        public ICommand CheckCommand
+        {
+            get => new RelayCommand<bool>(ExcuteCheckCommand);
+        }
+
+        private void ExcuteCheckCommand(bool flag)
+        {
+            if (flag && Parent != null) Parent.Selected = flag;
+            foreach (var item in Children)
+            {
+                item.Selected = flag;
+            }
+        }
+
+
+        public RoleMenuRel Parent;
+
+        private ObservableCollection<RoleMenuRel> _Children = new ObservableCollection<RoleMenuRel>();
+
+        public ObservableCollection<RoleMenuRel> Children
+        {
+            get { return _Children; }
+            set { Set(ref _Children, value); }
+        }
+
+        public void AddChild(RoleMenuRel child)
+        {
+            child.Parent = this;
+            Children.Add(child);
+        }
+    }
+}
diff --git a/HMI.MenuManage/Entity/UserData.cs b/HMI.MenuManage/Entity/UserData.cs
new file mode 100644
index 0000000..a89d19f
--- /dev/null
+++ b/HMI.MenuManage/Entity/UserData.cs
@@ -0,0 +1,31 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using HMI.Core.Entity;
+
+namespace HMI.MenuManage.Entity
+{
+    public class UserData : NotifyBase
+    {
+        public string Id { get; set; }
+        public string Name { get; set; }
+        public string Username { get; set; }
+        public string Password { get; set; }
+        public string RoleCode { get; set; }
+
+        private bool _Selected;
+        public bool Selected
+        {
+            get => _Selected;
+            set
+            {
+                if (_Selected != value)
+                {
+                    Set(ref _Selected, value);
+                }
+            }
+        }
+    }
+}
diff --git a/HMI.MenuManage/Entity/UserRoleRel.cs b/HMI.MenuManage/Entity/UserRoleRel.cs
new file mode 100644
index 0000000..7d662e3
--- /dev/null
+++ b/HMI.MenuManage/Entity/UserRoleRel.cs
@@ -0,0 +1,26 @@
+锘縰sing System;
+using System.Collections.ObjectModel;
+using System.Windows.Input;
+using HMI.Core.Entity;
+
+namespace HMI.MenuManage.Entity
+{
+    public class UserRoleRel : NotifyBase
+    {
+        public string Id { get; set; }
+        public string Username { get; set; }
+        public string RealName { get; set; }
+        public string RoleCode { get; set; }
+        public string RoleName { get; set; }
+
+        private bool _Selected;
+        public bool Selected
+        {
+            get => _Selected;
+            set
+            {
+                Set(ref _Selected, value);
+            }
+        }
+    }
+}
diff --git a/HMI.MenuManage/HMI.MenuManage.csproj b/HMI.MenuManage/HMI.MenuManage.csproj
new file mode 100644
index 0000000..9e48564
--- /dev/null
+++ b/HMI.MenuManage/HMI.MenuManage.csproj
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{DE4205C6-5923-46FD-A4B9-65169BF61C75}</ProjectGuid>
+    <OutputType>library</OutputType>
+    <RootNamespace>HMI.MenuManage</RootNamespace>
+    <AssemblyName>HMI.MenuManage</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <WarningLevel>4</WarningLevel>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="DatabaseHelper">
+      <HintPath>..\Libs\DatabaseHelper.dll</HintPath>
+    </Reference>
+    <Reference Include="log4net, Version=3.0.3.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\log4net.3.0.3\lib\net462\log4net.dll</HintPath>
+    </Reference>
+    <Reference Include="Panuon.WPF, Version=1.1.2.2, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\Panuon.WPF.1.1.2.2\lib\net472\Panuon.WPF.dll</HintPath>
+    </Reference>
+    <Reference Include="Panuon.WPF.UI, Version=1.2.4.8, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\Panuon.WPF.UI.1.2.4.9\lib\net472\Panuon.WPF.UI.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Data.SQLite">
+      <HintPath>..\Libs\System.Data.SQLite.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Data.SQLite.EF6">
+      <HintPath>..\Libs\System.Data.SQLite.EF6.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Data.SQLite.Linq">
+      <HintPath>..\Libs\System.Data.SQLite.Linq.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Web" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xaml">
+      <RequiredTargetFramework>4.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="WindowsBase" />
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Entity\MenuData.cs" />
+    <Compile Include="Entity\RoleData.cs" />
+    <Compile Include="Entity\UserRoleRel.cs" />
+    <Compile Include="Entity\RoleMenuRel.cs" />
+    <Compile Include="Entity\UserData.cs" />
+    <Compile Include="Modal\RoleModal.xaml.cs">
+      <DependentUpon>RoleModal.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="Model\RoleManageModel.cs" />
+    <Compile Include="RoleManage.xaml.cs">
+      <DependentUpon>RoleManage.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="Modal\UserModal.xaml.cs">
+      <DependentUpon>UserModal.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="Model\UserManageModel.cs" />
+    <Compile Include="UserManage.xaml.cs">
+      <DependentUpon>UserManage.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="Util\UserRoleRelHelper.cs" />
+    <Compile Include="Util\RoleHelper.cs" />
+    <Compile Include="Util\RoleMenuHelper.cs" />
+    <Page Include="Modal\RoleModal.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Page Include="RoleManage.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Page Include="MenuManage.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Compile Include="MenuManage.xaml.cs">
+      <DependentUpon>MenuManage.xaml</DependentUpon>
+      <SubType>Code</SubType>
+    </Compile>
+    <Page Include="Modal\UserModal.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Page Include="Modal\MenuModal.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
+    <Page Include="UserManage.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Modal\MenuModal.xaml.cs">
+      <DependentUpon>MenuModal.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="Model\MenuManageModel.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <None Include="packages.config" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HMI.Base\HMI.Base.csproj">
+      <Project>{2a6f9720-a890-4036-9d73-41a0dae28341}</Project>
+      <Name>HMI.Base</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HMI.Core\HMI.Core.csproj">
+      <Project>{3e3bf44a-0b69-45c5-9512-528cb48a7106}</Project>
+      <Name>HMI.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HMI.UI\HMI.UI.csproj">
+      <Project>{f17de6b5-af1d-48c6-94a0-6b763a6546a6}</Project>
+      <Name>HMI.UI</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/HMI.MenuManage/MenuManage.xaml b/HMI.MenuManage/MenuManage.xaml
new file mode 100644
index 0000000..0044f48
--- /dev/null
+++ b/HMI.MenuManage/MenuManage.xaml
@@ -0,0 +1,131 @@
+锘�<hb:PluginControl x:Class="HMI.MenuManage.MenuManage"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:hb="clr-namespace:HMI.Base;assembly=HMI.Base"
+             xmlns:local="clr-namespace:HMI.MenuManage"
+             xmlns:uic="clr-namespace:HMI.UI.Converter;assembly=HMI.UI"
+             xmlns:pw="https://opensource.panuon.com/wpf"
+             xmlns:pu="https://opensource.panuon.com/wpf-ui"
+             xmlns:dp="clr-namespace:HMI.UI;assembly=HMI.UI"
+             mc:Ignorable="d" 
+             Padding="10"
+             Loaded="DataGrid_Loaded"
+             Background="{StaticResource WorkspaceBackground}"
+             d:DesignHeight="450" d:DesignWidth="800">
+    <UserControl.Resources>
+        <ResourceDictionary>
+            <ResourceDictionary.MergedDictionaries>
+                <pu:StyleDictionary Includes="TreeView" />
+                <ResourceDictionary Source="/HMI.UI;component/Style/PanuonResource.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Resources/Font/Font.xaml"/>
+            </ResourceDictionary.MergedDictionaries>
+
+            <uic:PathImageConverter x:Key="path2Image"/>
+            <uic:DataGridRowNumberConverter x:Key="rowNumber"/>
+        </ResourceDictionary>
+    </UserControl.Resources>
+
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="7*"/>
+            <ColumnDefinition Width="3*"/>
+        </Grid.ColumnDefinitions>
+
+        <Border Style="{StaticResource CardBoarder}" Margin="0,0,2,0">
+            <StackPanel>
+                <DockPanel Margin="0,0,0,10">
+                    <Button DockPanel.Dock="Right" pu:ButtonHelper.Icon="&#xe934;" Style="{StaticResource DangerButton}">鍒犻櫎</Button>
+                    <Button DockPanel.Dock="Right" Style="{StaticResource PrimaryButton}" 
+pu:IconHelper.FontFamily="{StaticResource iconfont}"
+pu:ButtonHelper.Icon="&#xe631;" Margin="0,0,10,0" x:Name="refreshBtn" Click="Button_Click">鍒锋柊</Button>
+                    <Button DockPanel.Dock="Right" Style="{StaticResource PrimaryButton}" 
+            pu:IconHelper.FontFamily="{StaticResource iconfont}"
+            pu:ButtonHelper.Icon="&#xe61a;" Margin="0,0,10,0" x:Name="addBtn" Click="Button_Click">鏂板</Button>
+                    <TextBlock DockPanel.Dock="Left" FontSize="{StaticResource TitleFontSize}" 
+                           VerticalAlignment="Center" HorizontalAlignment="Left" Text="鑿滃崟鍒楄〃"/>
+                </DockPanel>
+
+                <DataGrid Grid.Column="1" x:Name="table" Style="{StaticResource DefaultDataGrid}" ItemsSource="{Binding DataSource}">
+                    <DataGrid.Columns>
+                        <DataGridTemplateColumn Header="" Width="Auto" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <CheckBox VerticalAlignment="Center" IsChecked="{Binding Selected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+                        <DataGridTemplateColumn Header="#" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <TextBlock Text="{Binding Converter={StaticResource rowNumber},
+                    RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}"/>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+                        <DataGridTextColumn Binding="{Binding Code}" Header="鑿滃崟缂栧彿" />
+                        <DataGridTextColumn Binding="{Binding Name}" Header="鑿滃崟鍚嶇О" />
+                        <DataGridTextColumn Binding="{Binding Level}" Header="绛夌骇" />
+                        <DataGridTextColumn Binding="{Binding Type}" Header="绫诲瀷" />
+                        <DataGridTextColumn Binding="{Binding Name}" Header="鑿滃崟鍚嶇О" />
+                        <DataGridTextColumn Binding="{Binding ParentCode}" Header="鐖惰彍鍗曠紪鍙�" />
+                        <DataGridTextColumn Binding="{Binding ParentName}" Header="鐖惰彍鍗曞悕绉�" />
+                        <DataGridTextColumn Width="*" Binding="{Binding DllPath}" Header="Dll璺緞" />
+                        <DataGridTextColumn Width="*" Binding="{Binding ClassName}" Header="绫诲悕" />
+                        <DataGridTemplateColumn Header="鎿嶄綔" Width="100" IsReadOnly="True" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <StackPanel Orientation="Horizontal">
+                                        <Button x:Name="editBtn" Style="{StaticResource LinkButton}" 
+                            Margin="0,0,10,0" 
+                            Click="Button_Click"
+                            DataContext="{Binding }">缂栬緫</Button>
+                                        <Button x:Name="delBtn" Style="{StaticResource DangerLinkButton}" 
+                            DataContext="{Binding }"
+                            Click="Button_Click">鍒犻櫎</Button>
+                                    </StackPanel>
+
+                                    <DataTemplate.Triggers>
+                                        <DataTrigger Binding="{Binding Path=IsMouseOver,
+                        RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}" 
+                                 Value="True">
+                                            <Setter TargetName="editBtn" Property="Foreground" Value="#FFF"/>
+                                        </DataTrigger>
+                                        <DataTrigger Binding="{Binding Path=IsSelected,
+                        RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}" 
+                                 Value="True">
+                                            <Setter TargetName="editBtn" Property="Foreground" Value="#FFF"/>
+                                        </DataTrigger>
+                                    </DataTemplate.Triggers>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+                    </DataGrid.Columns>
+                </DataGrid>
+            </StackPanel>
+        </Border>
+
+        <Border Grid.Column="1" Style="{StaticResource CardBoarder}" Margin="2,0,0,0">
+            <StackPanel>
+                <DockPanel Margin="0,0,0,10" >
+                    <TextBlock DockPanel.Dock="Left" FontSize="{StaticResource TitleFontSize}" 
+                   VerticalAlignment="Center" HorizontalAlignment="Left" Text="鑿滃崟缁撴瀯"/>
+                </DockPanel>
+
+                <TreeView x:Name="treeViewer" Style="{StaticResource DefaultTreeView}" ItemsSource="{Binding TreeDataSource}"
+                          SelectedItemChanged="treeViewer_SelectedItemChanged">
+                    <TreeView.ItemTemplate>
+                        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
+                            <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
+                                <Image Width="{StaticResource ContentFontSize}" Height="{StaticResource ContentFontSize}" Margin="5" 
+                                       Source="{Binding IconPath,Converter={StaticResource path2Image},Mode=OneWay}"/>
+                                <TextBlock VerticalAlignment="Center" FontSize="{StaticResource ContentFontSize}" Text="{Binding Name}"/>
+                            </StackPanel>
+                        </HierarchicalDataTemplate>
+                    </TreeView.ItemTemplate>
+                </TreeView>
+            </StackPanel>
+        </Border>
+    </Grid>
+</hb:PluginControl>
diff --git a/HMI.MenuManage/MenuManage.xaml.cs b/HMI.MenuManage/MenuManage.xaml.cs
new file mode 100644
index 0000000..25585e7
--- /dev/null
+++ b/HMI.MenuManage/MenuManage.xaml.cs
@@ -0,0 +1,149 @@
+锘縰sing System;
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
+using System.Windows;
+using System.Windows.Controls;
+using HMI.Base;
+using HMI.MenuManage.Entity;
+using HMI.MenuManage.Model;
+using HMI.UI.Util;
+using log4net;
+
+namespace HMI.MenuManage
+{
+    /// <summary>
+    /// UserControl1.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class MenuManage : PluginControl
+    {
+        #region ...
+        public virtual event PropertyChangedEventHandler PropertyChanged;
+
+        protected virtual void RaisePropertyChanged(string name)
+        {
+
+            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
+        }
+
+        protected void RaiseAndSetIfChanged<T>(ref T old, T @new, [CallerMemberName] string propertyName = null)
+        {
+            old = @new;
+            if (propertyName != null)
+            {
+                RaisePropertyChanged(propertyName);
+            }
+        }
+        #endregion
+
+        #region 灞炴��
+        private MenuManageModel Model;
+        private ILog log;
+
+        #endregion
+
+        public MenuManage()
+        {
+            Model = new MenuManageModel();
+            this.DataContext = Model;
+            InitializeComponent();
+        }
+
+        #region 灞炴��
+
+        #endregion
+
+        private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
+        {
+            var btn = ((Button)sender);
+            if (btn.Name == "addBtn")
+            {
+                try
+                {
+                    MenuModal window = new MenuModal
+                    {
+                        Title = "鏂板鑿滃崟",
+                        sqliteHelper = Model.sqliteHelper,
+                        Owner = Window.GetWindow(this)
+                    };
+                    if (true == window.Open(new MenuData()))
+                    {
+                        MenuData data = window.Data;
+                        Model.LoadData();
+                    }
+                }
+                catch (Exception ex)
+                {
+                    log.Error("Add Menu Failed.", ex);
+                }
+            }
+            else if (btn.Name == "refreshBtn")
+            {
+                try
+                {
+                    Model.LoadData();
+                }
+                catch (Exception ex)
+                {
+                    log.Error("Refresh Menu List Failed.", ex);
+                }
+            }
+            else if (btn.Name == "deleteBtn") { }
+            else if (btn.Name == "editBtn")
+            {
+                try
+                {
+                    var data = (MenuData)btn.DataContext;
+                    MenuModal window = new MenuModal
+                    {
+                        Title = "缂栬緫鑿滃崟",
+                        sqliteHelper = Model.sqliteHelper,
+                        Owner = Window.GetWindow(this)
+                    };
+                    if (true == window.Open(data))
+                    {
+                        var newData = window.Data;
+                        Model.LoadData();
+                    }
+                }
+                catch (Exception ex)
+                {
+
+                    log.Error("Edit Menu Failed.", ex);
+                }
+            }
+            else if (btn.Name == "delBtn")
+            {
+                try
+                {
+                    var data = (MenuData)((Button)sender).DataContext;
+                    var res = MsgBoxHelper.WarnMessage(Window.GetWindow(this), $"纭畾鍒犻櫎[{data.Name}]鍚楋紵璇ユ搷浣滀笉鍙�嗭紒");
+                    if (res == MessageBoxResult.OK)
+                    {
+                        Model.DeleteMenuById(data.Id);
+                        Model.LoadData();
+                    }
+                }
+                catch (Exception ex)
+                {
+                    log.Error("Delete Menu Failed.", ex);
+                }
+            }
+        }
+
+        private void DataGrid_Loaded(object sender, RoutedEventArgs e)
+        {
+            Model.LoadData();
+            Loaded -= DataGrid_Loaded;
+        }
+
+        private void treeViewer_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
+        {
+            table.SelectedItem = e.NewValue;
+        }
+
+        public void SetLogger(ILog logger)
+        {
+            this.log = logger;
+        }
+    }
+}
diff --git a/HMI.MenuManage/Modal/MenuModal.xaml b/HMI.MenuManage/Modal/MenuModal.xaml
new file mode 100644
index 0000000..310e995
--- /dev/null
+++ b/HMI.MenuManage/Modal/MenuModal.xaml
@@ -0,0 +1,98 @@
+锘�<pu:WindowX x:Class="HMI.MenuManage.MenuModal"
+            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+            xmlns:local="clr-namespace:HMI.MenuManage"
+            xmlns:pw="https://opensource.panuon.com/wpf"
+            xmlns:pu="https://opensource.panuon.com/wpf-ui"
+            mc:Ignorable="d"
+            Title="Form"
+            SizeToContent="Height"
+            Width="600"
+            WindowStartupLocation="CenterOwner"
+            BorderBrush="#3E3E45"
+            BorderThickness="1"
+            Foreground="Black"
+            pu:WindowXCaption.Background="{StaticResource MainBorder}"
+            pu:WindowXModalDialog.ButtonStyle="{StaticResource ModalButton}"
+            pu:WindowXCaption.Foreground="#FFF"
+            pu:WindowXCaption.Buttons="Close"
+            pu:WindowXModalDialog.Buttons="OKCancel"
+            pu:WindowXModalDialog.CancelButtonContent="鍙栨秷"
+            pu:WindowXModalDialog.OKButtonContent="淇濆瓨"
+            pu:WindowXModalDialog.ButtonPanelMargin="0,30,10,10">
+    <Window.Resources>
+        <ResourceDictionary>
+            <ResourceDictionary.MergedDictionaries>
+                <ResourceDictionary Source="/HMI.UI;component/Resources/Font/Font.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/Colors.xaml"/>
+            </ResourceDictionary.MergedDictionaries>
+        </ResourceDictionary>
+    </Window.Resources>
+
+    <Grid Margin="10">
+        <StackPanel>
+            <pu:FormGroup x:Name="FgCode" Style="{StaticResource RequiredInputFormGroupStyle}" 
+                  Header="鑿滃崟缂栧彿" GroupName="MyFormGroup">
+                <TextBox x:Name="TbCode" Style="{StaticResource EditorTextBoxStyle}" />
+            </pu:FormGroup>
+
+            <pu:FormGroup x:Name="FgName" Style="{StaticResource RequiredInputFormGroupStyle}" 
+                              Header="鑿滃崟鍚嶇О" GroupName="MyFormGroup">
+                <TextBox x:Name="TbName" Style="{StaticResource EditorTextBoxStyle}" />
+            </pu:FormGroup>
+            <pu:FormGroup x:Name="FgIcon" Style="{StaticResource RequiredInputFormGroupStyle}" Header="鍥炬爣" GroupName="MyFormGroup">
+                <Grid>
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition />
+                        <ColumnDefinition Width="30" />
+                    </Grid.ColumnDefinitions>
+                    <TextBox x:Name="TbIcon" IsReadOnly="True" Style="{StaticResource EditorTextBoxStyle}" />
+                    <Button Grid.Column="1" BorderThickness="0,1,1,1" Style="{StaticResource SearchButton}"
+                            Click="IconSelect_Click"/>
+                </Grid>
+            </pu:FormGroup>
+
+            <pu:FormGroup x:Name="FgLevel" Style="{StaticResource RequiredInputFormGroupStyle}" Header="绾у埆" GroupName="MyFormGroup">
+                <ComboBox x:Name="TbLevel" Style="{StaticResource FormComboxStyle}">
+                    <ComboBoxItem>1</ComboBoxItem>
+                    <ComboBoxItem>2</ComboBoxItem>
+                </ComboBox>
+            </pu:FormGroup>
+
+            <pu:FormGroup x:Name="FgType" Style="{StaticResource RequiredInputFormGroupStyle}" Header="绫诲瀷" GroupName="MyFormGroup">
+                <ComboBox x:Name="TbType" Style="{StaticResource FormComboxStyle}">
+                    <ComboBoxItem>WPF</ComboBoxItem>
+                    <ComboBoxItem>LV</ComboBoxItem>
+                </ComboBox>
+            </pu:FormGroup>
+
+            <pu:FormGroup x:Name="FgParentCode" Style="{StaticResource RequiredInputFormGroupStyle}" Header="涓婄骇鑿滃崟" GroupName="MyFormGroup">
+                <Grid>
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition />
+                        <ColumnDefinition Width="30" />
+                    </Grid.ColumnDefinitions>
+                    <TextBox x:Name="TbParentCode" Style="{StaticResource EditorTextBoxStyle}" />
+                    <Button Grid.Column="1" Style="{StaticResource SearchButton}"/>
+                </Grid>
+            </pu:FormGroup>
+
+            <pu:FormGroup x:Name="FgDllPath" Style="{StaticResource RequiredInputFormGroupStyle}" Header="Dll鏂囦欢" GroupName="MyFormGroup">
+                <Grid>
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition />
+                        <ColumnDefinition Width="30" />
+                    </Grid.ColumnDefinitions>
+                    <TextBox x:Name="TbDllPath" IsReadOnly="True" Style="{StaticResource EditorTextBoxStyle}" />
+                    <Button Grid.Column="1" Click="DllSelect_Click" Style="{StaticResource SearchButton}"/>
+                </Grid>
+            </pu:FormGroup>
+
+            <pu:FormGroup x:Name="FgClassName" Style="{StaticResource RequiredInputFormGroupStyle}" Header="绫诲悕" GroupName="MyFormGroup">
+                <TextBox x:Name="TbClassName" Style="{StaticResource EditorTextBoxStyle}" />
+            </pu:FormGroup>
+        </StackPanel>
+    </Grid>
+</pu:WindowX>
diff --git a/HMI.MenuManage/Modal/MenuModal.xaml.cs b/HMI.MenuManage/Modal/MenuModal.xaml.cs
new file mode 100644
index 0000000..173b514
--- /dev/null
+++ b/HMI.MenuManage/Modal/MenuModal.xaml.cs
@@ -0,0 +1,298 @@
+锘縰sing System;
+using System.ComponentModel;
+using System.Reflection;
+using System.Windows;
+using Microsoft.Win32;
+using Panuon.WPF.UI;
+using HMI.Core.Annotation;
+using HMI.Core.Entity;
+using HMI.Core.Exceptions;
+using HMI.Core.Util;
+using HMI.MenuManage.Entity;
+
+namespace HMI.MenuManage
+{
+    /// <summary>
+    /// ModalWindow.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class MenuModal : WindowX
+    {
+        public MenuModal()
+        {
+            InitializeComponent();
+        }
+
+        public MenuData Data { get; set; }
+        public SqliteHelper sqliteHelper { get; set; }
+
+        private bool _isProcessing;
+
+        protected override void OnClosing(CancelEventArgs e)
+        {
+            //Press Continue Button
+            if (DialogResult == true)
+            {
+                if (_isProcessing)
+                {
+                    e.Cancel = true;
+                    return;
+                }
+                var okButton = WindowXModalDialog.GetOKButton(this);
+                try
+                {
+                    _isProcessing = true;
+                    ButtonHelper.SetIsPending(okButton, true);
+                    if (!ValidateForm())
+                    {
+                        e.Cancel = true;
+                        return;
+                    }
+
+                    SaveOrUpdateData();
+                }
+                catch (Exception ex)
+                {
+                    Panuon.WPF.UI.Toast.Show(this, "Error锛�", ToastPosition.Top);
+                    e.Cancel = true;
+                    return;
+                }
+                finally
+                {
+                    _isProcessing = false;
+                    ButtonHelper.SetIsPending(okButton, false);
+                }
+            }
+            base.OnClosing(e);
+        }
+
+        private bool ValidateForm()
+        {
+            try
+            {
+                FormValidateException ex = new FormValidateException();
+                string segment = string.IsNullOrEmpty(Data.Id) ? "" : $" AND id!='{Data.Id}'";
+                string sql = $"SELECT 1 FROM menu WHERE code='{TbCode.Text}'{segment};";
+                if (string.IsNullOrEmpty(TbCode.Text))
+                {
+                    ex.Result.Add(new FormGroupValidateResult("璇疯緭鍏ヨ彍鍗曠紪鍙�", FgCode));
+                }
+                else if (sqliteHelper.HasData(sql))
+                {
+                    ex.Result.Add(new FormGroupValidateResult("鑿滃崟缂栧彿涓嶈兘閲嶅", FgCode));
+                }
+                else
+                {
+                    FgCode.ValidateResult = ValidateResult.None;
+                    FgCode.Message = null;
+                }
+
+                if (string.IsNullOrEmpty(TbName.Text))
+                {
+                    ex.Result.Add(new FormGroupValidateResult("璇疯緭鍏ヨ彍鍗曞悕绉�", FgName));
+                }
+                else
+                {
+                    FgName.ValidateResult = ValidateResult.None;
+                    FgName.Message = null;
+                }
+
+                if(string.IsNullOrEmpty(TbIcon.Text))
+                {
+                    ex.Result.Add(new FormGroupValidateResult("璇烽�夋嫨鑿滃崟鍥炬爣", FgIcon));
+                }
+                else
+                {
+                    FgIcon.ValidateResult = ValidateResult.None;
+                    FgIcon.Message = null;
+                }
+
+                if (string.IsNullOrEmpty(TbLevel.Text))
+                {
+                    ex.Result.Add(new FormGroupValidateResult("璇烽�夋嫨鑿滃崟绾у埆", FgLevel));
+                }
+                else
+                {
+                    FgLevel.ValidateResult = ValidateResult.None;
+                    FgLevel.Message = null;
+                }
+
+                if (TbLevel.Text == "2")
+                {
+                    if (string.IsNullOrEmpty(TbType.Text))
+                    {
+                        ex.Result.Add(new FormGroupValidateResult("璇烽�夋嫨鑿滃崟绫诲瀷", FgType));
+                    }
+                    else
+                    {
+                        FgType.ValidateResult = ValidateResult.None;
+                        FgType.Message = null;
+                    }
+
+                    if (string.IsNullOrEmpty(TbParentCode.Text))
+                    {
+                        ex.Result.Add(new FormGroupValidateResult("璇烽�夋嫨涓婄骇鑿滃崟", FgParentCode));
+                    }
+                    else
+                    {
+                        FgParentCode.ValidateResult = ValidateResult.None;
+                        FgParentCode.Message = null;
+                    }
+
+                    if (string.IsNullOrEmpty(TbDllPath.Text))
+                    {
+                        ex.Result.Add(new FormGroupValidateResult("璇烽�夋嫨Dll璺緞", FgDllPath));
+                    }
+                    else
+                    {
+                        FgDllPath.ValidateResult = ValidateResult.None;
+                        FgDllPath.Message = null;
+                    }
+
+                    if (string.IsNullOrEmpty(TbClassName.Text))
+                    {
+                        ex.Result.Add(new FormGroupValidateResult("璇疯緭鍏ョ被鍚�", FgClassName));
+                    }
+                    else
+                    {
+                        FgClassName.ValidateResult = ValidateResult.None;
+                        FgClassName.Message = null;
+                    }
+
+                }
+                else { 
+
+                }
+
+                if (!ex.Success) {
+                    throw ex;
+                }
+            }
+            catch (FormValidateException ex)
+            {
+                foreach (var data in ex.Result)
+                {
+                    var fg = (FormGroup)data.Sender;
+                    fg.ValidateResult = ValidateResult.Error;
+                    fg.Message = data.Message;
+                }
+                return false;
+            }
+
+            Data.Code = TbCode.Text;
+            Data.Name = TbName.Text;
+            Data.IconPath = TbIcon.Text;
+            Data.Level = TbLevel.Text;
+            Data.Type = TbType.Text;
+            Data.ParentCode = TbParentCode.Text;
+            Data.DllPath = TbDllPath.Text;
+            Data.ClassName = TbClassName.Text;
+            return true;
+        }
+
+        public bool? Open(MenuData data)
+        {
+            Data = data;
+            TbCode.Text = Data.Code;
+            TbName.Text = Data.Name;
+            TbIcon.Text = Data.IconPath;
+            TbLevel.SelectedValue = Data.Level;
+            TbType.SelectedValue = Data.Type;
+            TbParentCode.Text = Data.ParentCode;
+            TbDllPath.Text = Data.DllPath;
+            TbClassName.Text = Data.ClassName;
+            return this.ShowDialog();
+        }
+
+        private void SaveOrUpdateData()
+        {
+            if (string.IsNullOrEmpty(Data.Id))
+            {
+                InsertMenu(Data);
+            }
+            else
+            {
+                UpdateMenu(Data);
+            }
+        }
+
+        public void InsertMenu(MenuData data)
+        {
+            string sql = $@"INSERT INTO menu (code,name,iconPath,level,type,parentCode,dllPath,className) 
+                VALUES
+                ('{data.Code}','{data.Name}','{data.IconPath}','{data.Level}','{data.Type}','{data.ParentCode}',
+                '{data.DllPath}','{data.ClassName}');";
+            sqliteHelper.ExecuteSql(sql);
+        }
+
+        public void UpdateMenu(MenuData data)
+        {
+            string sql = $@"UPDATE menu SET code='{data.Code}',name='{data.Name}',
+iconPath='{data.IconPath}',level='{data.Level}',type='{data.Type}',parentCode='{data.ParentCode}',
+dllPath='{data.DllPath}',className='{data.ClassName}' WHERE id='{data.Id}';";
+            sqliteHelper.ExecuteSql(sql);
+        }
+
+
+        private void IconSelect_Click(object sender, RoutedEventArgs e)
+        {
+            string BasePath = PathHelper.IconFolder;
+
+            OpenFileDialog openFileDialog = new OpenFileDialog();
+            openFileDialog.Filter = "(*.*)|*.*";
+            openFileDialog.InitialDirectory = BasePath;
+            openFileDialog.Title = "閫夋嫨鍥剧墖";
+            openFileDialog.Multiselect = false;
+
+            if (openFileDialog.ShowDialog() == true)
+            {
+                string FileName = openFileDialog.FileName;
+                if (!FileName.StartsWith(BasePath))
+                {
+                    Panuon.WPF.UI.Toast.Show(this, "璇峰皢鍥炬爣绉诲姩鑷崇▼搴廔con鐩綍涓嬶紒", ToastPosition.Top);
+                }
+                else
+                {
+                    TbIcon.Text = FileName.Replace(BasePath, ".");
+                }
+            }
+
+        }
+
+        private void DllSelect_Click(object sender, RoutedEventArgs e)
+        {
+            string pluginPath = PathHelper.PluginFolder();
+
+            OpenFileDialog openFileDialog = new OpenFileDialog();
+            openFileDialog.Filter = "(*.dll)|*.dll";
+            openFileDialog.InitialDirectory = pluginPath;
+            openFileDialog.Title = "閫夋嫨鏂囦欢";
+            openFileDialog.Multiselect = false;
+
+            if (openFileDialog.ShowDialog() == true)
+            {
+                string FileName = openFileDialog.FileName;
+                if (!FileName.StartsWith(pluginPath))
+                {
+                    Panuon.WPF.UI.Toast.Show(this, "璇峰皢鎻掍欢绉诲姩鑷崇▼搴廝lugin鐩綍涓嬶紒", ToastPosition.Top);
+                }
+                else
+                {
+                    TbDllPath.Text = FileName.Replace(pluginPath, ".");
+                    try
+                    {
+                        object[] infos = Assembly.LoadFrom(FileName).GetCustomAttributes(typeof(PluginClassNameAttribute), false);
+                        if (infos != null && infos.Length > 0)
+                        {
+                            PluginClassNameAttribute attr = (PluginClassNameAttribute)infos[0];
+                            TbClassName.Text = attr.ClassName;
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/HMI.MenuManage/Modal/RoleModal.xaml b/HMI.MenuManage/Modal/RoleModal.xaml
new file mode 100644
index 0000000..734f03e
--- /dev/null
+++ b/HMI.MenuManage/Modal/RoleModal.xaml
@@ -0,0 +1,69 @@
+锘�<pu:WindowX x:Class="HMI.MenuManage.RoleModal"
+            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+            xmlns:local="clr-namespace:HMI.MenuManage"
+            xmlns:pw="https://opensource.panuon.com/wpf"
+            xmlns:pu="https://opensource.panuon.com/wpf-ui"
+            mc:Ignorable="d"
+            Title="Form"
+            SizeToContent="Height"
+            Width="600"
+            WindowStartupLocation="CenterOwner"
+            BorderBrush="#3E3E45"
+            BorderThickness="1"
+            Foreground="Black"
+            pu:WindowXCaption.Background="{StaticResource MainBorder}"
+            pu:WindowXCaption.Foreground="#FFF"
+            pu:WindowXCaption.Buttons="Close"
+            pu:WindowXModalDialog.Buttons="OKCancel"
+            pu:WindowXModalDialog.CancelButtonContent="鍙栨秷"
+            pu:WindowXModalDialog.OKButtonContent="淇濆瓨"
+            pu:WindowXModalDialog.ButtonStyle="{StaticResource ModalButton}"
+            pu:WindowXModalDialog.ButtonPanelMargin="0,30,10,10">
+    <Window.Resources>
+        <ResourceDictionary>
+            <ResourceDictionary.MergedDictionaries>
+                <pu:StyleDictionary Includes="TextBox,ComboBox,Button" />
+                <ResourceDictionary Source="/HMI.UI;component/Resources/Font/Font.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/Colors.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/FormStyle.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/PanuonResource.xaml"/>
+            </ResourceDictionary.MergedDictionaries>
+        </ResourceDictionary>
+    </Window.Resources>
+
+    <Grid Margin="10">
+        <StackPanel>
+            <pu:FormGroup x:Name="FgCode" Style="{StaticResource RequiredInputFormGroupStyle}" 
+              Header="瑙掕壊缂栧彿" GroupName="MyFormGroup">
+                <TextBox x:Name="TbCode" Style="{StaticResource EditorTextBoxStyle}" />
+            </pu:FormGroup>
+
+            <pu:FormGroup x:Name="FgName" Style="{StaticResource RequiredInputFormGroupStyle}" 
+                              Header="瑙掕壊鍚嶇О" GroupName="MyFormGroup">
+                <TextBox x:Name="TbName" Style="{StaticResource EditorTextBoxStyle}" />
+            </pu:FormGroup>
+            
+            <pu:FormGroup x:Name="FgMenu" Orientation="Vertical" Style="{StaticResource RequiredInputFormGroupStyle}" 
+                              Header="鏉冮檺" GroupName="MyFormGroup">
+                <TreeView x:Name="menuTree" Grid.Column="1" Style="{StaticResource DefaultTreeView}" 
+                          ItemsSource="{Binding TreeDataSource}">
+                    <TreeView.ItemTemplate>
+                        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
+                            <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
+                                <CheckBox VerticalAlignment="Center" IsChecked="{Binding Selected}"
+Command="{Binding CheckCommand}"
+CommandParameter="{Binding Path=IsChecked,RelativeSource={RelativeSource Mode=Self}}"/>
+                                <Image Width="{StaticResource ContentFontSize}" 
+                                       Height="{StaticResource ContentFontSize}" Margin="5" Source="{Binding MenuIcon,Converter={StaticResource path2Image},Mode=OneWay}"/>
+                                <TextBlock VerticalAlignment="Center" Text="{Binding MenuName}"/>
+                            </StackPanel>
+                        </HierarchicalDataTemplate>
+                    </TreeView.ItemTemplate>
+                </TreeView>
+            </pu:FormGroup>
+        </StackPanel>
+    </Grid>
+</pu:WindowX>
diff --git a/HMI.MenuManage/Modal/RoleModal.xaml.cs b/HMI.MenuManage/Modal/RoleModal.xaml.cs
new file mode 100644
index 0000000..623a728
--- /dev/null
+++ b/HMI.MenuManage/Modal/RoleModal.xaml.cs
@@ -0,0 +1,168 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Reflection;
+using System.Windows;
+using Microsoft.Win32;
+using Panuon.WPF.UI;
+using HMI.Core.Annotation;
+using HMI.Core.Entity;
+using HMI.Core.Exceptions;
+using HMI.Core.Util;
+using HMI.MenuManage.Entity;
+using HMI.MenuManage.Util;
+
+namespace HMI.MenuManage
+{
+    /// <summary>
+    /// ModalWindow.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class RoleModal : WindowX
+    {
+        public RoleModal()
+        {
+            this.DataContext = this;
+            InitializeComponent();
+        }
+
+        public RoleData Data { get; set; }
+
+        private ObservableCollection<RoleMenuRel> _TreeDataSource;
+
+        public ObservableCollection<RoleMenuRel> TreeDataSource
+        {
+            get { return _TreeDataSource; }
+            set { Set(ref _TreeDataSource, value); }
+        }
+
+        public SqliteHelper sqliteHelper { get; set; }
+
+        private bool _isProcessing;
+
+        protected override void OnClosing(CancelEventArgs e)
+        {
+            //Press Continue Button
+            if (DialogResult == true)
+            {
+                if (_isProcessing)
+                {
+                    e.Cancel = true;
+                    return;
+                }
+                var okButton = WindowXModalDialog.GetOKButton(this);
+                try
+                {
+                    _isProcessing = true;
+                    ButtonHelper.SetIsPending(okButton, true);
+                    if (!ValidateForm())
+                    {
+                        e.Cancel = true;
+                        return;
+                    }
+
+                    SaveOrUpdateData();
+                }
+                catch (Exception ex)
+                {
+                    Panuon.WPF.UI.Toast.Show(this, "Error锛�", ToastPosition.Top);
+                    e.Cancel = true;
+                    return;
+                }
+                finally
+                {
+                    _isProcessing = false;
+                    ButtonHelper.SetIsPending(okButton, false);
+                }
+            }
+            base.OnClosing(e);
+        }
+
+        private bool ValidateForm()
+        {
+            try
+            {
+                FormValidateException ex = new FormValidateException();
+                string segment = string.IsNullOrEmpty(Data.Id) ? "" : $" AND id!='{Data.Id}'";
+                string sql = $"SELECT 1 FROM user WHERE username='{TbCode.Text}'{segment};";
+                if (string.IsNullOrEmpty(TbCode.Text))
+                {
+                    ex.Result.Add(new FormGroupValidateResult("璇疯緭鍏ヨ鑹茬紪鍙�", FgCode));
+                }
+                else if (sqliteHelper.HasData(sql))
+                {
+                    ex.Result.Add(new FormGroupValidateResult("瑙掕壊缂栧彿涓嶈兘閲嶅", FgCode));
+                }
+                else
+                {
+                    FgCode.ValidateResult = ValidateResult.None;
+                    FgCode.Message = null;
+                }
+
+                if (string.IsNullOrEmpty(TbName.Text))
+                {
+                    ex.Result.Add(new FormGroupValidateResult("璇疯緭鍏ヨ鑹插悕绉�", FgName));
+                }
+                else
+                {
+                    FgName.ValidateResult = ValidateResult.None;
+                    FgName.Message = null;
+                }
+
+                if (!ex.Success)
+                {
+                    throw ex;
+                }
+            }
+            catch (FormValidateException ex)
+            {
+                foreach (var data in ex.Result)
+                {
+                    var fg = (FormGroup)data.Sender;
+                    fg.ValidateResult = ValidateResult.Error;
+                    fg.Message = data.Message;
+                }
+                return false;
+            }
+
+            Data.Code = TbCode.Text;
+            Data.Name = TbName.Text;
+            return true;
+        }
+
+        public bool? Open(RoleData data)
+        {
+            Data = data;
+            TbCode.Text = Data.Code;
+            TbName.Text = Data.Name;
+            TreeDataSource = RoleMenuHelper.SelectRoleMenuTreeData(sqliteHelper, Data.Code);
+            return this.ShowDialog();
+        }
+
+        private void SaveOrUpdateData()
+        {
+            if (string.IsNullOrEmpty(Data.Id))
+            {
+                InsertData(Data);
+            }
+            else
+            {
+                UpdateData(Data);
+            }
+        }
+
+        public void InsertData(RoleData data)
+        {
+            string sql = $@"INSERT INTO role (code,name) 
+                VALUES
+                ('{data.Code}','{data.Name}');";
+            RoleMenuHelper.SaveRelData(sqliteHelper, TreeDataSource, data.Code, sql, null);
+        }
+
+        public void UpdateData(RoleData data)
+        {
+            string sql = $@"UPDATE role SET code='{data.Code}',name='{data.Name}' WHERE id='{data.Id}';";
+            RoleMenuHelper.SaveRelData(sqliteHelper, TreeDataSource, data.Code, sql, null);
+        }
+    }
+}
diff --git a/HMI.MenuManage/Modal/UserModal.xaml b/HMI.MenuManage/Modal/UserModal.xaml
new file mode 100644
index 0000000..6556a6f
--- /dev/null
+++ b/HMI.MenuManage/Modal/UserModal.xaml
@@ -0,0 +1,81 @@
+锘�<pu:WindowX x:Class="HMI.MenuManage.UserModal"
+            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+            xmlns:local="clr-namespace:HMI.MenuManage"
+            xmlns:pw="https://opensource.panuon.com/wpf"
+            xmlns:pu="https://opensource.panuon.com/wpf-ui"
+            xmlns:uic="clr-namespace:HMI.UI.Converter;assembly=HMI.UI"
+            mc:Ignorable="d"
+            Title="Form"
+            SizeToContent="Height"
+            Width="600"
+            WindowStartupLocation="CenterOwner"
+            BorderBrush="#3E3E45"
+            BorderThickness="1"
+            Foreground="Black"
+            pu:WindowXCaption.Background="{StaticResource MainBorder}"
+            pu:WindowXModalDialog.ButtonStyle="{StaticResource ModalButton}"
+            pu:WindowXCaption.Foreground="#FFF"
+            pu:WindowXCaption.Buttons="Close"
+            pu:WindowXModalDialog.Buttons="OKCancel"
+            pu:WindowXModalDialog.CancelButtonContent="鍙栨秷"
+            pu:WindowXModalDialog.OKButtonContent="淇濆瓨"
+            pu:WindowXModalDialog.ButtonPanelMargin="0,30,10,10">
+    <Window.Resources>
+        <ResourceDictionary>
+            <ResourceDictionary.MergedDictionaries>
+                <pu:StyleDictionary Includes="TreeView" />
+                <ResourceDictionary Source="/HMI.UI;component/Style/PanuonResource.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Resources/Font/Font.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/Colors.xaml"/>
+            </ResourceDictionary.MergedDictionaries>
+            <uic:PathImageConverter x:Key="path2Image"/>
+            <uic:DataGridRowNumberConverter x:Key="rowNumber"/>
+        </ResourceDictionary>
+    </Window.Resources>
+
+    <Grid Margin="10">
+        <StackPanel>
+            <pu:FormGroup x:Name="FgName" Style="{StaticResource RequiredInputFormGroupStyle}" 
+                              Header="鐢ㄦ埛鍚嶇О" GroupName="MyFormGroup">
+                <TextBox x:Name="TbName" Style="{StaticResource EditorTextBoxStyle}" />
+            </pu:FormGroup>
+
+            <pu:FormGroup x:Name="FgUsername" Style="{StaticResource RequiredInputFormGroupStyle}" 
+                          Header="璐﹀彿" GroupName="MyFormGroup">
+                <TextBox x:Name="TbUsername" Style="{StaticResource EditorTextBoxStyle}" />
+            </pu:FormGroup>
+
+            <pu:FormGroup x:Name="FgPassword" Style="{StaticResource RequiredInputFormGroupStyle}" 
+                  Header="瀵嗙爜" GroupName="MyFormGroup">
+                <TextBox x:Name="TbPassword" Style="{StaticResource EditorTextBoxStyle}" />
+            </pu:FormGroup>
+
+            <pu:FormGroup x:Name="FgRoleCode" Orientation="Vertical"
+                          Style="{StaticResource RequiredInputFormGroupStyle}" Header="瑙掕壊" GroupName="MyFormGroup">
+                <DataGrid x:Name="table" Style="{StaticResource DefaultDataGrid}" SelectionMode="Single" 
+           ItemsSource="{Binding Roles}">
+                    <DataGrid.Columns>
+                        <DataGridTemplateColumn Header="鎺堜簣" Width="Auto" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <CheckBox VerticalAlignment="Center" 
+                               HorizontalAlignment="Center" IsChecked="{Binding Selected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+
+                        <DataGridTextColumn Header="#"
+             Binding="{Binding Converter={StaticResource rowNumber},
+                     RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}"
+                             CanUserResize="False"/>
+                        <DataGridTextColumn Width="*" Binding="{Binding RoleCode}" Header="瑙掕壊缂栧彿" />
+                        <DataGridTextColumn Width="*" Binding="{Binding RoleName}" Header="瑙掕壊鍚嶇О" />
+                    </DataGrid.Columns>
+                </DataGrid>
+            </pu:FormGroup>
+        </StackPanel>
+    </Grid>
+</pu:WindowX>
diff --git a/HMI.MenuManage/Modal/UserModal.xaml.cs b/HMI.MenuManage/Modal/UserModal.xaml.cs
new file mode 100644
index 0000000..04cef20
--- /dev/null
+++ b/HMI.MenuManage/Modal/UserModal.xaml.cs
@@ -0,0 +1,173 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Linq;
+using System.Reflection;
+using System.Windows;
+using Microsoft.Win32;
+using Panuon.WPF.UI;
+using HMI.Core.Annotation;
+using HMI.Core.Entity;
+using HMI.Core.Exceptions;
+using HMI.Core.Util;
+using HMI.MenuManage.Entity;
+using HMI.MenuManage.Util;
+
+namespace HMI.MenuManage
+{
+    /// <summary>
+    /// ModalWindow.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class UserModal : WindowX
+    {
+        public UserModal()
+        {
+            this.DataContext = this;
+            InitializeComponent();
+        }
+
+        public UserData Data { get; set; }
+        private ObservableCollection<UserRoleRel> _Roles;
+        public ObservableCollection<UserRoleRel> Roles
+        {
+            get => _Roles;
+            set { Set(ref _Roles, value); }
+        }
+        public SqliteHelper sqliteHelper { get; set; }
+
+        private bool _isProcessing;
+
+        protected override void OnClosing(CancelEventArgs e)
+        {
+            //Press Continue Button
+            if (DialogResult == true)
+            {
+                if (_isProcessing)
+                {
+                    e.Cancel = true;
+                    return;
+                }
+                var okButton = WindowXModalDialog.GetOKButton(this);
+                try
+                {
+                    _isProcessing = true;
+                    ButtonHelper.SetIsPending(okButton, true);
+                    if (!ValidateForm())
+                    {
+                        e.Cancel = true;
+                        return;
+                    }
+
+                    SaveOrUpdateData();
+                }
+                catch (Exception ex)
+                {
+                    Panuon.WPF.UI.Toast.Show(this, "Error锛�", ToastPosition.Top);
+                    e.Cancel = true;
+                    return;
+                }
+                finally
+                {
+                    _isProcessing = false;
+                    ButtonHelper.SetIsPending(okButton, false);
+                }
+            }
+            base.OnClosing(e);
+        }
+
+        private bool ValidateForm()
+        {
+            try
+            {
+                FormValidateException ex = new FormValidateException();
+                string segment = string.IsNullOrEmpty(Data.Id) ? "" : $" AND id!='{Data.Id}'";
+                string sql = $"SELECT 1 FROM user WHERE username='{TbUsername.Text}'{segment};";
+                if (string.IsNullOrEmpty(TbUsername.Text))
+                {
+                    ex.Result.Add(new FormGroupValidateResult("璇疯緭鍏ヨ处鍙�", FgUsername));
+                }
+                else if (sqliteHelper.HasData(sql))
+                {
+                    ex.Result.Add(new FormGroupValidateResult("璐﹀彿涓嶈兘閲嶅", FgUsername));
+                }
+                else
+                {
+                    FgUsername.ValidateResult = ValidateResult.None;
+                    FgUsername.Message = null;
+                }
+
+                if (string.IsNullOrEmpty(TbName.Text))
+                {
+                    ex.Result.Add(new FormGroupValidateResult("璇疯緭鍏ョ敤鎴峰悕绉�", FgName));
+                }
+                else
+                {
+                    FgName.ValidateResult = ValidateResult.None;
+                    FgName.Message = null;
+                }
+
+                if (!ex.Success)
+                {
+                    throw ex;
+                }
+            }
+            catch (FormValidateException ex)
+            {
+                foreach (var data in ex.Result)
+                {
+                    var fg = (FormGroup)data.Sender;
+                    fg.ValidateResult = ValidateResult.Error;
+                    fg.Message = data.Message;
+                }
+                return false;
+            }
+
+            Data.Username = TbUsername.Text;
+            Data.Name = TbName.Text;
+            Data.Password = TbPassword.Text;
+            return true;
+        }
+
+        public bool? Open(UserData data)
+        {
+            Data = data;
+            TbUsername.Text = Data.Username;
+            TbName.Text = Data.Name;
+            TbPassword.Text = Data.Password;
+
+            Roles = UserRoleRelHelper.SelectUserRoleData(sqliteHelper, Data.Username);
+
+            return this.ShowDialog();
+        }
+
+        private void SaveOrUpdateData()
+        {
+            if (string.IsNullOrEmpty(Data.Id))
+            {
+                InsertData(Data);
+            }
+            else
+            {
+                UpdateData(Data);
+            }
+        }
+
+        public void InsertData(UserData data)
+        {
+            string sql = $@"INSERT INTO user (username,password,name) 
+                VALUES
+                ('{data.Username}','{data.Password}','{data.Name}');";
+            UserRoleRelHelper.SaveUserRoleRel(sqliteHelper, Roles, data, sql, null);
+        }
+
+
+
+        public void UpdateData(UserData data)
+        {
+            string sql = $@"UPDATE user SET username='{data.Username}',password='{data.Password}',name='{data.Name}' 
+WHERE id='{data.Id}';";
+            UserRoleRelHelper.SaveUserRoleRel(sqliteHelper, Roles, data, sql, null);
+        }
+    }
+}
diff --git a/HMI.MenuManage/Model/MenuManageModel.cs b/HMI.MenuManage/Model/MenuManageModel.cs
new file mode 100644
index 0000000..da797c0
--- /dev/null
+++ b/HMI.MenuManage/Model/MenuManageModel.cs
@@ -0,0 +1,110 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Data;
+using System.IO;
+using HMI.Core.Entity;
+using HMI.Core.Util;
+using HMI.MenuManage.Entity;
+
+namespace HMI.MenuManage.Model
+{
+    public class MenuManageModel : NotifyBase
+    {
+        public SqliteHelper sqliteHelper;
+
+        private ObservableCollection<MenuData> _DataSource;
+
+        public ObservableCollection<MenuData> DataSource
+        {
+            get => _DataSource;
+            set
+            {
+                Set(ref _DataSource, value);
+                Set(nameof(DataSourceCount));
+            }
+        }
+
+        public int DataSourceCount { get => DataSource?.Count ?? 0; }
+
+
+        private ObservableCollection<MenuData> _TreeDataSource;
+
+        public ObservableCollection<MenuData> TreeDataSource
+        {
+            get => _TreeDataSource;
+            set { Set(ref _TreeDataSource, value); }
+        }
+
+        public MenuManageModel()
+        {
+            if (!File.Exists(PathHelper.DatabasePath))
+            {
+                SqliteHelper.CreateDatabase(PathHelper.DatabasePath);
+            }
+            sqliteHelper = new SqliteHelper(PathHelper.DatabasePath);
+            sqliteHelper.ExecuteSql(@"CREATE TABLE IF NOT EXISTS menu (
+                    id INTEGER PRIMARY KEY AUTOINCREMENT,
+                    code TEXT NOT NULL,
+                    name TEXT NOT NULL,
+                    iconPath TEXT,
+                    level TEXT,
+                    type TEXT,
+                    parentCode TEXT,
+                    dllPath TEXT,
+                    className TEXT,
+                    UNIQUE(code)
+                    );");
+        }
+
+        public void LoadData()
+        {
+            ObservableCollection<MenuData> data = new ObservableCollection<MenuData>();
+            ObservableCollection<MenuData> treeData = new ObservableCollection<MenuData>();
+            DataTable dt = sqliteHelper.GetDataTable("SELECT m1.*,m2.name AS parentName FROM menu AS m1 LEFT JOIN menu AS m2 ON m1.parentCode = m2.code Order By m1.id;");
+            Dictionary<string, MenuData> cache = new Dictionary<string, MenuData>();
+            if (dt != null)
+            {
+                foreach (DataRow dr in dt.Rows)
+                {
+                    var menu = new MenuData
+                    {
+                        Id = dr["id"].ToString(),
+                        Code = dr["code"].ToString(),
+                        Name = dr["name"].ToString(),
+                        IconPath = dr["iconPath"].ToString(),
+                        Level = dr["level"].ToString(),
+                        Type = dr["type"].ToString(),
+                        ParentCode = dr["parentCode"].ToString(),
+                        ParentName = dr["parentName"].ToString(),
+                        DllPath = dr["dllPath"].ToString(),
+                        ClassName = dr["className"].ToString()
+                    };
+                    data.Add(menu);
+                    if (menu.Level == "1")
+                    {
+                        treeData.Add(menu);
+                    }
+                    cache.Add(menu.Code, menu);
+                }
+
+                foreach (var menu in data)
+                {
+                    if (!string.IsNullOrEmpty(menu.ParentCode) && menu.ParentCode != menu.Code)
+                    {
+                        cache[menu.ParentCode].Children.Add(menu);
+                    }
+                }
+            }
+
+            TreeDataSource = treeData;
+            DataSource = data;
+        }
+
+        public void DeleteMenuById(string id)
+        {
+            string sql = $"DELETE FROM menu WHERE id = {id}";
+            sqliteHelper.ExecuteSql(sql);
+        }
+    }
+}
diff --git a/HMI.MenuManage/Model/RoleManageModel.cs b/HMI.MenuManage/Model/RoleManageModel.cs
new file mode 100644
index 0000000..5ca0cbf
--- /dev/null
+++ b/HMI.MenuManage/Model/RoleManageModel.cs
@@ -0,0 +1,110 @@
+锘縰sing System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Data;
+using System.IO;
+using HMI.Core.Entity;
+using HMI.Core.Util;
+using HMI.MenuManage.Entity;
+using HMI.MenuManage.Util;
+
+namespace HMI.MenuManage.Model
+{
+    public class RoleManageModel : NotifyBase
+    {
+        public SqliteHelper sqliteHelper;
+
+        private ObservableCollection<RoleData> _DataSource;
+
+        public ObservableCollection<RoleData> DataSource
+        {
+            get { return _DataSource; }
+            set { Set(ref _DataSource, value); }
+        }
+
+        private RoleData _SelectedValue;
+        public RoleData SelectedValue
+        {
+            get => _SelectedValue;
+            set
+            {
+                Set(ref _SelectedValue, value);
+                LoadRelData(value);
+            }
+        }
+
+        private ObservableCollection<RoleMenuRel> _TreeDataSource;
+
+        public ObservableCollection<RoleMenuRel> TreeDataSource
+        {
+            get { return _TreeDataSource; }
+            set { Set(ref _TreeDataSource, value); }
+        }
+
+        public RoleManageModel()
+        {
+            if (!File.Exists(PathHelper.DatabasePath))
+            {
+                SqliteHelper.CreateDatabase(PathHelper.DatabasePath);
+            }
+            sqliteHelper = new SqliteHelper(PathHelper.DatabasePath);
+            sqliteHelper.ExecuteSql(@"CREATE TABLE IF NOT EXISTS role (
+                    id INTEGER PRIMARY KEY AUTOINCREMENT,
+                    code TEXT NOT NULL,
+                    name TEXT,
+                    UNIQUE(code)
+                    );
+CREATE TABLE IF NOT EXISTS role_menu_rel (
+                    id INTEGER PRIMARY KEY AUTOINCREMENT,
+                    roleCode TEXT NOT NULL,
+                    menuCode TEXT NOT NULL,
+                    UNIQUE(roleCode,menuCode)
+                    );
+");
+        }
+
+        public void LoadData()
+        {
+            ObservableCollection<RoleData> data = new ObservableCollection<RoleData>();
+            DataTable dt = sqliteHelper.GetDataTable("SELECT * FROM role Order By id;");
+            if (dt != null)
+            {
+                foreach (DataRow dr in dt.Rows)
+                {
+                    var menu = new RoleData
+                    {
+                        Id = dr["id"].ToString(),
+                        Code = dr["code"].ToString(),
+                        Name = dr["name"].ToString()
+                    };
+                    data.Add(menu);
+                }
+            }
+            DataSource = data;
+        }
+
+        public void LoadRelData(RoleData data)
+        {
+            if (data == null)
+            {
+                TreeDataSource.Clear();
+                return;
+            }
+            TreeDataSource = RoleMenuHelper.SelectRoleMenuTreeData(sqliteHelper, data.Code);
+        }
+
+        public void DelSingleData(RoleData data)
+        {
+            sqliteHelper.ExecuteBatchSql(new List<string>{
+            $"DELETE FROM role WHERE id = '{data.Id}'",
+            $"DELETE FROM role_menu_rel WHERE roleCode = '{data.Code}'",
+            $"DELETE FROM user_role_rel WHERE roleCode = '{data.Code}'"
+            });
+        }
+
+        public void SaveRelData(RoleData role)
+        {
+            if (role == null) return;
+            RoleMenuHelper.SaveRelData(sqliteHelper, TreeDataSource, role.Code, null, null);
+        }
+    }
+}
diff --git a/HMI.MenuManage/Model/UserManageModel.cs b/HMI.MenuManage/Model/UserManageModel.cs
new file mode 100644
index 0000000..a2ede62
--- /dev/null
+++ b/HMI.MenuManage/Model/UserManageModel.cs
@@ -0,0 +1,98 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Data;
+using System.IO;
+using HMI.Core.Util;
+using HMI.MenuManage.Entity;
+using HMI.MenuManage.Util;
+using HMI.Core.Entity;
+
+namespace HMI.MenuManage.Model
+{
+    public class UserManageModel : NotifyBase
+    {
+        public SqliteHelper sqliteHelper;
+
+        private ObservableCollection<UserData> _DataSource;
+
+        public ObservableCollection<UserData> DataSource
+        {
+            get { return _DataSource; }
+            set { Set(ref _DataSource, value); }
+        }
+        private UserData _SelectedUser;
+
+        public UserData SelectedUser
+        {
+            get { return _SelectedUser; }
+            set
+            {
+                Set(ref _SelectedUser, value);
+                LoadUserRole();
+            }
+        }
+
+        private ObservableCollection<UserRoleRel> _Roles;
+        public ObservableCollection<UserRoleRel> Roles
+        {
+            get => _Roles;
+            set { Set(ref _Roles, value); }
+        }
+
+        public UserManageModel()
+        {
+            if (!File.Exists(PathHelper.DatabasePath))
+            {
+                SqliteHelper.CreateDatabase(PathHelper.DatabasePath);
+            }
+            sqliteHelper = new SqliteHelper(PathHelper.DatabasePath);
+            sqliteHelper.ExecuteSql(@"CREATE TABLE IF NOT EXISTS user (
+                    id INTEGER PRIMARY KEY AUTOINCREMENT,
+                    username TEXT NOT NULL,
+                    password TEXT NOT NULL,
+                    name TEXT,
+                    UNIQUE(username)
+                    );
+CREATE TABLE IF NOT EXISTS user_role_rel (
+                    id INTEGER PRIMARY KEY AUTOINCREMENT,
+                    username TEXT NOT NULL,
+                    roleCode TEXT NOT NULL,
+                    UNIQUE(username,roleCode)
+                    );
+");
+        }
+
+        public void LoadData()
+        {
+            ObservableCollection<UserData> data = new ObservableCollection<UserData>();
+            DataTable dt = sqliteHelper.GetDataTable("SELECT * FROM user Order By id;");
+            if (dt != null)
+            {
+                foreach (DataRow dr in dt.Rows)
+                {
+                    var menu = new UserData
+                    {
+                        Id = dr["id"].ToString(),
+                        Username = dr["username"].ToString(),
+                        Password = dr["password"].ToString(),
+                        Name = dr["name"].ToString()
+                    };
+                    data.Add(menu);
+                }
+            }
+            DataSource = data;
+        }
+
+        public void LoadUserRole()
+        {
+            Roles = SelectedUser == null ? new ObservableCollection<UserRoleRel>()
+                : UserRoleRelHelper.SelectUserRoleData(sqliteHelper, SelectedUser.Username);
+        }
+
+        public void SaveUserRole()
+        {
+            UserRoleRelHelper.SaveUserRoleRel(sqliteHelper, Roles, SelectedUser, null, null);
+        }
+    }
+}
diff --git a/HMI.MenuManage/Properties/AssemblyInfo.cs b/HMI.MenuManage/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..8f148a8
--- /dev/null
+++ b/HMI.MenuManage/Properties/AssemblyInfo.cs
@@ -0,0 +1,54 @@
+锘縰sing System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+using HMI.Core.Annotation;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
+[assembly: AssemblyTitle("HMI.MenuManage")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Organization")]
+[assembly: AssemblyProduct("HMI.MenuManage")]
+[assembly: AssemblyCopyright("Copyright 漏 Organization 2025")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏� ComVisible 璁剧疆涓� false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵� COM 缁勪欢涓嶅彲瑙併�傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�ц缃负 true銆�
+[assembly: ComVisible(false)]
+
+//鑻ヨ寮�濮嬬敓鎴愬彲鏈湴鍖栫殑搴旂敤绋嬪簭锛岃璁剧疆
+//.csproj 鏂囦欢涓殑 <UICulture>CultureYouAreCodingWith</UICulture>
+//鍦� <PropertyGroup> 涓�備緥濡傦紝濡傛灉浣犱娇鐢ㄧ殑鏄編鍥借嫳璇��
+//浣跨敤鐨勬槸缇庡浗鑻辫锛岃灏� <UICulture> 璁剧疆涓� en-US銆�  鐒跺悗鍙栨秷
+//瀵逛互涓� NeutralResourceLanguage 鐗规�х殑娉ㄩ噴銆�  鏇存柊
+//浠ヤ笅琛屼腑鐨勨�渆n-US鈥濅互鍖归厤椤圭洰鏂囦欢涓殑 UICulture 璁剧疆銆�
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly:ThemeInfo(
+    ResourceDictionaryLocation.None, //涓婚鐗瑰畾璧勬簮璇嶅吀鎵�澶勪綅缃�
+                             //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                             //鎴栧簲鐢ㄧ▼搴忚祫婧愬瓧鍏镐腑鎵惧埌鏃朵娇鐢�)
+    ResourceDictionaryLocation.SourceAssembly //甯歌璧勬簮璇嶅吀鎵�澶勪綅缃�
+                                      //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                                      //銆佸簲鐢ㄧ▼搴忔垨浠讳綍涓婚涓撶敤璧勬簮瀛楀吀涓壘鍒版椂浣跨敤)
+)]
+
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�肩粍鎴�: 
+//
+//      涓荤増鏈�
+//      娆$増鏈�
+//      鐢熸垚鍙�
+//      淇鍙�
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: PluginClassName("HMI.MenuManage.MenuManage")]
diff --git a/HMI.MenuManage/Properties/Resources.Designer.cs b/HMI.MenuManage/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..4958cfc
--- /dev/null
+++ b/HMI.MenuManage/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
+//     杩愯鏃剁増鏈�:4.0.30319.42000
+//
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋�
+//     閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便��
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HMI.MenuManage.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   涓�涓己绫诲瀷鐨勮祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲鐨勫瓧绗︿覆绛夈��
+    /// </summary>
+    // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+    // 绫婚�氳繃绫讳技浜� ResGen 鎴� Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆�
+    // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈� .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛� ResGen
+    // (浠� /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆�
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   杩斿洖姝ょ被浣跨敤鐨勭紦瀛樼殑 ResourceManager 瀹炰緥銆�
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HMI.MenuManage.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   閲嶅啓褰撳墠绾跨▼鐨� CurrentUICulture 灞炴�э紝瀵�
+        ///   浣跨敤姝ゅ己绫诲瀷璧勬簮绫荤殑鎵�鏈夎祫婧愭煡鎵炬墽琛岄噸鍐欍��
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}
diff --git a/HMI.MenuManage/Properties/Resources.resx b/HMI.MenuManage/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/HMI.MenuManage/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/HMI.MenuManage/Properties/Settings.Designer.cs b/HMI.MenuManage/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..c6f862b
--- /dev/null
+++ b/HMI.MenuManage/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
+//     杩愯鏃剁増鏈�:4.0.30319.42000
+//
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋�
+//     閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便��
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HMI.MenuManage.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.12.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+    }
+}
diff --git a/HMI.MenuManage/Properties/Settings.settings b/HMI.MenuManage/Properties/Settings.settings
new file mode 100644
index 0000000..033d7a5
--- /dev/null
+++ b/HMI.MenuManage/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘�<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>
\ No newline at end of file
diff --git a/HMI.MenuManage/RoleManage.xaml b/HMI.MenuManage/RoleManage.xaml
new file mode 100644
index 0000000..99eb89c
--- /dev/null
+++ b/HMI.MenuManage/RoleManage.xaml
@@ -0,0 +1,127 @@
+锘�<hb:PluginControl x:Class="HMI.MenuManage.RoleManage"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:hb="clr-namespace:HMI.Base;assembly=HMI.Base"
+             xmlns:local="clr-namespace:HMI.MenuManage"
+             xmlns:dp="clr-namespace:HMI.UI;assembly=HMI.UI"
+             xmlns:uic="clr-namespace:HMI.UI.Converter;assembly=HMI.UI"
+             xmlns:pw="https://opensource.panuon.com/wpf"
+             xmlns:pu="https://opensource.panuon.com/wpf-ui"
+             mc:Ignorable="d" 
+             Padding="10"
+             Background="#f0f2f5"
+             d:DesignHeight="450" d:DesignWidth="800">
+    <UserControl.Resources>
+        <ResourceDictionary>
+            <ResourceDictionary.MergedDictionaries>
+                <pu:StyleDictionary Includes="TreeView" />
+                <ResourceDictionary Source="/HMI.UI;component/Style/PanuonResource.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Resources/Font/Font.xaml"/>
+            </ResourceDictionary.MergedDictionaries>
+
+            <uic:PathImageConverter x:Key="path2Image"/>
+            <uic:DataGridRowNumberConverter x:Key="rowNumber"/>
+        </ResourceDictionary>
+    </UserControl.Resources>
+
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="6*"/>
+            <ColumnDefinition Width="4*"/>
+        </Grid.ColumnDefinitions>
+
+        <Border Style="{StaticResource CardBoarder}" Margin="0,0,2,0">
+            <StackPanel>
+                <DockPanel Margin="0,0,0,10">
+                    <Button DockPanel.Dock="Right" pu:ButtonHelper.Icon="&#xe61a;" Style="{StaticResource DangerButton}">鍒犻櫎</Button>
+                    <Button DockPanel.Dock="Right" Style="{StaticResource PrimaryButton}"
+pu:ButtonHelper.Icon="&#xe631;" Margin="0,0,10,0" x:Name="refreshBtn" Click="Button_Click">鍒锋柊</Button>
+                    <Button DockPanel.Dock="Right" Style="{StaticResource PrimaryButton}"
+            pu:ButtonHelper.Icon="&#xe61a;" Margin="0,0,10,0" x:Name="addBtn" Click="Button_Click">鏂板</Button>
+                    <TextBlock DockPanel.Dock="Left" FontSize="{StaticResource TitleFontSize}" 
+                           VerticalAlignment="Center" HorizontalAlignment="Left" Text="瑙掕壊鍒楄〃"/>
+                </DockPanel>
+
+                <DataGrid x:Name="table" Style="{StaticResource DefaultDataGrid}"
+                      SelectedValue="{Binding SelectedValue}"
+    ItemsSource="{Binding DataSource}">
+                    <DataGrid.Columns>
+                        <DataGridTemplateColumn Header="" Width="Auto" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <CheckBox VerticalAlignment="Center" 
+                                              HorizontalAlignment="Center" IsChecked="{Binding Selected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+
+                        <DataGridTextColumn Header="#"
+                            Binding="{Binding Converter={StaticResource rowNumber},
+                                    RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}"
+                                            CanUserResize="False"/>
+                        <DataGridTextColumn Width="*" Binding="{Binding Code}" Header="瑙掕壊缂栧彿" />
+                        <DataGridTextColumn Width="*" Binding="{Binding Name}" Header="瑙掕壊鍚嶇О" />
+                        <DataGridTemplateColumn Header="鎿嶄綔" Width="100" IsReadOnly="True" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <StackPanel Orientation="Horizontal">
+                                        <Button x:Name="editBtn" Style="{StaticResource LinkButton}" 
+                                            Margin="0,0,10,0"
+                                            Click="Button_Click"
+                                            DataContext="{Binding }">缂栬緫</Button>
+                                        <Button x:Name="delBtn" Style="{StaticResource DangerLinkButton}" 
+                                            DataContext="{Binding }"
+                                            Click="Button_Click">鍒犻櫎</Button>
+                                    </StackPanel>
+
+                                    <DataTemplate.Triggers>
+                                        <DataTrigger Binding="{Binding Path=IsMouseOver,
+                                        RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}" 
+                                                 Value="True">
+                                            <Setter TargetName="editBtn" Property="Foreground" Value="#FFF"/>
+                                        </DataTrigger>
+                                        <DataTrigger Binding="{Binding Path=IsSelected,
+                                        RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}" 
+                                                 Value="True">
+                                            <Setter TargetName="editBtn" Property="Foreground" Value="#FFF"/>
+                                        </DataTrigger>
+                                    </DataTemplate.Triggers>
+
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+                    </DataGrid.Columns>
+                </DataGrid>
+            </StackPanel>
+        </Border>
+
+        <Border Grid.Column="1" Style="{StaticResource CardBoarder}" Margin="2,0,0,0">
+            <StackPanel>
+                <DockPanel Margin="0,0,0,10" >
+                    <Button DockPanel.Dock="Right" Style="{StaticResource PrimaryButton}" x:Name="saveMenuBtn" Click="Button_Click" 
+                            pu:ButtonHelper.Icon="&#xe60d;" Content="淇濆瓨"/>
+                    <TextBlock DockPanel.Dock="Left" FontSize="{StaticResource TitleFontSize}" 
+                           VerticalAlignment="Center" HorizontalAlignment="Left" Text="鑿滃崟鎺堟潈"/>
+                </DockPanel>
+                <TreeView x:Name="treeViewer" Grid.Column="1" 
+                          Style="{StaticResource DefaultTreeView}" ItemsSource="{Binding TreeDataSource}">
+                    <TreeView.ItemTemplate>
+                        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
+                            <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
+                                <CheckBox VerticalAlignment="Center" IsChecked="{Binding Selected}"
+Command="{Binding CheckCommand}"
+CommandParameter="{Binding Path=IsChecked,RelativeSource={RelativeSource Mode=Self}}"
+/>
+                                <Image Width="{StaticResource ContentFontSize}" 
+                                       Height="{StaticResource ContentFontSize}" Margin="5" Source="{Binding MenuIcon,Converter={StaticResource path2Image},Mode=OneWay}"/>
+                                <TextBlock VerticalAlignment="Center" Text="{Binding MenuName}"/>
+                            </StackPanel>
+                        </HierarchicalDataTemplate>
+                    </TreeView.ItemTemplate>
+                </TreeView>
+            </StackPanel>
+        </Border>
+    </Grid>
+</hb:PluginControl>
diff --git a/HMI.MenuManage/RoleManage.xaml.cs b/HMI.MenuManage/RoleManage.xaml.cs
new file mode 100644
index 0000000..15df9a5
--- /dev/null
+++ b/HMI.MenuManage/RoleManage.xaml.cs
@@ -0,0 +1,159 @@
+锘縰sing System;
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
+using System.Windows;
+using System.Windows.Controls;
+using log4net;
+using log4net.Repository.Hierarchy;
+using Panuon.WPF.UI;
+using HMI.Core.Api;
+using HMI.MenuManage.Entity;
+using HMI.MenuManage.Model;
+using HMI.Base;
+
+namespace HMI.MenuManage
+{
+    /// <summary>
+    /// UserControl1.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class RoleManage : PluginControl
+    {
+        #region ...
+        public virtual event PropertyChangedEventHandler PropertyChanged;
+
+        protected virtual void RaisePropertyChanged(string name)
+        {
+
+            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
+        }
+
+        protected void RaiseAndSetIfChanged<T>(ref T old, T @new, [CallerMemberName] string propertyName = null)
+        {
+            old = @new;
+            if (propertyName != null)
+            {
+                RaisePropertyChanged(propertyName);
+            }
+        }
+        #endregion
+
+        #region 灞炴��
+        private RoleManageModel Model;
+        private ILog log;
+
+        #endregion
+
+        public RoleManage()
+        {
+            Model = new RoleManageModel();
+            this.DataContext = Model;
+            this.Loaded += RoleManage_Loaded;
+            InitializeComponent();
+        }
+
+        private void RoleManage_Loaded(object sender, RoutedEventArgs e)
+        {
+            Model.LoadData();
+            this.Loaded -= RoleManage_Loaded;
+        }
+
+        #region 灞炴��
+
+        #endregion
+
+        public object Active()
+        {
+            return null;
+        }
+
+        public object DeActive()
+        {
+            return null;
+        }
+
+        public object Init()
+        {
+            return null;
+        }
+
+        public void OnTabChange(object sender, object args)
+        {
+        }
+
+        private void Button_Click(object sender, RoutedEventArgs e)
+        {
+            try
+            {
+                Button btn = (Button)sender;
+                if (btn.Name == "addBtn")
+                {
+                    RoleModal modal = new RoleModal
+                    {
+                        Title = "鏂板瑙掕壊",
+                        Owner = Window.GetWindow(this),
+                        sqliteHelper = Model.sqliteHelper
+                    };
+                    if (modal.Open(new RoleData()) == true)
+                    {
+                        Model.LoadData();
+                    }
+                }
+                else if (btn.Name == "refreshBtn")
+                {
+                    Model.LoadData();
+                }
+                else if (btn.Name == "menuBtn")
+                {
+                    Model.LoadRelData((RoleData)btn.DataContext);
+                }
+                else if (btn.Name == "editBtn")
+                {
+                    RoleModal modal = new RoleModal
+                    {
+                        Title = "缂栬緫瑙掕壊",
+                        Owner = Window.GetWindow(this),
+                        sqliteHelper = Model.sqliteHelper
+                    };
+                    if (modal.Open((RoleData)btn.DataContext) == true)
+                    {
+                        Model.LoadData();
+                    }
+                }
+                else if (btn.Name == "delBtn")
+                {
+                    try
+                    {
+                        Model.DelSingleData((RoleData)btn.DataContext);
+                    }
+                    catch (Exception ex)
+                    {
+                        log.Error("Delete Role Failed.", ex);
+                        Panuon.WPF.UI.Toast.Show((WindowX)Window.GetWindow(this), "鍒犻櫎澶辫触", ToastPosition.Top);
+                    }
+                }
+                else if (btn.Name == "saveMenuBtn")
+                {
+                    try
+                    {
+                        Model.SaveRelData(Model.SelectedValue);
+                        Panuon.WPF.UI.Toast.Show((WindowX)Window.GetWindow(this), "淇濆瓨鎴愬姛", ToastPosition.Top);
+                    }
+                    catch (Exception ex)
+                    {
+                        log.Error("Save Role-Menu Failed.", ex);
+                        Panuon.WPF.UI.Toast.Show((WindowX)Window.GetWindow(this), "淇濆瓨澶辫触", ToastPosition.Top);
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                log.Error("123", ex);
+            }
+        }
+
+        public void SetLogger(ILog logger)
+        {
+            this.log = logger;
+        }
+    }
+}
diff --git a/HMI.MenuManage/UserManage.xaml b/HMI.MenuManage/UserManage.xaml
new file mode 100644
index 0000000..7c8650a
--- /dev/null
+++ b/HMI.MenuManage/UserManage.xaml
@@ -0,0 +1,132 @@
+锘�<hb:PluginControl x:Class="HMI.MenuManage.UserManage"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:hb="clr-namespace:HMI.Base;assembly=HMI.Base"
+             xmlns:local="clr-namespace:HMI.MenuManage"
+             xmlns:uic="clr-namespace:HMI.UI.Converter;assembly=HMI.UI"
+xmlns:pw="https://opensource.panuon.com/wpf"
+xmlns:pu="https://opensource.panuon.com/wpf-ui"
+             mc:Ignorable="d" 
+             Background="{StaticResource WorkspaceBackground}"
+             Padding="10"
+             d:DesignHeight="450" d:DesignWidth="800">
+    <UserControl.Resources>
+        <ResourceDictionary>
+            <ResourceDictionary.MergedDictionaries>
+                <pu:StyleDictionary Includes="TreeView" />
+                <ResourceDictionary Source="/HMI.UI;component/Style/PanuonResource.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Resources/Font/Font.xaml"/>
+            </ResourceDictionary.MergedDictionaries>
+
+            <uic:PathImageConverter x:Key="path2Image"/>
+            <uic:DataGridRowNumberConverter x:Key="rowNumber"/>
+        </ResourceDictionary>
+    </UserControl.Resources>
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="6*"/>
+            <ColumnDefinition Width="4*"/>
+        </Grid.ColumnDefinitions>
+        <Border Style="{StaticResource CardBoarder}" Margin="0,0,2,0">
+            <StackPanel>
+                <DockPanel Margin="0,0,0,10">
+                    <Button DockPanel.Dock="Right" pu:ButtonHelper.Icon="&#xe60f;" Style="{StaticResource DangerButton}">鍒犻櫎</Button>
+                    <Button DockPanel.Dock="Right" Style="{StaticResource PrimaryButton}" 
+                            pu:ButtonHelper.Icon="&#xe631;" Margin="0,0,10,0" x:Name="refreshBtn" Click="Button_Click">鍒锋柊</Button>
+                    <Button DockPanel.Dock="Right" Style="{StaticResource PrimaryButton}"
+                            pu:ButtonHelper.Icon="&#xe61a;" Margin="0,0,10,0" x:Name="addBtn" Click="Button_Click">鏂板</Button>
+                    <TextBlock DockPanel.Dock="Left" FontSize="{StaticResource TitleFontSize}" 
+                           VerticalAlignment="Center" HorizontalAlignment="Left" Text="鐢ㄦ埛鍒楄〃"/>
+                </DockPanel>
+
+                <DataGrid Grid.Column="1" x:Name="table" Style="{StaticResource DefaultDataGrid}" 
+                          SelectedItem="{Binding SelectedUser}" ItemsSource="{Binding DataSource}">
+                    <DataGrid.Columns>
+                        <DataGridTemplateColumn Width="Auto" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <CheckBox VerticalAlignment="Center"
+                          IsChecked="{Binding Selected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+                        <DataGridTemplateColumn Header="#" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <TextBlock Text="{Binding Converter={StaticResource rowNumber},
+    RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}"/>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+                        <DataGridTextColumn Width="*"  Binding="{Binding Username}" Header="璐﹀彿" />
+                        <DataGridTextColumn Width="*" Binding="{Binding Name}" Header="鐢ㄦ埛鍚嶇О" />
+                        <!--<DataGridTextColumn Width="*" Binding="{Binding RoleCode}" Header="瑙掕壊缂栧彿" />
+    <DataGridTextColumn Width="*" Binding="{Binding RoleName}" Header="瑙掕壊鍚嶇О" />-->
+                        <DataGridTemplateColumn Header="鎿嶄綔" Width="100" IsReadOnly="True" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <StackPanel Orientation="Horizontal">
+                                        <Button x:Name="editBtn" Style="{StaticResource LinkButton}" Margin="0,0,10,0"
+                        DataContext="{Binding }"
+                        Click="Button_Click">缂栬緫</Button>
+                                        <Button x:Name="delBtn" Style="{StaticResource DangerLinkButton}"
+                        DataContext="{Binding }"
+                        Click="Button_Click">鍒犻櫎</Button>
+                                    </StackPanel>
+
+                                    <DataTemplate.Triggers>
+                                        <DataTrigger Binding="{Binding Path=IsMouseOver,
+        RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}" 
+                 Value="True">
+                                            <Setter TargetName="editBtn" Property="Foreground" Value="#FFF"/>
+                                        </DataTrigger>
+                                        <DataTrigger Binding="{Binding Path=IsSelected,
+        RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}" 
+                 Value="True">
+                                            <Setter TargetName="editBtn" Property="Foreground" Value="#FFF"/>
+                                        </DataTrigger>
+                                    </DataTemplate.Triggers>
+
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+                    </DataGrid.Columns>
+                </DataGrid>
+            </StackPanel>
+        </Border>
+
+        <Border Grid.Column="1" Style="{StaticResource CardBoarder}" Margin="2,0,0,0">
+            <StackPanel>
+                <DockPanel Margin="0,0,0,10" >
+                    <Button DockPanel.Dock="Right" Style="{StaticResource PrimaryButton}"
+                            x:Name="saveRoleBtn" Click="Button_Click" pu:ButtonHelper.Icon="&#xe60d;" Content="淇濆瓨"/>
+                    <TextBlock DockPanel.Dock="Left" FontSize="{StaticResource TitleFontSize}" 
+                           VerticalAlignment="Center" HorizontalAlignment="Left" Text="鐢ㄦ埛瑙掕壊"/>
+                </DockPanel>
+
+                <DataGrid x:Name="roleTable" Style="{StaticResource DefaultDataGrid}" SelectionMode="Single" 
+                          ItemsSource="{Binding Roles}">
+                    <DataGrid.Columns>
+                        <DataGridTemplateColumn Header="鎺堜簣" Width="Auto" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <CheckBox VerticalAlignment="Center" 
+                    HorizontalAlignment="Center" IsChecked="{Binding Selected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+
+                        <DataGridTextColumn Header="#" Binding="{Binding Converter={StaticResource rowNumber},
+          RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}"
+                  CanUserResize="False"/>
+                        <DataGridTextColumn Width="*" Binding="{Binding RoleCode}" Header="瑙掕壊缂栧彿" />
+                        <DataGridTextColumn Width="*" Binding="{Binding RoleName}" Header="瑙掕壊鍚嶇О" />
+                    </DataGrid.Columns>
+                </DataGrid>
+
+            </StackPanel>
+        </Border>
+    </Grid>
+</hb:PluginControl>
diff --git a/HMI.MenuManage/UserManage.xaml.cs b/HMI.MenuManage/UserManage.xaml.cs
new file mode 100644
index 0000000..05d575f
--- /dev/null
+++ b/HMI.MenuManage/UserManage.xaml.cs
@@ -0,0 +1,93 @@
+锘縰sing System;
+using System.Windows;
+using System.Windows.Controls;
+using HMI.Base;
+using HMI.Core.Api;
+using HMI.MenuManage.Entity;
+using HMI.MenuManage.Model;
+using HMI.UI.Util;
+using log4net;
+
+namespace HMI.MenuManage
+{
+    /// <summary>
+    /// UserManage.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class UserManage : PluginControl
+    {
+        UserManageModel Model;
+        private ILog log;
+        public UserManage()
+        {
+            Model = new UserManageModel();
+            DataContext = Model;
+            Loaded += UserManage_Loaded;
+            InitializeComponent();
+        }
+
+        private void UserManage_Loaded(object sender, RoutedEventArgs e)
+        {
+            Model.LoadData();
+            this.Loaded -= UserManage_Loaded;
+        }
+
+        private void Button_Click(object sender, RoutedEventArgs e)
+        {
+            Button btn = (Button)sender;
+            if (btn.Name == "addBtn")
+            {
+                UserModal userModal = new UserModal
+                {
+                    Title = "鏂板鐢ㄦ埛",
+                    Owner = Window.GetWindow(this),
+                    sqliteHelper = Model.sqliteHelper
+                };
+                if (userModal.Open(new UserData()) == true)
+                {
+                    Model.LoadData();
+                }
+            }
+            else if (btn.Name == "refreshBtn")
+            {
+                Model.LoadData();
+            }
+            else if (btn.Name == "editBtn")
+            {
+                UserModal userModal = new UserModal
+                {
+                    Title = "缂栬緫鐢ㄦ埛",
+                    Owner = Window.GetWindow(this),
+                    sqliteHelper = Model.sqliteHelper
+                };
+                if (userModal.Open((UserData)btn.DataContext) == true)
+                {
+                    Model.LoadData();
+                }
+            }
+            else if (btn.Name == "delBtn") { }
+            else if (btn.Name == "saveRoleBtn")
+            {
+                try
+                {
+                    Model.SaveUserRole();
+                    Model.LoadUserRole();
+                    ToastHelper.Success(Window.GetWindow(this), "淇濆瓨鎴愬姛");
+                }
+                catch (Exception ex)
+                {
+                    log.Error("Update User-Role Rel Failed.", ex);
+                }
+            }
+        }
+
+        public void SetLogger(ILog logger)
+        {
+            log = logger;
+        }
+
+        public void SetBaseFolder(string folder)
+        {
+            throw new NotImplementedException();
+        }
+    }
+}
diff --git a/HMI.MenuManage/Util/RoleHelper.cs b/HMI.MenuManage/Util/RoleHelper.cs
new file mode 100644
index 0000000..66145cc
--- /dev/null
+++ b/HMI.MenuManage/Util/RoleHelper.cs
@@ -0,0 +1,71 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Markup;
+using DatabaseHelper;
+using HMI.Core.Util;
+using HMI.MenuManage.Entity;
+
+namespace HMI.MenuManage.Util
+{
+    public class RoleHelper
+    {
+        /// <summary>
+        /// 鏍规嵁roleCode鑾峰彇rel鏁版嵁
+        /// </summary>
+        /// <param name="sqliteHelper"></param>
+        /// <param name="roleCode"></param>
+        /// <returns></returns>
+        public static ObservableCollection<RoleData> SelectUserRoleData(SqliteHelper sqliteHelper,
+            string roleCode)
+        {
+            ObservableCollection<RoleData> datas = new ObservableCollection<RoleData>();
+            DataTable dt = sqliteHelper.GetDataTable($@"SELECT * FROM role AS r ;");
+            if (dt != null)
+            {
+                foreach (DataRow dr in dt.Rows)
+                {
+                    var role = new RoleData
+                    {
+                        Id = dr["id"].ToString(),
+                        Code = dr["code"].ToString(),
+                        Name = dr["name"].ToString()
+                    };
+                    datas.Add(role);
+                }
+            }
+            return datas;
+        }
+
+        public static void SaveRelData(SqliteHelper sqliteHelper, ObservableCollection<RoleMenuRel> rels, string roleCode)
+        {
+            List<RoleMenuRel> datas = new List<RoleMenuRel>();
+            GetSelectedMenu(rels, datas);
+            List<string> sqls = new List<string>() {
+                $"DELETE FROM role_menu_rel WHERE roleCode='{roleCode}'"
+            };
+            foreach (var data in datas)
+            {
+                sqls.Add($"INSERT INTO role_menu_rel (roleCode,menuCode) VALUES ('{roleCode}','{data.MenuCode}');");
+            }
+            sqliteHelper.ExecuteBatchSql(sqls);
+        }
+
+        public static void GetSelectedMenu(IEnumerable<RoleMenuRel> rels, List<RoleMenuRel> datas)
+        {
+            foreach (var dr in rels)
+            {
+                if (dr.Selected)
+                {
+                    datas.Add(dr);
+                }
+                GetSelectedMenu(dr.Children, datas);
+            }
+        }
+
+    }
+}
diff --git a/HMI.MenuManage/Util/RoleMenuHelper.cs b/HMI.MenuManage/Util/RoleMenuHelper.cs
new file mode 100644
index 0000000..999a03d
--- /dev/null
+++ b/HMI.MenuManage/Util/RoleMenuHelper.cs
@@ -0,0 +1,91 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Markup;
+using DatabaseHelper;
+using HMI.Core.Util;
+using HMI.MenuManage.Entity;
+
+namespace HMI.MenuManage.Util
+{
+    public class RoleMenuHelper
+    {
+        /// <summary>
+        /// 鏍规嵁roleCode鑾峰彇rel鏁版嵁
+        /// </summary>
+        /// <param name="sqliteHelper"></param>
+        /// <param name="roleCode"></param>
+        /// <returns></returns>
+        public static ObservableCollection<RoleMenuRel> SelectRoleMenuTreeData(SqliteHelper sqliteHelper,
+            string roleCode)
+        {
+            ObservableCollection<RoleMenuRel> treeData = new ObservableCollection<RoleMenuRel>();
+            Dictionary<string, RoleMenuRel> cache = new Dictionary<string, RoleMenuRel>();
+            DataTable dt = sqliteHelper.GetDataTable($@"SELECT m.*,t.roleCode,t.menuCode FROM menu AS m 
+LEFT JOIN (
+SELECT rel.roleCode,rel.menuCode FROM role AS r 
+INNER JOIN role_menu_rel AS rel 
+ON r.code = rel.roleCode AND rel.roleCode='{roleCode}'
+) AS t
+ON m.code=t.menuCode
+Order By m.level,m.id;");
+            if (dt != null)
+            {
+                foreach (DataRow dr in dt.Rows)
+                {
+                    var menu = new RoleMenuRel
+                    {
+                        MenuCode = dr["code"].ToString(),
+                        RoleCode = roleCode,
+                        ParentCode = dr["parentCode"].ToString(),
+                        MenuName = dr["name"].ToString(),
+                        MenuIcon = dr["iconPath"].ToString(),
+                        Selected = !(dr["menuCode"] is System.DBNull),
+                    };
+                    cache[menu.MenuCode] = menu;
+                    if (cache.ContainsKey(menu.ParentCode))
+                    {
+                        cache[menu.ParentCode].AddChild(menu);
+                    }
+                    else
+                    {
+                        treeData.Add(menu);
+                    }
+                }
+            }
+            return treeData;
+        }
+
+        public static void SaveRelData(SqliteHelper sqliteHelper, IEnumerable<RoleMenuRel> rels, string roleCode, string firstSql, string lastSql)
+        {
+            List<RoleMenuRel> datas = new List<RoleMenuRel>();
+            GetSelectedMenu(rels, datas);
+            List<string> sqls = new List<string>() {
+                firstSql, $"DELETE FROM role_menu_rel WHERE roleCode='{roleCode}'"
+            };
+            foreach (var data in datas)
+            {
+                sqls.Add($"INSERT INTO role_menu_rel (roleCode,menuCode) VALUES ('{roleCode}','{data.MenuCode}');");
+            }
+            sqls.Add(lastSql);
+            sqliteHelper.ExecuteBatchSql(sqls);
+        }
+
+        public static void GetSelectedMenu(IEnumerable<RoleMenuRel> rels, List<RoleMenuRel> datas)
+        {
+            foreach (var dr in rels)
+            {
+                if (dr.Selected)
+                {
+                    datas.Add(dr);
+                }
+                GetSelectedMenu(dr.Children, datas);
+            }
+        }
+
+    }
+}
diff --git a/HMI.MenuManage/Util/UserRoleRelHelper.cs b/HMI.MenuManage/Util/UserRoleRelHelper.cs
new file mode 100644
index 0000000..49af7ff
--- /dev/null
+++ b/HMI.MenuManage/Util/UserRoleRelHelper.cs
@@ -0,0 +1,65 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Web.Security;
+using System.Windows.Markup;
+using DatabaseHelper;
+using HMI.Core.Util;
+using HMI.MenuManage.Entity;
+
+namespace HMI.MenuManage.Util
+{
+    public class UserRoleRelHelper
+    {
+        /// <summary>
+        /// 鏍规嵁roleCode鑾峰彇rel鏁版嵁
+        /// </summary>
+        /// <param name="sqliteHelper"></param>
+        /// <param name="roleCode"></param>
+        /// <returns></returns>
+        public static ObservableCollection<UserRoleRel> SelectUserRoleData(SqliteHelper sqliteHelper, string username)
+        {
+            ObservableCollection<UserRoleRel> datas = new ObservableCollection<UserRoleRel>();
+            DataTable dt = sqliteHelper.GetDataTable($@"SELECT r.*,t.username FROM role AS r LEFT JOIN 
+(SELECT u.username,rel.roleCode FROM user AS u INNER JOIN user_role_rel AS rel ON u.username = rel.username
+AND u.username='{username}') AS t
+ON r.code = t.roleCode ORDER BY r.id;");
+            if (dt != null)
+            {
+                foreach (DataRow dr in dt.Rows)
+                {
+                    var role = new UserRoleRel
+                    {
+                        Id = dr["id"].ToString(),
+                        RoleCode = dr["code"].ToString(),
+                        RoleName = dr["name"].ToString(),
+                        Selected = !(dr["username"] is DBNull)
+                    };
+                    datas.Add(role);
+                }
+            }
+            return datas;
+        }
+
+        public static void SaveUserRoleRel(SqliteHelper sqliteHelper, IEnumerable<UserRoleRel> roles,
+            UserData data, string firstSql, string lastSql)
+        {
+            var rels = roles.Where(d => d.Selected).ToList();
+            var sqls = new List<string> {
+                firstSql,
+                $"DELETE FROM user_role_rel WHERE username = '{data.Username}';",
+            };
+            foreach (var rel in rels)
+            {
+                sqls.Add($"INSERT INTO user_role_rel (username,roleCode) " +
+                    $"VALUES ('{data.Username}','{rel.RoleCode}');");
+            }
+            sqls.Add(lastSql);
+            sqliteHelper.ExecuteBatchSql(sqls);
+        }
+    }
+}
diff --git a/HMI.MenuManage/packages.config b/HMI.MenuManage/packages.config
new file mode 100644
index 0000000..63cdc53
--- /dev/null
+++ b/HMI.MenuManage/packages.config
@@ -0,0 +1,6 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="log4net" version="3.0.3" targetFramework="net472" />
+  <package id="Panuon.WPF" version="1.1.2.2" targetFramework="net472" />
+  <package id="Panuon.WPF.UI" version="1.2.4.9" targetFramework="net472" />
+</packages>
\ No newline at end of file
diff --git a/HMI.ParameterManage/ControlModel.cs b/HMI.ParameterManage/ControlModel.cs
new file mode 100644
index 0000000..67d0035
--- /dev/null
+++ b/HMI.ParameterManage/ControlModel.cs
@@ -0,0 +1,98 @@
+锘縰sing System.Collections.ObjectModel;
+using System.Data;
+using HMI.Core.Entity;
+using HMI.Core.Util;
+using HMI.ParameterManage.Entity;
+
+namespace HMI.ParameterManage
+{
+    public class ControlModel : NotifyBase
+    {
+        public ControlModel(SqliteHelper sqliteHelper)
+        {
+            SqliteHelper = sqliteHelper;
+        }
+
+        public SqliteHelper SqliteHelper { get; private set; }
+
+        private ObservableCollection<ProductData> products;
+
+        public ObservableCollection<ProductData> Products
+        {
+            get { return products; }
+            set { Set(ref products, value); }
+        }
+
+        private ObservableCollection<ParameterData> parameters;
+
+        public ObservableCollection<ParameterData> Parameters
+        {
+            get { return parameters; }
+            set { Set(ref parameters, value); }
+        }
+
+        private ProductData selectedProduct;
+
+        public ProductData SelectedProduct
+        {
+            get { return selectedProduct; }
+            set
+            {
+                Set(ref selectedProduct, value);
+                LoadParameters();
+            }
+        }
+
+        public void LoadProducts()
+        {
+            DataTable dt = SqliteHelper.GetDataTable("SELECT * FROM product ORDER BY id;");
+            ObservableCollection<ProductData> products = new ObservableCollection<ProductData>();
+
+            if (dt != null)
+            {
+                foreach (DataRow dr in dt.Rows)
+                {
+                    var p = new ProductData
+                    {
+                        Id = dr["id"].ToString(),
+                        Name = dr["name"].ToString(),
+                        IsMaster = dr["isMaster"].ToString() == "1",
+                        ParentId = dr["parentId"].ToString(),
+                    };
+                    products.Add(p);
+                }
+            }
+            Products = products;
+        }
+
+        public void LoadParameters()
+        {
+
+            ObservableCollection<ParameterData> parameters = new ObservableCollection<ParameterData>();
+            if (SelectedProduct != null)
+            {
+
+                DataTable dt = SqliteHelper.GetDataTable($"SELECT * FROM parameter WHERE productName='{SelectedProduct.Name}' ORDER BY id;");
+                if (dt != null)
+                {
+                    foreach (DataRow dr in dt.Rows)
+                    {
+                        var p = new ParameterData
+                        {
+                            Id = dr["id"].ToString(),
+                            Name = dr["name"].ToString(),
+                            Value = dr["value"].ToString(),
+                            Unit = dr["unit"].ToString(),
+                            Description = dr["description"].ToString(),
+                            PGroup = dr["pGroup"].ToString(),
+                            ProductName = dr["productName"].ToString(),
+                        };
+                        parameters.Add(p);
+                    }
+                }
+
+            }
+            Parameters = parameters;
+        }
+    }
+}
diff --git a/HMI.ParameterManage/Entity/ParameterData.cs b/HMI.ParameterManage/Entity/ParameterData.cs
new file mode 100644
index 0000000..144ff47
--- /dev/null
+++ b/HMI.ParameterManage/Entity/ParameterData.cs
@@ -0,0 +1,19 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HMI.ParameterManage.Entity
+{
+    public class ParameterData
+    {
+        public string Id { get; set; }
+        public string Name { get; set; }
+        public string Value { get; set; }
+        public string Unit { get; set; }
+        public string Description { get; set; }
+        public string PGroup { get; set; }
+        public string ProductName { get; set; }
+    }
+}
diff --git a/HMI.ParameterManage/Entity/ProductData.cs b/HMI.ParameterManage/Entity/ProductData.cs
new file mode 100644
index 0000000..ada68f8
--- /dev/null
+++ b/HMI.ParameterManage/Entity/ProductData.cs
@@ -0,0 +1,11 @@
+锘�
+namespace HMI.ParameterManage.Entity
+{
+    public class ProductData
+    {
+        public string Id { get; set; }
+        public string Name { get; set; }
+        public bool IsMaster { get; set; }
+        public string ParentId { get; set; }
+    }
+}
diff --git a/HMI.ParameterManage/HMI.ParameterManage.csproj b/HMI.ParameterManage/HMI.ParameterManage.csproj
new file mode 100644
index 0000000..5a8f5c7
--- /dev/null
+++ b/HMI.ParameterManage/HMI.ParameterManage.csproj
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{736CD77D-B81E-4866-BB00-84B0B57110F0}</ProjectGuid>
+    <OutputType>library</OutputType>
+    <RootNamespace>HMI.ParameterManage</RootNamespace>
+    <AssemblyName>HMI.ParameterManage</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <WarningLevel>4</WarningLevel>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="log4net">
+      <HintPath>..\WPFProject\packages\log4net.3.0.3\lib\net462\log4net.dll</HintPath>
+    </Reference>
+    <Reference Include="Panuon.WPF">
+      <HintPath>..\WPFProject\packages\Panuon.WPF.1.1.2.2\lib\net472\Panuon.WPF.dll</HintPath>
+    </Reference>
+    <Reference Include="Panuon.WPF.UI">
+      <HintPath>..\WPFProject\packages\Panuon.WPF.UI.1.2.4.9\lib\net472\Panuon.WPF.UI.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xaml">
+      <RequiredTargetFramework>4.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="WindowsBase" />
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ParameterModal.xaml.cs">
+      <DependentUpon>ParameterModal.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="ProductModal.xaml.cs">
+      <DependentUpon>ProductModal.xaml</DependentUpon>
+    </Compile>
+    <Page Include="ParameterManage.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Compile Include="ControlModel.cs" />
+    <Compile Include="Entity\ParameterData.cs" />
+    <Compile Include="Entity\ProductData.cs" />
+    <Compile Include="ParameterManage.xaml.cs">
+      <DependentUpon>ParameterManage.xaml</DependentUpon>
+      <SubType>Code</SubType>
+    </Compile>
+    <Page Include="ParameterModal.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Page Include="ProductModal.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HMI.Base\HMI.Base.csproj">
+      <Project>{2a6f9720-a890-4036-9d73-41a0dae28341}</Project>
+      <Name>HMI.Base</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HMI.Core\HMI.Core.csproj">
+      <Project>{3e3bf44a-0b69-45c5-9512-528cb48a7106}</Project>
+      <Name>HMI.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HMI.UI\HMI.UI.csproj">
+      <Project>{f17de6b5-af1d-48c6-94a0-6b763a6546a6}</Project>
+      <Name>HMI.UI</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>copy /Y "$(TargetPath)" "$(SolutionDir)bin\$(PlatformName)\$(ConfigurationName)\Plugin\$(TargetFileName)" 
+copy /Y "$(TargetDir)$(TargetName).pdb" "$(SolutionDir)bin\$(PlatformName)\$(ConfigurationName)\Plugin\$(TargetName).pdb"</PostBuildEvent>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/HMI.ParameterManage/ParameterManage.xaml b/HMI.ParameterManage/ParameterManage.xaml
new file mode 100644
index 0000000..c87940f
--- /dev/null
+++ b/HMI.ParameterManage/ParameterManage.xaml
@@ -0,0 +1,126 @@
+锘�<hb:PluginControl x:Class="HMI.ParameterManage.ParameterManage"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="clr-namespace:HMI.ParameterManage"
+             xmlns:uic="clr-namespace:HMI.UI.Converter;assembly=HMI.UI"
+             xmlns:ui="clr-namespace:HMI.UI;assembly=HMI.UI"
+             xmlns:pw="https://opensource.panuon.com/wpf"
+             xmlns:pu="https://opensource.panuon.com/wpf-ui"
+             xmlns:dp="clr-namespace:HMI.UI;assembly=HMI.UI"
+             xmlns:hb="clr-namespace:HMI.Base;assembly=HMI.Base"
+             mc:Ignorable="d" 
+             Padding="10"
+             Loaded="UserControl_Loaded"
+             Background="{StaticResource WorkspaceBackground}"
+             d:DesignHeight="450" d:DesignWidth="800">
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="2*"/>
+            <ColumnDefinition Width="8*"/>
+        </Grid.ColumnDefinitions>
+        <Border Style="{StaticResource CardBoarder}" Margin="0,0,2,0">
+            <StackPanel>
+                <DockPanel Margin="0,0,0,10" Cursor="">
+                    <Button DockPanel.Dock="Right" x:Name="delBatchBtn" pu:ButtonHelper.Icon="&#xe60f;" Style="{StaticResource DangerButton}">鍒犻櫎</Button>
+                    <Button DockPanel.Dock="Right" Style="{StaticResource PrimaryButton}" 
+                        pu:ButtonHelper.Icon="&#xe631;" Margin="0,0,10,0" x:Name="refreshBtn" Click="Button_Click">鍒锋柊</Button>
+                    <Button DockPanel.Dock="Right" Style="{StaticResource PrimaryButton}"
+                        pu:ButtonHelper.Icon="&#xe61a;" Margin="0,0,10,0" x:Name="addBtn" Click="Button_Click">鏂板</Button>
+                    <TextBlock DockPanel.Dock="Left" FontSize="{StaticResource TitleFontSize}" 
+                       VerticalAlignment="Center" HorizontalAlignment="Left" Text="浜у搧鍒楄〃"/>
+                </DockPanel>
+
+                <DataGrid Grid.Column="1" x:Name="table" Style="{StaticResource DefaultDataGrid}" 
+                      SelectedItem="{Binding SelectedProduct}" ItemsSource="{Binding Products}">
+                    <DataGrid.Columns>
+                        <DataGridTemplateColumn Width="Auto" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <CheckBox VerticalAlignment="Center"
+                      IsChecked="{Binding Selected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+                        <DataGridTemplateColumn Header="#" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <TextBlock Text="{Binding Converter={StaticResource rowNumber},
+RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}"/>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+                        <DataGridTextColumn Width="*" Binding="{Binding Name}" Header="浜у搧鍚嶇О" />
+                        <DataGridTemplateColumn Header="鎿嶄綔" Width="100" IsReadOnly="True" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <StackPanel Orientation="Horizontal" ui:StackPanelHelper.ChildSpace="10">
+                                        <Button x:Name="editProductBtn" Style="{StaticResource RowLink}"  DataContext="{Binding }"
+                    Click="Button_Click">缂栬緫</Button>
+                                        <Button x:Name="delProductBtn" Style="{StaticResource DangerLinkButton}"
+                    DataContext="{Binding }"
+                    Click="Button_Click">鍒犻櫎</Button>
+                                    </StackPanel>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+                    </DataGrid.Columns>
+                </DataGrid>
+            </StackPanel>
+        </Border>
+
+        <Border Grid.Column="1" Style="{StaticResource CardBoarder}" Margin="2,0,0,0">
+            <StackPanel>
+                <DockPanel Margin="0,0,0,10" >
+                    <Button DockPanel.Dock="Right" pu:ButtonHelper.Icon="&#xe60f;" Style="{StaticResource DangerButton}">鍒犻櫎</Button>
+                    <Button DockPanel.Dock="Right" Style="{StaticResource PrimaryButton}" 
+    pu:ButtonHelper.Icon="&#xe631;" Margin="0,0,10,0" x:Name="refreshParameterBtn" Click="Button_Click">鍒锋柊</Button>
+                    <Button DockPanel.Dock="Right" Style="{StaticResource PrimaryButton}"
+    pu:ButtonHelper.Icon="&#xe61a;" Margin="0,0,10,0" x:Name="addParameterBtn" Click="Button_Click">鏂板</Button>
+                    <TextBlock DockPanel.Dock="Left" FontSize="{StaticResource TitleFontSize}" 
+   VerticalAlignment="Center" HorizontalAlignment="Left" Text="浜у搧鍒楄〃"/>
+                    <TextBlock DockPanel.Dock="Left" FontSize="{StaticResource TitleFontSize}" 
+                       VerticalAlignment="Center" HorizontalAlignment="Left" Text="浜у搧鍙傛暟"/>
+                </DockPanel>
+
+                <DataGrid x:Name="roleTable" Style="{StaticResource DefaultDataGrid}" SelectionMode="Single" 
+                      ItemsSource="{Binding Parameters}">
+                    <DataGrid.Columns>
+                        <DataGridTemplateColumn Header="" Width="Auto" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <CheckBox VerticalAlignment="Center" 
+                HorizontalAlignment="Center" IsChecked="{Binding Selected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+
+                        <DataGridTextColumn Header="#" Binding="{Binding Converter={StaticResource rowNumber},
+      RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}"
+              CanUserResize="False"/>
+                        <DataGridTextColumn Width="*" Binding="{Binding Name}" Header="鍚嶇О" />
+                        <DataGridTextColumn Width="*" Binding="{Binding Value}" Header="鍊�" />
+                        <DataGridTextColumn Width="*" Binding="{Binding Unit}" Header="鍗曚綅" />
+                        <DataGridTextColumn Width="*" Binding="{Binding Description}" Header="鎻忚堪" />
+                        <DataGridTextColumn Width="*" Binding="{Binding PGroup}" Header="鍒嗙粍" />
+                        <DataGridTemplateColumn Header="鎿嶄綔" Width="100" IsReadOnly="True" CanUserResize="False">
+                            <DataGridTemplateColumn.CellTemplate>
+                                <DataTemplate>
+                                    <StackPanel Orientation="Horizontal">
+                                        <Button x:Name="editParameterBtn" Style="{StaticResource RowLink}" Margin="0,0,10,0"
+                DataContext="{Binding }"
+                Click="Button_Click">缂栬緫</Button>
+                                        <Button x:Name="delParameterBtn" Style="{StaticResource DangerLinkButton}"
+                DataContext="{Binding }"
+                Click="Button_Click">鍒犻櫎</Button>
+                                    </StackPanel>
+                                </DataTemplate>
+                            </DataGridTemplateColumn.CellTemplate>
+                        </DataGridTemplateColumn>
+                    </DataGrid.Columns>
+                </DataGrid>
+            </StackPanel>
+        </Border>
+    </Grid>
+</hb:PluginControl>
\ No newline at end of file
diff --git a/HMI.ParameterManage/ParameterManage.xaml.cs b/HMI.ParameterManage/ParameterManage.xaml.cs
new file mode 100644
index 0000000..9a9bc3a
--- /dev/null
+++ b/HMI.ParameterManage/ParameterManage.xaml.cs
@@ -0,0 +1,119 @@
+锘縰sing System.IO;
+using System.Windows;
+using System.Windows.Controls;
+using HMI.Base;
+using HMI.Core.Util;
+using HMI.ParameterManage.Entity;
+using HMI.UI.Util;
+
+namespace HMI.ParameterManage
+{
+    /// <summary>
+    /// UserControl1.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class ParameterManage : PluginControl
+    {
+        private ControlModel Model;
+        private SqliteHelper SqliteHelper;
+
+        public ParameterManage()
+        {
+            InitializeComponent();
+        }
+
+        public override void InitFinish()
+        {
+            string dbpath = Path.Combine(BaseFolder, "ParameterManage.db");
+            if (!File.Exists(dbpath))
+            {
+                SqliteHelper.CreateDatabase(dbpath);
+            }
+            SqliteHelper = new SqliteHelper(dbpath);
+            SqliteHelper.ExecuteSql(@"CREATE TABLE IF NOT EXISTS product (
+                    id INTEGER PRIMARY KEY AUTOINCREMENT,
+                    name TEXT NOT NULL,
+                    isMaster INTEGER,
+                    parentId INTEGER,
+                    UNIQUE(name)
+                    );
+CREATE TABLE IF NOT EXISTS parameter (
+                    id INTEGER PRIMARY KEY AUTOINCREMENT,
+                    name TEXT NOT NULL,
+                    value TEXT,
+                    unit TEXT,
+                    description TEXT,
+                    pGroup TEXT,
+                    productName TEXT,
+                    UNIQUE(productName,name)
+                    );
+");
+            Model = new ControlModel(SqliteHelper);
+            DataContext = Model;
+        }
+
+        private void UserControl_Loaded(object sender, RoutedEventArgs e)
+        {
+            Model.LoadProducts();
+            Loaded -= UserControl_Loaded;
+        }
+
+        private void Button_Click(object sender, RoutedEventArgs e)
+        {
+            var btn = (Button)sender;
+            switch (btn.Name)
+            {
+                case "addBtn":
+                    OpenAddDialog();
+                    break;
+                case "refrshBtn":
+                    Model.LoadProducts();
+                    break;
+                case "refreshParameterBtn":
+                    Model.LoadParameters();
+                    break;
+                case "addParameterBtn":
+                    OpenAddParameterDialog(null);
+                    break;
+                case "editParameterBtn":
+                    OpenAddParameterDialog((ParameterData)btn.DataContext);
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        private void OpenAddDialog()
+        {
+            var win = new ProductModal
+            {
+                Title = "鏂板浜у搧",
+                Owner = Window.GetWindow(this),
+                sqliteHelper = SqliteHelper
+            };
+            if (win.Open(new ProductData()) == true)
+            {
+                Model.LoadProducts();
+            }
+        }
+
+        private void OpenAddParameterDialog(ParameterData data)
+        {
+            if (Model.SelectedProduct == null)
+            {
+                ToastHelper.Warning(Window.GetWindow(this), "璇峰厛閫夋嫨涓�椤逛骇鍝�");
+                return;
+            }
+            var win = new ParameterModal
+            {
+                Title = data == null ? "鏂板鍙傛暟" : "缂栬緫鍙傛暟",
+                Owner = Window.GetWindow(this),
+                sqliteHelper = SqliteHelper
+            };
+            if (win.Open(data ?? new ParameterData { ProductName = Model.SelectedProduct.Name }) == true)
+            {
+                Model.LoadParameters();
+            }
+        }
+
+    }
+}
diff --git a/HMI.ParameterManage/ParameterModal.xaml b/HMI.ParameterManage/ParameterModal.xaml
new file mode 100644
index 0000000..ba73ce9
--- /dev/null
+++ b/HMI.ParameterManage/ParameterModal.xaml
@@ -0,0 +1,62 @@
+锘�<pu:WindowX x:Class="HMI.ParameterManage.ParameterModal"
+            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+            xmlns:local="clr-namespace:HMI.ParameterManage"
+            xmlns:pw="https://opensource.panuon.com/wpf"
+            xmlns:pu="https://opensource.panuon.com/wpf-ui"
+            xmlns:uic="clr-namespace:HMI.UI.Converter;assembly=HMI.UI"
+            xmlns:ui="clr-namespace:HMI.UI;assembly=HMI.UI"
+            mc:Ignorable="d"
+            Title="Form"
+            SizeToContent="Height"
+            Width="600"
+            WindowStartupLocation="CenterOwner"
+            BorderBrush="#3E3E45"
+            BorderThickness="1"
+            Foreground="Black"
+            pu:WindowXCaption.Background="{StaticResource MainBorder}"
+            pu:WindowXModalDialog.ButtonStyle="{StaticResource ModalButton}"
+            pu:WindowXCaption.Foreground="#FFF"
+            pu:WindowXCaption.Buttons="Close"
+            pu:WindowXModalDialog.Buttons="OKCancel"
+            pu:WindowXModalDialog.CancelButtonContent="鍙栨秷"
+            pu:WindowXModalDialog.OKButtonContent="淇濆瓨"
+            pu:WindowXModalDialog.ButtonPanelMargin="0,30,10,10">
+    <Grid Margin="10">
+        <StackPanel x:Name="formPanel">
+            <pu:FormGroup x:Name="FgProductName" ui:FormGroupHelper.IsRequired="True" 
+                          Header="浜у搧鍚嶇О" GroupName="MyFormGroup">
+                <TextBox x:Name="TbProductName" IsReadOnly="True" Style="{StaticResource EditorTextBoxStyle}" />
+            </pu:FormGroup>
+
+            <pu:FormGroup x:Name="FgName" ui:FormGroupHelper.IsRequired="True"
+                          ui:FormGroupHelper.ValidateMethod="ValidateName"
+                              Header="鍙傛暟鍚嶇О" GroupName="MyFormGroup">
+                <TextBox x:Name="TbName" Style="{StaticResource EditorTextBoxStyle}" />
+            </pu:FormGroup>
+
+            <pu:FormGroup x:Name="FgValue" Style="{StaticResource RequiredInputFormGroupStyle}" 
+                          ui:FormGroupHelper.IsRequired="True"
+                  Header="鍙傛暟鍊�" GroupName="MyFormGroup">
+                <TextBox x:Name="TbValue" Style="{StaticResource EditorTextBoxStyle}" />
+            </pu:FormGroup>
+
+            <pu:FormGroup x:Name="FgUnit" Style="{StaticResource InputFormGroupStyle}" 
+      Header="鍗曚綅" GroupName="MyFormGroup">
+                <TextBox x:Name="TbUnit" Style="{StaticResource EditorTextBoxStyle}" />
+            </pu:FormGroup>
+
+            <pu:FormGroup x:Name="FgDescription" Style="{StaticResource InputFormGroupStyle}" 
+Header="鎻忚堪" GroupName="MyFormGroup">
+                <TextBox x:Name="TbDescription" Style="{StaticResource MultilineEditorTextBoxStyle}" />
+            </pu:FormGroup>
+
+            <pu:FormGroup x:Name="FgPGroup" Style="{StaticResource InputFormGroupStyle}" 
+Header="缁�" GroupName="MyFormGroup">
+                <TextBox x:Name="TbPGroup" Style="{StaticResource EditorTextBoxStyle}" />
+            </pu:FormGroup>
+        </StackPanel>
+    </Grid>
+</pu:WindowX>
diff --git a/HMI.ParameterManage/ParameterModal.xaml.cs b/HMI.ParameterManage/ParameterModal.xaml.cs
new file mode 100644
index 0000000..6824e14
--- /dev/null
+++ b/HMI.ParameterManage/ParameterModal.xaml.cs
@@ -0,0 +1,141 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Linq;
+using System.Reflection;
+using System.Windows;
+using Microsoft.Win32;
+using Panuon.WPF.UI;
+using HMI.Core.Annotation;
+using HMI.Core.Entity;
+using HMI.Core.Exceptions;
+using HMI.Core.Util;
+using HMI.ParameterManage.Entity;
+using HMI.UI;
+
+namespace HMI.ParameterManage
+{
+    /// <summary>
+    /// ModalWindow.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class ParameterModal : WindowX
+    {
+        public ParameterModal()
+        {
+            this.DataContext = this;
+            InitializeComponent();
+        }
+
+        public ParameterData Data { get; set; }
+
+        public SqliteHelper sqliteHelper { get; set; }
+
+        private bool _isProcessing;
+
+        protected override void OnClosing(CancelEventArgs e)
+        {
+            //Press Continue Button
+            if (DialogResult == true)
+            {
+                if (_isProcessing)
+                {
+                    e.Cancel = true;
+                    return;
+                }
+                var okButton = WindowXModalDialog.GetOKButton(this);
+                try
+                {
+                    _isProcessing = true;
+                    ButtonHelper.SetIsPending(okButton, true);
+                    if (!ValidateForm())
+                    {
+                        e.Cancel = true;
+                        return;
+                    }
+
+                    SaveOrUpdateData();
+                }
+                catch (Exception ex)
+                {
+                    Panuon.WPF.UI.Toast.Show(this, "Error锛�", ToastPosition.Top);
+                    e.Cancel = true;
+                    return;
+                }
+                finally
+                {
+                    _isProcessing = false;
+                    ButtonHelper.SetIsPending(okButton, false);
+                }
+            }
+            base.OnClosing(e);
+        }
+
+        public bool ValidateName(object value, out string err)
+        {
+            err = null;
+            string segment = string.IsNullOrEmpty(Data.Id) ? "" : $" AND id!='{Data.Id}'";
+            string sql = $"SELECT 1 FROM parameter WHERE name='{TbName.Text}' AND productName='{Data.ProductName}'{segment};";
+            if (sqliteHelper.HasData(sql))
+            {
+                err = "鍙傛暟鍚嶇О涓嶈兘閲嶅";
+                return false;
+            }
+            return true;
+        }
+
+        private bool ValidateForm()
+        {
+            bool flag = FormGroupHelper.ValidateForm(formPanel);
+            if (flag)
+            {
+                Data.Name = TbName.Text;
+                Data.Value = TbValue.Text;
+                Data.Unit = TbUnit.Text;
+                Data.Description = TbDescription.Text;
+                Data.ProductName = TbProductName.Text;
+                Data.PGroup = TbPGroup.Text;
+            }
+            return flag;
+        }
+
+        public bool? Open(ParameterData data)
+        {
+            Data = data;
+            TbName.Text = Data.Name;
+            TbValue.Text = Data.Value;
+            TbUnit.Text = Data.Unit;
+            TbProductName.Text = Data.ProductName;
+            TbDescription.Text = Data.Description;
+            TbPGroup.Text = Data.PGroup;
+            return this.ShowDialog();
+        }
+
+        private void SaveOrUpdateData()
+        {
+            if (string.IsNullOrEmpty(Data.Id))
+            {
+                InsertData(Data);
+            }
+            else
+            {
+                UpdateData(Data);
+            }
+        }
+
+        public void InsertData(ParameterData data)
+        {
+            string sql = $@"INSERT INTO parameter (name,value,unit,description,productName,pGroup) 
+                VALUES
+                ('{data.Name}','{data.Value}','{data.Unit}','{data.Description}','{data.ProductName}','{data.PGroup}');";
+            sqliteHelper.ExecuteSql(sql);
+        }
+
+        public void UpdateData(ParameterData data)
+        {
+            string sql = $@"UPDATE parameter SET name='{data.Name}',value='{data.Value}',unit='{data.Unit}',
+description='{data.Description}',productName='{data.ProductName}',pGroup='{data.PGroup}' WHERE id='{data.Id}';";
+            sqliteHelper.ExecuteSql(sql);
+        }
+    }
+}
diff --git a/HMI.ParameterManage/ProductModal.xaml b/HMI.ParameterManage/ProductModal.xaml
new file mode 100644
index 0000000..fcaf3df
--- /dev/null
+++ b/HMI.ParameterManage/ProductModal.xaml
@@ -0,0 +1,57 @@
+锘�<pu:WindowX x:Class="HMI.ParameterManage.ProductModal"
+            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+            xmlns:local="clr-namespace:HMI.ParameterManage"
+            xmlns:pw="https://opensource.panuon.com/wpf"
+            xmlns:pu="https://opensource.panuon.com/wpf-ui"
+            xmlns:uic="clr-namespace:HMI.UI.Converter;assembly=HMI.UI"
+            mc:Ignorable="d"
+            Title="Form"
+            SizeToContent="Height"
+            Width="600"
+            WindowStartupLocation="CenterOwner"
+            BorderBrush="#3E3E45"
+            BorderThickness="1"
+            Foreground="Black"
+            pu:WindowXCaption.Background="{StaticResource MainBorder}"
+            pu:WindowXModalDialog.ButtonStyle="{StaticResource ModalButton}"
+            pu:WindowXCaption.Foreground="#FFF"
+            pu:WindowXCaption.Buttons="Close"
+            pu:WindowXModalDialog.Buttons="OKCancel"
+            pu:WindowXModalDialog.CancelButtonContent="鍙栨秷"
+            pu:WindowXModalDialog.OKButtonContent="淇濆瓨"
+            pu:WindowXModalDialog.ButtonPanelMargin="0,30,10,10">
+    <Window.Resources>
+        <ResourceDictionary>
+            <ResourceDictionary.MergedDictionaries>
+                <pu:StyleDictionary Includes="TreeView" />
+                <ResourceDictionary Source="/HMI.UI;component/Style/PanuonResource.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Resources/Font/Font.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/Colors.xaml"/>
+            </ResourceDictionary.MergedDictionaries>
+            <uic:PathImageConverter x:Key="path2Image"/>
+            <uic:DataGridRowNumberConverter x:Key="rowNumber"/>
+        </ResourceDictionary>
+    </Window.Resources>
+
+    <Grid Margin="10">
+        <StackPanel>
+            <pu:FormGroup x:Name="FgName" Style="{StaticResource RequiredInputFormGroupStyle}" 
+                              Header="浜у搧鍚嶇О" GroupName="MyFormGroup">
+                <TextBox x:Name="TbName" Style="{StaticResource EditorTextBoxStyle}" />
+            </pu:FormGroup>
+
+            <pu:FormGroup x:Name="FgIsMaster" Style="{StaticResource InputFormGroupStyle}" 
+                          Header="鏄惁鏍蜂欢" GroupName="MyFormGroup">
+                <CheckBox x:Name="TbIsMaster"  />
+            </pu:FormGroup>
+
+            <pu:FormGroup x:Name="FgParentId" Style="{StaticResource InputFormGroupStyle}" 
+                  Header="缁ф壙" GroupName="MyFormGroup">
+                <TextBox x:Name="TbParentId" Style="{StaticResource EditorTextBoxStyle}" />
+            </pu:FormGroup>
+        </StackPanel>
+    </Grid>
+</pu:WindowX>
diff --git a/HMI.ParameterManage/ProductModal.xaml.cs b/HMI.ParameterManage/ProductModal.xaml.cs
new file mode 100644
index 0000000..d67793d
--- /dev/null
+++ b/HMI.ParameterManage/ProductModal.xaml.cs
@@ -0,0 +1,159 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Linq;
+using System.Reflection;
+using System.Windows;
+using Microsoft.Win32;
+using Panuon.WPF.UI;
+using HMI.Core.Annotation;
+using HMI.Core.Entity;
+using HMI.Core.Exceptions;
+using HMI.Core.Util;
+using HMI.ParameterManage.Entity;
+using HMI.UI;
+
+namespace HMI.ParameterManage
+{
+    /// <summary>
+    /// ModalWindow.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class ProductModal : WindowX
+    {
+        public ProductModal()
+        {
+            this.DataContext = this;
+            InitializeComponent();
+        }
+
+        public ProductData Data { get; set; }
+
+        public SqliteHelper sqliteHelper { get; set; }
+
+        private bool _isProcessing;
+
+        protected override void OnClosing(CancelEventArgs e)
+        {
+            //Press Continue Button
+            if (DialogResult == true)
+            {
+                if (_isProcessing)
+                {
+                    e.Cancel = true;
+                    return;
+                }
+                var okButton = WindowXModalDialog.GetOKButton(this);
+                try
+                {
+                    _isProcessing = true;
+                    ButtonHelper.SetIsPending(okButton, true);
+                    if (!ValidateForm())
+                    {
+                        e.Cancel = true;
+                        return;
+                    }
+
+                    SaveOrUpdateData();
+                }
+                catch (Exception ex)
+                {
+                    Panuon.WPF.UI.Toast.Show(this, "Error锛�", ToastPosition.Top);
+                    e.Cancel = true;
+                    return;
+                }
+                finally
+                {
+                    _isProcessing = false;
+                    ButtonHelper.SetIsPending(okButton, false);
+                }
+            }
+            base.OnClosing(e);
+        }
+
+        private bool ValidateForm()
+        {
+            try
+            {
+               
+                //
+
+                FormValidateException ex = new FormValidateException();
+                string segment = string.IsNullOrEmpty(Data.Id) ? "" : $" AND id!='{Data.Id}'";
+                string sql = $"SELECT 1 FROM product WHERE name='{TbName.Text}'{segment};";
+                if (string.IsNullOrEmpty(TbName.Text))
+                {
+                    ex.Result.Add(new FormGroupValidateResult("璇疯緭鍏ヤ骇鍝佸悕绉�", FgName));
+                }
+                else if (sqliteHelper.HasData(sql))
+                {
+                    ex.Result.Add(new FormGroupValidateResult("浜у搧鍚嶇О涓嶈兘閲嶅", FgName));
+                }
+                else
+                {
+                    FgName.ValidateResult = ValidateResult.None;
+                    FgName.Message = null;
+                }
+
+                if (!ex.Success)
+                {
+                    throw ex;
+                }
+            }
+            catch (FormValidateException ex)
+            {
+                foreach (var data in ex.Result)
+                {
+                    var fg = (FormGroup)data.Sender;
+                    fg.ValidateResult = ValidateResult.Error;
+                    fg.Message = data.Message;
+                }
+                return false;
+            }
+
+            Data.Name = TbName.Text;
+            Data.IsMaster = TbIsMaster.IsChecked == true;
+            Data.ParentId = TbParentId.Text;
+            return true;
+        }
+
+        public bool? Open(ProductData data)
+        {
+            Data = data;
+            TbName.Text = Data.Name;
+            TbIsMaster.IsChecked = Data.IsMaster;
+            TbParentId.Text = Data.ParentId;
+
+            return this.ShowDialog();
+        }
+
+        private void SaveOrUpdateData()
+        {
+            if (string.IsNullOrEmpty(Data.Id))
+            {
+                InsertData(Data);
+            }
+            else
+            {
+                UpdateData(Data);
+            }
+        }
+
+        public void InsertData(ProductData data)
+        {
+            string sql = $@"INSERT INTO product (name,isMaster,parentId) 
+                VALUES
+                ('{data.Name}',{(data.IsMaster ? 1 : 0)} ,{data.ParentId} );";
+            sqliteHelper.ExecuteSql(sql);
+        }
+
+
+
+        public void UpdateData(ProductData data)
+        {
+            string sql = $@"UPDATE product SET name='{data.Name}',isMaster='{(data.IsMaster ? 1 : 0)}',parentId = {data.ParentId} 
+WHERE id='{data.Id}';";
+            sqliteHelper.ExecuteSql(sql);
+        }
+    }
+}
diff --git a/HMI.ParameterManage/Properties/AssemblyInfo.cs b/HMI.ParameterManage/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..7275233
--- /dev/null
+++ b/HMI.ParameterManage/Properties/AssemblyInfo.cs
@@ -0,0 +1,52 @@
+锘縰sing System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
+[assembly: AssemblyTitle("HMI.ParameterManage")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Organization")]
+[assembly: AssemblyProduct("HMI.ParameterManage")]
+[assembly: AssemblyCopyright("Copyright 漏 Organization 2025")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏� ComVisible 璁剧疆涓� false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵� COM 缁勪欢涓嶅彲瑙併�傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�ц缃负 true銆�
+[assembly: ComVisible(false)]
+
+//鑻ヨ寮�濮嬬敓鎴愬彲鏈湴鍖栫殑搴旂敤绋嬪簭锛岃璁剧疆
+//.csproj 鏂囦欢涓殑 <UICulture>CultureYouAreCodingWith</UICulture>
+//鍦� <PropertyGroup> 涓�備緥濡傦紝濡傛灉浣犱娇鐢ㄧ殑鏄編鍥借嫳璇��
+//浣跨敤鐨勬槸缇庡浗鑻辫锛岃灏� <UICulture> 璁剧疆涓� en-US銆�  鐒跺悗鍙栨秷
+//瀵逛互涓� NeutralResourceLanguage 鐗规�х殑娉ㄩ噴銆�  鏇存柊
+//浠ヤ笅琛屼腑鐨勨�渆n-US鈥濅互鍖归厤椤圭洰鏂囦欢涓殑 UICulture 璁剧疆銆�
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly:ThemeInfo(
+    ResourceDictionaryLocation.None, //涓婚鐗瑰畾璧勬簮璇嶅吀鎵�澶勪綅缃�
+                             //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                             //鎴栧簲鐢ㄧ▼搴忚祫婧愬瓧鍏镐腑鎵惧埌鏃朵娇鐢�)
+    ResourceDictionaryLocation.SourceAssembly //甯歌璧勬簮璇嶅吀鎵�澶勪綅缃�
+                                      //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                                      //銆佸簲鐢ㄧ▼搴忔垨浠讳綍涓婚涓撶敤璧勬簮瀛楀吀涓壘鍒版椂浣跨敤)
+)]
+
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�肩粍鎴�: 
+//
+//      涓荤増鏈�
+//      娆$増鏈�
+//      鐢熸垚鍙�
+//      淇鍙�
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/HMI.ParameterManage/Properties/Resources.Designer.cs b/HMI.ParameterManage/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..c0bcce5
--- /dev/null
+++ b/HMI.ParameterManage/Properties/Resources.Designer.cs
@@ -0,0 +1,62 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
+//     杩愯鏃剁増鏈�: 4.0.30319.42000
+//
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳藉鑷翠笉姝g‘鐨勮涓猴紝濡傛灉
+//     閲嶆柊鐢熸垚浠g爜锛屽垯鎵�鍋氭洿鏀瑰皢涓㈠け銆�
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HMI.ParameterManage.Properties {
+    
+    
+    /// <summary>
+    ///   寮虹被鍨嬭祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲瀛楃涓茬瓑銆�
+    /// </summary>
+    // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+    // 绫婚�氳繃绫讳技浜� ResGen 鎴� Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆�
+    // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈� .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛� ResGen
+    // (浠� /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆�
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   杩斿洖姝ょ被浣跨敤鐨勭紦瀛� ResourceManager 瀹炰緥銆�
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if ((resourceMan == null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HMI.ParameterManage.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   閲嶅啓褰撳墠绾跨▼鐨� CurrentUICulture 灞炴�э紝瀵�
+        ///   浣跨敤姝ゅ己绫诲瀷璧勬簮绫荤殑鎵�鏈夎祫婧愭煡鎵炬墽琛岄噸鍐欍��
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}
diff --git a/HMI.ParameterManage/Properties/Resources.resx b/HMI.ParameterManage/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/HMI.ParameterManage/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/HMI.ParameterManage/Properties/Settings.Designer.cs b/HMI.ParameterManage/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..6ff41e5
--- /dev/null
+++ b/HMI.ParameterManage/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HMI.ParameterManage.Properties
+{
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}
diff --git a/HMI.ParameterManage/Properties/Settings.settings b/HMI.ParameterManage/Properties/Settings.settings
new file mode 100644
index 0000000..033d7a5
--- /dev/null
+++ b/HMI.ParameterManage/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘�<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>
\ No newline at end of file
diff --git a/HMI.SettingControl/HMI.SettingControl.csproj b/HMI.SettingControl/HMI.SettingControl.csproj
new file mode 100644
index 0000000..305b3ca
--- /dev/null
+++ b/HMI.SettingControl/HMI.SettingControl.csproj
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{3DD748AC-9708-49AD-B846-659214035588}</ProjectGuid>
+    <OutputType>library</OutputType>
+    <RootNamespace>HMI.SettingControl</RootNamespace>
+    <AssemblyName>HMI.SettingControl</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <WarningLevel>4</WarningLevel>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="log4net, Version=3.0.3.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\log4net.3.0.3\lib\net462\log4net.dll</HintPath>
+    </Reference>
+    <Reference Include="Panuon.WPF, Version=1.1.2.2, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\Panuon.WPF.1.1.2.2\lib\net472\Panuon.WPF.dll</HintPath>
+    </Reference>
+    <Reference Include="Panuon.WPF.UI, Version=1.2.4.8, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\Panuon.WPF.UI.1.2.4.9\lib\net472\Panuon.WPF.UI.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Web" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xaml">
+      <RequiredTargetFramework>4.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="WindowsBase" />
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="SystemConfig.xaml.cs">
+      <DependentUpon>SystemConfig.xaml</DependentUpon>
+    </Compile>
+    <Page Include="SettingControl.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Compile Include="SettingControl.xaml.cs">
+      <DependentUpon>SettingControl.xaml</DependentUpon>
+      <SubType>Code</SubType>
+    </Compile>
+    <Page Include="SystemConfig.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <None Include="packages.config" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HMI.Base\HMI.Base.csproj">
+      <Project>{2a6f9720-a890-4036-9d73-41a0dae28341}</Project>
+      <Name>HMI.Base</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HMI.Core\HMI.Core.csproj">
+      <Project>{3e3bf44a-0b69-45c5-9512-528cb48a7106}</Project>
+      <Name>HMI.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HMI.UI\HMI.UI.csproj">
+      <Project>{f17de6b5-af1d-48c6-94a0-6b763a6546a6}</Project>
+      <Name>HMI.UI</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>copy /Y "$(TargetPath)" "$(SolutionDir)bin\$(PlatformName)\$(ConfigurationName)\Plugin\$(TargetFileName)" 
+copy /Y "$(TargetDir)$(TargetName).pdb" "$(SolutionDir)bin\$(PlatformName)\$(ConfigurationName)\Plugin\$(TargetName).pdb"</PostBuildEvent>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/HMI.SettingControl/Properties/AssemblyInfo.cs b/HMI.SettingControl/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..630e0c8
--- /dev/null
+++ b/HMI.SettingControl/Properties/AssemblyInfo.cs
@@ -0,0 +1,52 @@
+锘縰sing System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
+[assembly: AssemblyTitle("HMI.SettingControl")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Organization")]
+[assembly: AssemblyProduct("HMI.SettingControl")]
+[assembly: AssemblyCopyright("Copyright 漏 Organization 2025")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏� ComVisible 璁剧疆涓� false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵� COM 缁勪欢涓嶅彲瑙併�傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�ц缃负 true銆�
+[assembly: ComVisible(false)]
+
+//鑻ヨ寮�濮嬬敓鎴愬彲鏈湴鍖栫殑搴旂敤绋嬪簭锛岃璁剧疆
+//.csproj 鏂囦欢涓殑 <UICulture>CultureYouAreCodingWith</UICulture>
+//鍦� <PropertyGroup> 涓�備緥濡傦紝濡傛灉浣犱娇鐢ㄧ殑鏄編鍥借嫳璇��
+//浣跨敤鐨勬槸缇庡浗鑻辫锛岃灏� <UICulture> 璁剧疆涓� en-US銆�  鐒跺悗鍙栨秷
+//瀵逛互涓� NeutralResourceLanguage 鐗规�х殑娉ㄩ噴銆�  鏇存柊
+//浠ヤ笅琛屼腑鐨勨�渆n-US鈥濅互鍖归厤椤圭洰鏂囦欢涓殑 UICulture 璁剧疆銆�
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly:ThemeInfo(
+    ResourceDictionaryLocation.None, //涓婚鐗瑰畾璧勬簮璇嶅吀鎵�澶勪綅缃�
+                             //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                             //鎴栧簲鐢ㄧ▼搴忚祫婧愬瓧鍏镐腑鎵惧埌鏃朵娇鐢�)
+    ResourceDictionaryLocation.SourceAssembly //甯歌璧勬簮璇嶅吀鎵�澶勪綅缃�
+                                      //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                                      //銆佸簲鐢ㄧ▼搴忔垨浠讳綍涓婚涓撶敤璧勬簮瀛楀吀涓壘鍒版椂浣跨敤)
+)]
+
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�肩粍鎴�: 
+//
+//      涓荤増鏈�
+//      娆$増鏈�
+//      鐢熸垚鍙�
+//      淇鍙�
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/HMI.SettingControl/Properties/Resources.Designer.cs b/HMI.SettingControl/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..0a8001f
--- /dev/null
+++ b/HMI.SettingControl/Properties/Resources.Designer.cs
@@ -0,0 +1,62 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
+//     杩愯鏃剁増鏈�: 4.0.30319.42000
+//
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳藉鑷翠笉姝g‘鐨勮涓猴紝濡傛灉
+//     閲嶆柊鐢熸垚浠g爜锛屽垯鎵�鍋氭洿鏀瑰皢涓㈠け銆�
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HMI.SettingControl.Properties {
+    
+    
+    /// <summary>
+    ///   寮虹被鍨嬭祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲瀛楃涓茬瓑銆�
+    /// </summary>
+    // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+    // 绫婚�氳繃绫讳技浜� ResGen 鎴� Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆�
+    // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈� .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛� ResGen
+    // (浠� /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆�
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   杩斿洖姝ょ被浣跨敤鐨勭紦瀛� ResourceManager 瀹炰緥銆�
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if ((resourceMan == null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HMI.SettingControl.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   閲嶅啓褰撳墠绾跨▼鐨� CurrentUICulture 灞炴�э紝瀵�
+        ///   浣跨敤姝ゅ己绫诲瀷璧勬簮绫荤殑鎵�鏈夎祫婧愭煡鎵炬墽琛岄噸鍐欍��
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}
diff --git a/HMI.SettingControl/Properties/Resources.resx b/HMI.SettingControl/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/HMI.SettingControl/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/HMI.SettingControl/Properties/Settings.Designer.cs b/HMI.SettingControl/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..80ac4ab
--- /dev/null
+++ b/HMI.SettingControl/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HMI.SettingControl.Properties
+{
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}
diff --git a/HMI.SettingControl/Properties/Settings.settings b/HMI.SettingControl/Properties/Settings.settings
new file mode 100644
index 0000000..033d7a5
--- /dev/null
+++ b/HMI.SettingControl/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘�<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>
\ No newline at end of file
diff --git a/HMI.SettingControl/SettingControl.xaml b/HMI.SettingControl/SettingControl.xaml
new file mode 100644
index 0000000..3116895
--- /dev/null
+++ b/HMI.SettingControl/SettingControl.xaml
@@ -0,0 +1,77 @@
+锘�<hb:PluginControl x:Class="HMI.SettingControl.SettingControl"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:hb="clr-namespace:HMI.Base;assembly=HMI.Base"
+             xmlns:local="clr-namespace:HMI.SettingControl"
+             mc:Ignorable="d" 
+             xmlns:uic="clr-namespace:HMI.UI.Converter;assembly=HMI.UI"
+            xmlns:pw="https://opensource.panuon.com/wpf"
+            xmlns:pu="https://opensource.panuon.com/wpf-ui"
+            xmlns:dp="clr-namespace:HMI.UI;assembly=HMI.UI"
+             Loaded="UserControl_Loaded"
+             Background="{StaticResource WorkspaceBackground}"
+             d:DesignHeight="450" d:DesignWidth="800">
+    <UserControl.Resources>
+        <ResourceDictionary>
+            <ResourceDictionary.MergedDictionaries>
+                <pu:StyleDictionary Includes="TabControl" />
+                <ResourceDictionary Source="/HMI.UI;component/Style/PanuonResource.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Resources/Font/Font.xaml"/>
+            </ResourceDictionary.MergedDictionaries>
+
+            <uic:PathImageConverter x:Key="path2Image"/>
+            <uic:DataGridRowNumberConverter x:Key="rowNumber"/>
+        </ResourceDictionary>
+    </UserControl.Resources>
+
+    <Grid>
+        <Border Style="{StaticResource CardBoarder}">
+            <Grid>
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="Auto"/>
+                    <RowDefinition />
+                </Grid.RowDefinitions>
+                <TextBlock VerticalAlignment="Center" Text="绯荤粺璁剧疆" Margin="0,0,0,10"
+                           FontSize="{StaticResource TitleFontSize}" />
+                <TabControl Grid.Row="1"
+pu:TabControlHelper.HeaderPanelAlignment="Front"
+pu:TabControlHelper.ItemsBackground="{StaticResource PrimaryColorContract}"
+pu:TabControlHelper.ItemsForeground="{StaticResource PrimaryColor}"
+                            
+pu:TabControlHelper.ItemsHeight="40"
+pu:TabControlHelper.ItemsHorizontalHeaderAlignment="Left"
+pu:TabControlHelper.ItemsHoverBackground="{StaticResource SecondPrimaryColor}"
+pu:TabControlHelper.ItemsHoverForeground="{StaticResource SecondPrimaryColorContract}"
+pu:TabControlHelper.ItemsRibbonLineMargin="0,5,0,5"
+pu:TabControlHelper.ItemsRibbonLineThickness="4"
+pu:TabControlHelper.ItemsRibbonLineVisibility="Visible"
+pu:TabControlHelper.ItemsSelectedBackground="{StaticResource PrimaryColor}"
+pu:TabControlHelper.ItemsSelectedForeground="{StaticResource PrimaryColorContract}"
+pu:TabControlHelper.ItemsSelectedRibbonLineBrush="#FFFFFF"
+pu:TabControlHelper.ItemsSelectedRibbonLineThickness="2"
+TabStripPlacement="Left"
+        BorderThickness="0"
+        BorderBrush="{StaticResource CommonBoarder}"
+        ItemsSource="{Binding TabItems}">
+
+                <TabControl.Resources>
+                    <Style TargetType="TabControl" BasedOn="{StaticResource {x:Static pu:StyleKeys.TabControlStyle}}">
+                        <Setter Property="Template">
+                            <Setter.Value>
+                                <ControlTemplate TargetType="TabControl">
+                                    <Border BorderBrush="Black" BorderThickness="1">
+                                            <ContentPresenter/>
+                                        </Border>
+                                </ControlTemplate>
+                            </Setter.Value>
+                        </Setter>
+                    </Style>
+                </TabControl.Resources>
+
+                </TabControl>
+            </Grid>
+        </Border>
+    </Grid>
+</hb:PluginControl>
diff --git a/HMI.SettingControl/SettingControl.xaml.cs b/HMI.SettingControl/SettingControl.xaml.cs
new file mode 100644
index 0000000..6390b40
--- /dev/null
+++ b/HMI.SettingControl/SettingControl.xaml.cs
@@ -0,0 +1,104 @@
+锘縰sing System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
+using System.Windows;
+using System.Windows.Controls;
+using HMI.Base;
+using HMI.Core.Api;
+using log4net;
+
+namespace HMI.SettingControl
+{
+    /// <summary>
+    /// UserControl1.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class SettingControl : PluginControl
+    {
+        #region ...
+        public virtual event PropertyChangedEventHandler PropertyChanged;
+
+        protected virtual void Set(string name)
+        {
+
+            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
+        }
+
+        protected void Set<T>(ref T old, T @new, [CallerMemberName] string propertyName = null)
+        {
+            old = @new;
+            if (propertyName != null)
+            {
+                Set(propertyName);
+            }
+        }
+        #endregion
+
+        #region 灞炴��
+        private ILog log;
+        private ObservableCollection<TabItem> tabItems;
+
+        public ObservableCollection<TabItem> TabItems
+        {
+            get { return tabItems; }
+            set { Set(ref tabItems, value); }
+        }
+
+        #endregion
+
+        #region PluginApi
+
+        public object Init()
+        {
+            return null;
+        }
+
+        public object Active()
+        {
+            return null;
+        }
+
+        public object DeActive()
+        {
+            return null;
+        }
+
+        public void OnTabChange(object sender, object args)
+        {
+
+        }
+
+        public void SetLogger(ILog logger)
+        {
+            log = logger;
+        }
+        #endregion
+
+        public SettingControl()
+        {
+            DataContext = this;
+            InitializeComponent();
+        }
+
+        private void UserControl_Loaded(object sender, RoutedEventArgs e)
+        {
+            TabItems = new ObservableCollection<TabItem>() {
+                new TabItem
+                {
+                    Header = "绯荤粺璁剧疆",
+                    Content = new SystemConfig()
+                }
+            };
+            foreach (var d in PluginLoader.Instance.Plugins)
+            {
+                if (d.SettingControl == null) continue;
+                TabItems.Add(new TabItem
+                {
+                    Header = d.Name,
+                    Tag = d,
+                    Content = d.SettingControl
+                });
+            }
+            Loaded -= UserControl_Loaded;
+        }
+    }
+}
diff --git a/HMI.SettingControl/SystemConfig.xaml b/HMI.SettingControl/SystemConfig.xaml
new file mode 100644
index 0000000..27114f5
--- /dev/null
+++ b/HMI.SettingControl/SystemConfig.xaml
@@ -0,0 +1,46 @@
+锘�<UserControl x:Class="HMI.SettingControl.SystemConfig"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="clr-namespace:HMI.SettingControl"
+            xmlns:pw="https://opensource.panuon.com/wpf"
+            xmlns:pu="https://opensource.panuon.com/wpf-ui"
+             xmlns:uic="clr-namespace:HMI.UI.Converter;assembly=HMI.UI"
+            mc:Ignorable="d" 
+            Background="#FFF"
+            d:DesignHeight="450" d:DesignWidth="800">
+    <UserControl.Resources>
+        <ResourceDictionary>
+            <ResourceDictionary.MergedDictionaries>
+                <pu:StyleDictionary Includes="TabControl" />
+                <ResourceDictionary Source="/HMI.UI;component/Style/PanuonResource.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Resources/Font/Font.xaml"/>
+            </ResourceDictionary.MergedDictionaries>
+
+            <uic:PathImageConverter x:Key="path2Image"/>
+            <uic:DataGridRowNumberConverter x:Key="rowNumber"/>
+        </ResourceDictionary>
+    </UserControl.Resources>
+    
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition/>
+            <RowDefinition Height="Auto"/>
+        </Grid.RowDefinitions>
+        <GroupBox Header="绋嬪簭璁剧疆" Padding="10">
+            <StackPanel>
+                <pu:FormGroup Header="Logo" GroupName="MyFormGroup">
+                    <TextBox Text="{Binding LogoPath}"/>
+                </pu:FormGroup>
+
+                <pu:FormGroup Header="鏍囬" GroupName="MyFormGroup">
+                    <TextBox Text="{Binding WindowTitle}"/>
+                </pu:FormGroup>
+            </StackPanel>
+        </GroupBox>
+        <DockPanel Grid.Row="1" LastChildFill="False">
+            <Button DockPanel.Dock="Right" Style="{StaticResource PrimaryButton}" Click="Button_Click">淇濆瓨</Button>
+        </DockPanel>
+    </Grid>
+</UserControl>
diff --git a/HMI.SettingControl/SystemConfig.xaml.cs b/HMI.SettingControl/SystemConfig.xaml.cs
new file mode 100644
index 0000000..cb7ec96
--- /dev/null
+++ b/HMI.SettingControl/SystemConfig.xaml.cs
@@ -0,0 +1,27 @@
+锘縰sing System.Windows.Controls;
+using HMI.Core.Setting;
+using HMI.Core.Util;
+
+namespace HMI.SettingControl
+{
+    /// <summary>
+    /// SystemConfig.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class SystemConfig : UserControl
+    {
+        public SystemConfig()
+        {
+            var model = new SystemSettingModel();
+            BeanUtil.Copy(SystemSetting.Instance, model);
+            DataContext = model;
+            InitializeComponent();
+        }
+
+        private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
+        {
+            SystemSettingModel settingModel = (SystemSettingModel)DataContext;
+            XmlHelper.SerializeToXml(PathHelper.ConfigFolder + "\\SystemConfig.xml",settingModel);
+            SystemSetting.ReLoad();
+        }
+    }
+}
diff --git a/HMI.SettingControl/packages.config b/HMI.SettingControl/packages.config
new file mode 100644
index 0000000..63cdc53
--- /dev/null
+++ b/HMI.SettingControl/packages.config
@@ -0,0 +1,6 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="log4net" version="3.0.3" targetFramework="net472" />
+  <package id="Panuon.WPF" version="1.1.2.2" targetFramework="net472" />
+  <package id="Panuon.WPF.UI" version="1.2.4.9" targetFramework="net472" />
+</packages>
\ No newline at end of file
diff --git a/HMI.UI/Converter/DataGridRowNumberConverter.cs b/HMI.UI/Converter/DataGridRowNumberConverter.cs
new file mode 100644
index 0000000..d6922a2
--- /dev/null
+++ b/HMI.UI/Converter/DataGridRowNumberConverter.cs
@@ -0,0 +1,24 @@
+锘縰sing System;
+using System.Globalization;
+using System.Windows.Controls;
+using System.Windows.Data;
+
+namespace HMI.UI.Converter
+{
+    public class DataGridRowNumberConverter : IValueConverter
+    {
+        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+        {
+            if (value is DataGridRow row)
+            {
+                return row.GetIndex() + 1;
+            }
+            return -1;
+        }
+
+        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+        {
+            return value;
+        }
+    }
+}
diff --git a/HMI.UI/Converter/PathImageConverter.cs b/HMI.UI/Converter/PathImageConverter.cs
new file mode 100644
index 0000000..b940837
--- /dev/null
+++ b/HMI.UI/Converter/PathImageConverter.cs
@@ -0,0 +1,29 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Data;
+using System.Windows.Media.Imaging;
+using HMI.Core.Util;
+
+namespace HMI.UI.Converter
+{
+    public class PathImageConverter : IValueConverter
+    {
+        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+        {
+            if (value == null) return null;
+            string imagePath = Path.Combine(PathHelper.IconFolder, value.ToString());
+            if (!File.Exists(imagePath)) return null;
+            return new BitmapImage(new Uri(imagePath));
+        }
+
+        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+        {
+            return value;
+        }
+    }
+}
diff --git a/HMI.UI/DpUtil/DpPlugin.cs b/HMI.UI/DpUtil/DpPlugin.cs
new file mode 100644
index 0000000..50d4bce
--- /dev/null
+++ b/HMI.UI/DpUtil/DpPlugin.cs
@@ -0,0 +1,22 @@
+锘縰sing System.Windows.Media;
+using System.Windows;
+using System.Windows.Controls;
+
+namespace HMI.UI
+{
+    public class DpPlugin
+    {
+        public static Brush GetHoverColor(Button button)
+        {
+            return (Brush)button.GetValue(HoverColorProperty);
+        }
+
+        public static void SetHoverColor(Button button, Brush value)
+        {
+            button.SetValue(HoverColorProperty, value);
+        }
+
+        public static readonly DependencyProperty HoverColorProperty = DependencyProperty.RegisterAttached("HoverColor", typeof(Brush), typeof(DpPlugin),
+            new PropertyMetadata(new SolidColorBrush(Color.FromRgb(255, 255, 255))));
+    }
+}
diff --git a/HMI.UI/DpUtil/FormGroupHelper.cs b/HMI.UI/DpUtil/FormGroupHelper.cs
new file mode 100644
index 0000000..245a054
--- /dev/null
+++ b/HMI.UI/DpUtil/FormGroupHelper.cs
@@ -0,0 +1,99 @@
+锘縰sing System;
+using System.ComponentModel;
+using System.Windows;
+using System.Windows.Controls;
+using Panuon.WPF.UI;
+using Panuon.WPF.UI.Configurations;
+
+namespace HMI.UI
+{
+    public class FormGroupHelper
+    {
+        public static bool GetIsRequired(FormGroup fg)
+        {
+            return (bool)fg.GetValue(IsRequiredProperty);
+        }
+
+        public static void SetIsRequired(FormGroup fg, bool value)
+        {
+            fg.SetValue(IsRequiredProperty, value);
+        }
+
+        public static readonly DependencyProperty IsRequiredProperty =
+            DependencyProperty.RegisterAttached("IsRequired", typeof(bool), typeof(FormGroupHelper),
+            new PropertyMetadata(false, (d, e) =>
+            {
+                if (!(d is FormGroup fg)) return;
+                if ((bool)e.NewValue)
+                {
+                    var style = Application.Current.FindResource("RequiredInputFormGroupStyle") as Style;
+                    fg.Style = style;
+                }
+                else
+                {
+                    var style = Application.Current.FindResource("RequiredInputFormGroupStyle") as Style;
+                    fg.Style = style;
+                }
+            }));
+
+
+        public delegate bool ValidateMethodDelegate(object value, out string msg);
+        public static ValidateMethodDelegate GetValidateMethod(FormGroup fg)
+        {
+            return (ValidateMethodDelegate)fg.GetValue(ValidateMethodProperty);
+        }
+
+        public static void SetValidateMethod(FormGroup fg, ValidateMethodDelegate value)
+        {
+            fg.SetValue(ValidateMethodProperty, value);
+        }
+
+        public static readonly DependencyProperty ValidateMethodProperty =
+            DependencyProperty.RegisterAttached("ValidateMethod", typeof(ValidateMethodDelegate), typeof(FormGroupHelper),
+            new PropertyMetadata(null));
+
+        public static bool ValidateForm(StackPanel fgPanel)
+        {
+            if (fgPanel.Children == null) return true;
+            bool res = true;
+            foreach (var child in fgPanel.Children)
+            {
+                if (child is FormGroup fg)
+                {
+                    object content = fg.Content;
+                    object value = GetValidateValue(content);
+                    if (GetIsRequired(fg) && string.IsNullOrEmpty(value.ToString()))
+                    {
+                        fg.ValidateResult = ValidateResult.Error;
+                        fg.Message = $"{fg.Header}涓嶈兘涓虹┖";
+                        res = false;
+                    }
+                    else
+                    {
+                        ValidateMethodDelegate method = GetValidateMethod(fg);
+                        if (method != null && !method(value, out string err))
+                        {
+                            fg.ValidateResult = ValidateResult.Error;
+                            fg.Message = err;
+                            res = false;
+                        }
+                    }
+                }
+            }
+            return res;
+        }
+
+        private static object GetValidateValue(object content)
+        {
+            if (content == null) return null;
+            if (content is UIElementCollection elementCollection)
+                return elementCollection.Count > 0 ? GetValidateValue(elementCollection[0]) : null;
+            if (content is TextBox tb) return tb.Text;
+            if (content is CheckBox cb) return cb.IsChecked;
+            if (content is ComboBox cBox) return cBox.Text;
+
+            if (content is Panel panel) return GetValidateValue(panel.Children);
+            return null;
+        }
+    }
+}
diff --git a/HMI.UI/DpUtil/StackPanelHelper.cs b/HMI.UI/DpUtil/StackPanelHelper.cs
new file mode 100644
index 0000000..3c5c84a
--- /dev/null
+++ b/HMI.UI/DpUtil/StackPanelHelper.cs
@@ -0,0 +1,38 @@
+锘縰sing System.Windows;
+using System.Windows.Controls;
+
+namespace HMI.UI
+{
+    public class StackPanelHelper
+    {
+        public static double GetChildSpace(StackPanel sp)
+        {
+            return (double)sp.GetValue(ChildSpaceProperty);
+        }
+
+        public static void SetChildSpace(StackPanel sp, double value)
+        {
+            sp.SetValue(ChildSpaceProperty, value);
+        }
+
+        public static readonly DependencyProperty ChildSpaceProperty =
+            DependencyProperty.RegisterAttached("ChildSpace", typeof(double), typeof(StackPanelHelper),
+            new PropertyMetadata(0d, (d, e) =>
+            {
+                if (!(d is StackPanel sp)) return;
+                if (sp.Children == null) return;
+                var children = sp.Children;
+                double space = (double)e.NewValue;
+                if (sp.Orientation == Orientation.Horizontal)
+                {
+                    for (int i = 0; i < children.Count; i++)
+                    {
+                        if (children[i] is FrameworkElement ui)
+                        {
+                            ui.Margin = new Thickness(0, 0, (i == children.Count - 1) ? 0 : space, 0);
+                        }
+                    }
+                }
+            }));
+    }
+}
diff --git a/HMI.UI/DpUtil/TreeViewHelper.cs b/HMI.UI/DpUtil/TreeViewHelper.cs
new file mode 100644
index 0000000..e29c50a
--- /dev/null
+++ b/HMI.UI/DpUtil/TreeViewHelper.cs
@@ -0,0 +1,90 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Controls;
+using System.Windows.Media;
+using System.Windows;
+using System.ComponentModel;
+
+namespace HMI.UI
+{
+    public class TreeViewHelper
+    {
+        public static bool GetAutoExpand(TreeView treeView)
+        {
+            return (bool)treeView.GetValue(AutoExpandProperty);
+        }
+
+        public static void SetAutoExpand(TreeView treeView, bool value)
+        {
+            treeView.SetValue(AutoExpandProperty, value);
+        }
+
+        public static readonly DependencyProperty AutoExpandProperty =
+            DependencyProperty.RegisterAttached("AutoExpand", typeof(bool), typeof(TreeViewHelper),
+            new PropertyMetadata(false, (d, e) =>
+            {
+                if (!(d is TreeView treeView)) return;
+                if ((bool)e.NewValue)
+                {
+                    var dpd = DependencyPropertyDescriptor.FromProperty(ItemsControl.ItemsSourceProperty, typeof(DataGrid));
+                    dpd?.AddValueChanged(treeView, TreeView_ItemSourceChanged);
+                }
+                else
+                {
+                    var dpd = DependencyPropertyDescriptor.FromProperty(ItemsControl.ItemsSourceProperty, typeof(DataGrid));
+                    dpd?.RemoveValueChanged(treeView, TreeView_ItemSourceChanged);
+                }
+            }));
+
+        private static void TreeView_ItemSourceChanged(object sender, EventArgs e)
+        {
+            TreeView tree = sender as TreeView;
+            if (!tree.IsLoaded)
+            {
+                tree.Loaded += Tree_Loaded;
+            }
+            else
+            {
+                ExpandAll(tree);
+            }
+        }
+
+        private static void Tree_Loaded(object sender, RoutedEventArgs e)
+        {
+            TreeView tree = sender as TreeView;
+            ExpandAll(tree);
+            tree.Loaded -= Tree_Loaded;
+        }
+
+        public static void ExpandAll(TreeView treeView)
+        {
+            foreach (var item in treeView.Items)
+            {
+                var temp = treeView.ItemContainerGenerator.ContainerFromItem(item);
+                if (temp is TreeViewItem treeViewItem)
+                {
+                    ExpandTreeViewItem(treeViewItem);
+                }
+            }
+        }
+        public static void ExpandTreeViewItem(TreeViewItem item)
+        {
+            item.IsExpanded = true;
+            // 纭繚瀛愰」宸茬粡鐢熸垚
+            item.ApplyTemplate();
+            if (item.Items.Count > 0)
+            {
+                foreach (var subItem in item.Items)
+                {
+                    if (item.ItemContainerGenerator.ContainerFromItem(subItem) is TreeViewItem childItem)
+                    {
+                        ExpandTreeViewItem(childItem);
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/HMI.UI/Entity/NotifyBase.cs b/HMI.UI/Entity/NotifyBase.cs
new file mode 100644
index 0000000..e401957
--- /dev/null
+++ b/HMI.UI/Entity/NotifyBase.cs
@@ -0,0 +1,97 @@
+锘縰sing System;
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
+using System.Windows.Input;
+
+namespace HMI.UI.Entity
+{
+
+    public class RelayCommand<T> : ICommand
+    {
+        /// <summary>
+        /// 鍛戒护鑳藉惁鎵ц
+        /// </summary>
+        readonly Func<bool> _canExecute;
+        /// <summary>
+        /// 鍛戒护鎵ц鐨勬柟娉�
+        /// </summary>
+        readonly Action<T> _execute;
+
+        /// <summary>
+        /// 鍛戒护鐨勬瀯閫犲嚱鏁�
+        /// </summary>
+        /// <param name="action">鍛戒护闇�鎵ц鐨勬柟娉�</param>
+        /// <param name="canExecute">鍛戒护鏄惁鍙互鎵ц鐨勬柟娉�</param>
+        public RelayCommand(Action<T> action, Func<bool> canExecute)
+        {
+            _execute = action;
+            _canExecute = canExecute;
+        }
+
+        public RelayCommand(Action<T> action)
+        {
+            _execute = action;
+        }
+
+        /// <summary>
+        /// 鍒ゆ柇鍛戒护鏄惁鍙互鎵ц
+        /// </summary>
+        /// <param name="parameter"></param>
+        /// <returns></returns>
+        public bool CanExecute(Object parameter)
+        {
+            if (_canExecute == null)
+                return true;
+            return _canExecute();
+        }
+
+        /// <summary>
+        /// 鎵ц鍛戒护
+        /// </summary>
+        /// <param name="parameter"></param>
+        public void Execute(Object parameter)
+        {
+            _execute((T)parameter);
+        }
+
+        /// <summary>
+        /// 浜嬩欢杩藉姞銆佺Щ闄�
+        /// </summary>
+        public event EventHandler CanExecuteChanged
+        {
+            add
+            {
+                if (_canExecute != null)
+                    CommandManager.RequerySuggested += value;
+            }
+            remove
+            {
+                if (_canExecute != null)
+                    CommandManager.RequerySuggested -= value;
+            }
+        }
+
+    }
+
+    public class NotifyBase : INotifyPropertyChanged
+    {
+        #region ...
+        public virtual event PropertyChangedEventHandler PropertyChanged;
+
+        protected virtual void RaisePropertyChanged(string name)
+        {
+
+            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
+        }
+
+        protected void RaiseAndSetIfChanged<T>(ref T old, T @new, [CallerMemberName] string propertyName = null)
+        {
+            old = @new;
+            if (propertyName != null)
+            {
+                RaisePropertyChanged(propertyName);
+            }
+        }
+        #endregion
+    }
+}
diff --git a/HMI.UI/HMI.UI.csproj b/HMI.UI/HMI.UI.csproj
new file mode 100644
index 0000000..9032440
--- /dev/null
+++ b/HMI.UI/HMI.UI.csproj
@@ -0,0 +1,169 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{F17DE6B5-AF1D-48C6-94A0-6B763A6546A6}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <RootNamespace>HMI.UI</RootNamespace>
+    <AssemblyName>HMI.UI</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <WarningLevel>4</WarningLevel>
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <StartupObject />
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <Prefer32Bit>true</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <Prefer32Bit>true</Prefer32Bit>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Panuon.WPF, Version=1.1.2.2, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\Panuon.WPF.1.1.2.2\lib\net472\Panuon.WPF.dll</HintPath>
+    </Reference>
+    <Reference Include="Panuon.WPF.UI, Version=1.2.4.8, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\Panuon.WPF.UI.1.2.4.9\lib\net472\Panuon.WPF.UI.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xaml">
+      <RequiredTargetFramework>4.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="WindowsBase" />
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Converter\DataGridRowNumberConverter.cs" />
+    <Compile Include="Converter\PathImageConverter.cs" />
+    <Compile Include="DpUtil\FormGroupHelper.cs" />
+    <Compile Include="DpUtil\StackPanelHelper.cs" />
+    <Compile Include="DpUtil\TreeViewHelper.cs" />
+    <Compile Include="Style\BaseWindow.xaml.cs">
+      <DependentUpon>BaseWindow.xaml</DependentUpon>
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Compile>
+    <Compile Include="DpUtil\DpPlugin.cs" />
+    <Compile Include="Util\IValueValidator.cs" />
+    <Compile Include="Util\MsgBoxHelper.cs" />
+    <Compile Include="Util\ToastHelper.cs" />
+    <Resource Include="Resources\Font\Font.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Resource>
+    <Page Include="Style\MsgBoxStyle.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
+    <Page Include="Style\PanuonResource.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Page>
+    <Page Include="Style\BaseWindow.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Page>
+    <Page Include="Style\Colors.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Page>
+    <Page Include="Style\FormStyle.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Page>
+    <Page Include="Style\WindowResources.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <None Include="packages.config" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Resource Include="Resources\Font\iconfont.ttf">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Resource>
+  </ItemGroup>
+  <ItemGroup>
+    <Resource Include="Resources\Icon\xinzeng_1.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HMI.Core\HMI.Core.csproj">
+      <Project>{3e3bf44a-0b69-45c5-9512-528cb48a7106}</Project>
+      <Name>HMI.Core</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup />
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/HMI.UI/Properties/AssemblyInfo.cs b/HMI.UI/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..b14ab95
--- /dev/null
+++ b/HMI.UI/Properties/AssemblyInfo.cs
@@ -0,0 +1,52 @@
+锘縰sing System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
+[assembly: AssemblyTitle("HMI.UI")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HMI.UI")]
+[assembly: AssemblyCopyright("Copyright 漏  2025")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏� ComVisible 璁剧疆涓� false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵� COM 缁勪欢涓嶅彲瑙併�傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�ц缃负 true銆�
+[assembly: ComVisible(false)]
+
+//鑻ヨ寮�濮嬬敓鎴愬彲鏈湴鍖栫殑搴旂敤绋嬪簭锛岃璁剧疆
+//.csproj 鏂囦欢涓殑 <UICulture>CultureYouAreCodingWith</UICulture>
+//鍦� <PropertyGroup> 涓�備緥濡傦紝濡傛灉浣犱娇鐢ㄧ殑鏄編鍥借嫳璇��
+//浣跨敤鐨勬槸缇庡浗鑻辫锛岃灏� <UICulture> 璁剧疆涓� en-US銆�  鐒跺悗鍙栨秷
+//瀵逛互涓� NeutralResourceLanguage 鐗规�х殑娉ㄩ噴銆�  鏇存柊
+//浠ヤ笅琛屼腑鐨勨�渆n-US鈥濅互鍖归厤椤圭洰鏂囦欢涓殑 UICulture 璁剧疆銆�
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+    ResourceDictionaryLocation.None, //涓婚鐗瑰畾璧勬簮璇嶅吀鎵�澶勪綅缃�
+                                     //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                                     //鎴栧簲鐢ㄧ▼搴忚祫婧愬瓧鍏镐腑鎵惧埌鏃朵娇鐢�)
+    ResourceDictionaryLocation.SourceAssembly //甯歌璧勬簮璇嶅吀鎵�澶勪綅缃�
+                                              //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                                              //銆佸簲鐢ㄧ▼搴忔垨浠讳綍涓婚涓撶敤璧勬簮瀛楀吀涓壘鍒版椂浣跨敤)
+)]
+
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�肩粍鎴�: 
+//
+//      涓荤増鏈�
+//      娆$増鏈�
+//      鐢熸垚鍙�
+//      淇鍙�
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/HMI.UI/Properties/Resources.Designer.cs b/HMI.UI/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..b245f52
--- /dev/null
+++ b/HMI.UI/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
+//     杩愯鏃剁増鏈�:4.0.30319.42000
+//
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋�
+//     閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便��
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HMI.UI.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   涓�涓己绫诲瀷鐨勮祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲鐨勫瓧绗︿覆绛夈��
+    /// </summary>
+    // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+    // 绫婚�氳繃绫讳技浜� ResGen 鎴� Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆�
+    // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈� .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛� ResGen
+    // (浠� /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆�
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   杩斿洖姝ょ被浣跨敤鐨勭紦瀛樼殑 ResourceManager 瀹炰緥銆�
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HMI.UI.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   閲嶅啓褰撳墠绾跨▼鐨� CurrentUICulture 灞炴�э紝瀵�
+        ///   浣跨敤姝ゅ己绫诲瀷璧勬簮绫荤殑鎵�鏈夎祫婧愭煡鎵炬墽琛岄噸鍐欍��
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}
diff --git a/HMI.UI/Properties/Resources.resx b/HMI.UI/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/HMI.UI/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/HMI.UI/Properties/Settings.Designer.cs b/HMI.UI/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..72fac73
--- /dev/null
+++ b/HMI.UI/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
+//     杩愯鏃剁増鏈�:4.0.30319.42000
+//
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋�
+//     閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便��
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HMI.UI.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.12.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+    }
+}
diff --git a/HMI.UI/Properties/Settings.settings b/HMI.UI/Properties/Settings.settings
new file mode 100644
index 0000000..033d7a5
--- /dev/null
+++ b/HMI.UI/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘�<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>
\ No newline at end of file
diff --git a/HMI.UI/Resources/Font/Font.xaml b/HMI.UI/Resources/Font/Font.xaml
new file mode 100644
index 0000000..0884140
--- /dev/null
+++ b/HMI.UI/Resources/Font/Font.xaml
@@ -0,0 +1,6 @@
+锘�<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
+    <FontFamily x:Key="iconfont">
+        /WPFProject;component/Resources/Font/#iconfont
+    </FontFamily>
+</ResourceDictionary>
\ No newline at end of file
diff --git a/HMI.UI/Resources/Font/iconfont.ttf b/HMI.UI/Resources/Font/iconfont.ttf
new file mode 100644
index 0000000..927cfcc
--- /dev/null
+++ b/HMI.UI/Resources/Font/iconfont.ttf
Binary files differ
diff --git a/HMI.UI/Resources/Icon/xinzeng_1.png b/HMI.UI/Resources/Icon/xinzeng_1.png
new file mode 100644
index 0000000..0b16aa2
--- /dev/null
+++ b/HMI.UI/Resources/Icon/xinzeng_1.png
Binary files differ
diff --git a/HMI.UI/Style/BaseWindow.xaml b/HMI.UI/Style/BaseWindow.xaml
new file mode 100644
index 0000000..340ee2e
--- /dev/null
+++ b/HMI.UI/Style/BaseWindow.xaml
@@ -0,0 +1,62 @@
+锘�<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+                    xmlns:ui="clr-namespace:HMI.UI"
+                    x:Class="HMI.UI.BaseWindowTemplate">
+    <ResourceDictionary.MergedDictionaries>
+        <ResourceDictionary Source="/HMI.UI;component/Style/Colors.xaml"/>
+        <ResourceDictionary Source="/HMI.UI;component/Resources/Font/Font.xaml"/>
+        <ResourceDictionary Source="/HMI.UI;component/Style/WindowResources.xaml"/>
+    </ResourceDictionary.MergedDictionaries>
+
+    <Style TargetType="ui:BaseWindow" x:Key="BaseWindow">
+        <Setter Property="WindowChrome.WindowChrome">
+            <Setter.Value>
+                <WindowChrome CornerRadius="0" CaptionHeight="40" GlassFrameThickness="0"
+      UseAeroCaptionButtons="False" NonClientFrameEdges="None"  />
+            </Setter.Value>
+        </Setter>
+
+        <Setter Property="Template">
+            <Setter.Value>
+                <ControlTemplate TargetType="ui:BaseWindow">
+                    <Border BorderThickness="1" BorderBrush="Gray">
+                        <Grid x:Name="mainGrid" Background="#FFF">
+                            <Grid.RowDefinitions>
+                                <RowDefinition Height="40"/>
+                                <RowDefinition/>
+                            </Grid.RowDefinitions>
+
+                            <Grid Grid.Row="0" Background="{StaticResource MainBorder}">
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition/>
+                                    <ColumnDefinition Width="Auto"/>
+                                </Grid.ColumnDefinitions>
+                                <StackPanel x:Name="LeftPanel" Orientation="Horizontal" Grid.Column="0">
+                                    <Border x:Name="TitlePanel">
+                                        <Label VerticalContentAlignment="Center" Foreground="#FFF" Content="{TemplateBinding Title}"/>
+                                    </Border>
+                                </StackPanel>
+                                <StackPanel x:Name="RightPanel" Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right">
+                                    <Button Style="{StaticResource WindowButton}" Click="Min_Click">&#xe650;</Button>
+                                    <Button Style="{StaticResource WindowButton}" Click="Max_Click">&#xe602;</Button>
+                                    <Button Style="{StaticResource WindowCloseButton}" Click="Close_Click">&#xe609;</Button>
+                                </StackPanel>
+                            </Grid>
+                            <AdornerDecorator Grid.Row="1">
+                                <ContentPresenter  Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}"
+ContentTemplate="{TemplateBinding ContentTemplate}"  />
+                            </AdornerDecorator>
+                        </Grid>
+                    </Border>
+
+                    <ControlTemplate.Triggers>
+                        <Trigger Property="WindowState" Value="Maximized">
+                            <Setter TargetName="mainGrid" Property="Margin" Value="8,8,8,8"></Setter>
+                        </Trigger>
+                    </ControlTemplate.Triggers>
+                </ControlTemplate>
+            </Setter.Value>
+        </Setter>
+    </Style>
+
+</ResourceDictionary>
\ No newline at end of file
diff --git a/HMI.UI/Style/BaseWindow.xaml.cs b/HMI.UI/Style/BaseWindow.xaml.cs
new file mode 100644
index 0000000..af8d802
--- /dev/null
+++ b/HMI.UI/Style/BaseWindow.xaml.cs
@@ -0,0 +1,45 @@
+锘�
+using System.Windows;
+using System.Windows.Controls;
+
+namespace HMI.UI
+{
+    /// <summary>
+    /// MainWindow.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class BaseWindowTemplate
+    {
+        void Min_Click(object sender, RoutedEventArgs e)
+        {
+            Window.GetWindow(sender as FrameworkElement).WindowState = WindowState.Minimized;
+        }
+
+        void Max_Click(object sender, RoutedEventArgs e)
+        {
+            var temp = Window.GetWindow(sender as FrameworkElement).WindowState;
+            Window.GetWindow(sender as FrameworkElement).WindowState = temp == WindowState.Maximized ? WindowState.Normal : WindowState.Maximized;
+        }
+
+        void Close_Click(object sender, RoutedEventArgs e)
+        {
+            Window.GetWindow(sender as FrameworkElement).Close();
+        }
+    }
+
+    public partial class BaseWindow : Window
+    {
+        public void AddButton(Button button)
+        {
+            var panelsda = Template.FindName("RightPanel", this);
+            var panel = (StackPanel)this.Template.FindName("RightPanel", this);
+            panel?.Children.Add(button);
+        }
+
+        public void InsertButton(Button button,int index)
+        {
+            var panelsda = Template.FindName("RightPanel", this);
+            var panel = (StackPanel)this.Template.FindName("RightPanel", this);
+            panel?.Children.Insert(index, button);
+        }
+    }
+}
diff --git a/HMI.UI/Style/Colors.xaml b/HMI.UI/Style/Colors.xaml
new file mode 100644
index 0000000..c9a7668
--- /dev/null
+++ b/HMI.UI/Style/Colors.xaml
@@ -0,0 +1,39 @@
+锘�<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
+    <Brush x:Key="WorkspaceBackground">#f0f2f5</Brush>
+    <Brush x:Key="TableHeaderBackground">#fafafa</Brush>
+    <Brush x:Key="TableBoarder">#e8e8e8</Brush>
+    <Brush x:Key="CommonBoarder">#e8e8e8</Brush>
+    
+    
+    <Brush x:Key="PrimaryColor">#0d4d84</Brush>
+    <Brush x:Key="PrimaryColorContract">#FFF</Brush>
+    
+    <Brush x:Key="SecondPrimaryColor">#3692e1</Brush>
+    <Brush x:Key="SecondPrimaryColorContract">#FFF</Brush>
+    
+    <Brush x:Key="DangerColor">#d64343</Brush>
+    <Brush x:Key="DangerColorContrast">#FFF</Brush>
+
+    <Brush x:Key="SuccessColor">Green</Brush>
+    <Brush x:Key="SuccessColorContrast">#FFF</Brush>
+
+    <Brush x:Key="WarningColor">#e17933</Brush>
+    <Brush x:Key="WarningColorContract">#FFF</Brush>
+
+    <Brush x:Key="WindowBar">#0d4d84</Brush>
+    <Brush x:Key="MainBorder">#0d4d84</Brush>
+    <Brush x:Key="MainMenu">#1d6eb2</Brush>
+    <Brush x:Key="ChildBorder">#3692e1</Brush>
+    <Brush x:Key="MainStatusBar">#1d6eb2</Brush>
+
+    <Brush x:Key="SecondaryImportant">Orange</Brush>
+    <Brush x:Key="Important">#e17933</Brush>
+    <Brush x:Key="ImportantFont">#FFF</Brush>
+
+
+    <Brush x:Key="ButtonColor">#103156</Brush>
+    <Brush x:Key="ButtonSelected">#02579E</Brush>
+    <Brush x:Key="ButtonFont">White</Brush>
+    <Brush x:Key="ButtonFontSelected">White</Brush>
+</ResourceDictionary>
\ No newline at end of file
diff --git a/HMI.UI/Style/FormStyle.xaml b/HMI.UI/Style/FormStyle.xaml
new file mode 100644
index 0000000..9056d01
--- /dev/null
+++ b/HMI.UI/Style/FormStyle.xaml
@@ -0,0 +1,148 @@
+锘�<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+            xmlns:pw="https://opensource.panuon.com/wpf"
+            xmlns:pu="https://opensource.panuon.com/wpf-ui">
+
+    <ResourceDictionary.MergedDictionaries>
+        <pu:StyleDictionary Includes="TextBox,ComboBox,Button" />
+    </ResourceDictionary.MergedDictionaries>
+
+    <Style x:Key="ModalButton" TargetType="Button" BasedOn="{StaticResource {x:Static pu:WindowXModalDialog.ButtonStyleKey}}">
+        <Setter Property="pu:ButtonHelper.PendingSpinStyle">
+            <Setter.Value>
+                <Style TargetType="pu:Spin" BasedOn="{StaticResource {x:Static pu:ButtonHelper.PendingSpinStyleKey}}">
+                    <Setter Property="SpinStyle" Value="Ring2" />
+                </Style>
+            </Setter.Value>
+        </Setter>
+        <Style.Triggers>
+            <Trigger Property="pu:ButtonHelper.IsPending" Value="True">
+                <Setter Property="pu:ButtonHelper.ClickEffect" Value="Shake" />
+                <Setter Property="ContentTemplate">
+                    <Setter.Value>
+                        <DataTemplate>
+                            <TextBlock Text="璇风◢鍚�..." />
+                        </DataTemplate>
+                    </Setter.Value>
+                </Setter>
+            </Trigger>
+            <Trigger Property="Tag" Value="OK">
+                <Setter Property="Background" Value="{StaticResource PrimaryColor}" />
+                <Setter Property="Foreground" Value="{StaticResource PrimaryColorContract}" />
+                <Setter Property="Padding" Value="20,0" />
+                <Setter Property="Height" Value="35" />
+            </Trigger>
+            <Trigger Property="Tag" Value="Cancel">
+                <Setter Property="Background" Value="{x:Null}" />
+                <Setter Property="Foreground" Value="Gray" />
+                <Setter Property="Cursor" Value="Hand" />
+                <Setter Property="Padding" Value="10,0" />
+                <Setter Property="ContentTemplate">
+                    <Setter.Value>
+                        <DataTemplate>
+                            <TextBlock Text="{Binding}" TextDecorations="Underline" />
+                        </DataTemplate>
+                    </Setter.Value>
+                </Setter>
+            </Trigger>
+        </Style.Triggers>
+    </Style>
+
+
+    <Style x:Key="SearchButton" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
+        <Setter Property="pu:ButtonHelper.CornerRadius" Value="0" />
+        <Setter Property="Background" Value="{StaticResource PrimaryColor}" />
+        <Setter Property="Foreground" Value="{StaticResource PrimaryColorContract}" />
+        <Setter Property="FontFamily" Value="{StaticResource iconfont}" />
+        <Setter Property="Height" Value="35" />
+        <Setter Property="Content" Value="&#xe752;"/>
+        <Setter Property="pu:ButtonHelper.PendingSpinStyle">
+            <Setter.Value>
+                <Style TargetType="pu:Spin" BasedOn="{StaticResource {x:Static pu:ButtonHelper.PendingSpinStyleKey}}">
+                    <Setter Property="SpinStyle" Value="Ring2" />
+                </Style>
+            </Setter.Value>
+        </Setter>
+        <Style.Triggers>
+            <Trigger Property="pu:ButtonHelper.IsPending" Value="True">
+                <Setter Property="pu:ButtonHelper.ClickEffect" Value="Shake" />
+                <Setter Property="ContentTemplate">
+                    <Setter.Value>
+                        <DataTemplate>
+                            <TextBlock Text="Click again ?" />
+                        </DataTemplate>
+                    </Setter.Value>
+                </Setter>
+            </Trigger>
+        </Style.Triggers>
+    </Style>
+
+    <Style x:Key="EditorTextBoxStyle" TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
+        <Setter Property="pu:TextBoxHelper.FocusedBorderBrush" Value="#6CBCEA" />
+        <Setter Property="pu:TextBoxHelper.FocusedShadowColor" Value="#6CBCEA" />
+        <Setter Property="pu:TextBoxHelper.CornerRadius" Value="0" />
+        <Setter Property="pu:TextBoxHelper.WatermarkForeground" Value="#4A4A4A" />
+        <Setter Property="pu:TextBoxHelper.FocusedWatermarkForeground" Value="#AAAAAA" />
+        <Setter Property="Height" Value="35" />
+        <Setter Property="Padding" Value="5,0" />
+        <Setter Property="Background" Value="Transparent" />
+        <Setter Property="Foreground" Value="Black" />
+        <Setter Property="VerticalContentAlignment" Value="Center"/>
+        <Style.Triggers>
+            <Trigger Property="IsReadOnly" Value="True">
+                <Setter Property="Background" Value="LightGray"/>
+            </Trigger>
+        </Style.Triggers>
+    </Style>
+
+    <Style x:Key="MultilineEditorTextBoxStyle" TargetType="TextBox" BasedOn="{StaticResource EditorTextBoxStyle}">
+        <Setter Property="Height" Value="100" />
+        <Setter Property="Padding" Value="5,10" />
+        <Setter Property="AcceptsReturn" Value="True" />
+        <Setter Property="TextWrapping" Value="Wrap" />
+        <Setter Property="VerticalContentAlignment" Value="Top" />
+    </Style>
+
+    <Style x:Key="InputFormGroupStyle" TargetType="pu:FormGroup">
+        <Style.Resources>
+            <Style TargetType="TextBox" BasedOn="{StaticResource EditorTextBoxStyle}">
+                
+            </Style>
+        </Style.Resources>
+        <Setter Property="HeaderWidth" Value="70" />
+        <Setter Property="HeaderHeight" Value="35" />
+        <Setter Property="Orientation" Value="Horizontal" />
+        <Setter Property="Margin" Value="0,10,0,0" />
+    </Style>
+
+    <Style x:Key="RequiredInputFormGroupStyle" TargetType="pu:FormGroup" BasedOn="{StaticResource InputFormGroupStyle}">
+        <Setter Property="HeaderTemplate">
+            <Setter.Value>
+                <DataTemplate>
+                    <StackPanel Orientation="Horizontal">
+                        <TextBlock Text="*" Foreground="Red" />
+                        <ContentControl Content="{Binding}" />
+                    </StackPanel>
+                </DataTemplate>
+            </Setter.Value>
+        </Setter>
+    </Style>
+
+    <Style x:Key="FormComboxStyle" TargetType="ComboBox" BasedOn="{StaticResource {x:Type ComboBox}}">
+        <Setter Property="pu:ComboBoxHelper.CornerRadius" Value="0"/>
+        <Setter Property="pu:ComboBoxHelper.ItemsHoverBackground" Value="{StaticResource WindowBar}"/>
+        <Setter Property="pu:ComboBoxHelper.ItemsHoverForeground" Value="#FFF"/>
+        <Setter Property="pu:ComboBoxHelper.ItemsSelectedForeground" Value="Black"/>
+        <Setter Property="pu:ComboBoxHelper.HoverBorderBrush" Value="#007ACC" />
+        <Setter Property="pu:ComboBoxHelper.FocusedBorderBrush" Value="#007ACC" />
+        <Setter Property="Height" Value="35" />
+        <Setter Property="Margin" Value="0" />
+        <Setter Property="Background" Value="#FFF" />
+        <Setter Property="VerticalContentAlignment" Value="Center"/>
+        <Setter Property="VerticalAlignment" Value="Center"/>
+        <Setter Property="HorizontalContentAlignment" Value="Left"/>
+        <Setter Property="HorizontalAlignment" Value="Stretch"/>
+        <Setter Property="Foreground" Value="Black" />
+        <Setter Property="SelectedValuePath" Value="Content"/>
+    </Style>
+</ResourceDictionary>
\ No newline at end of file
diff --git a/HMI.UI/Style/MsgBoxStyle.xaml b/HMI.UI/Style/MsgBoxStyle.xaml
new file mode 100644
index 0000000..f782ed6
--- /dev/null
+++ b/HMI.UI/Style/MsgBoxStyle.xaml
@@ -0,0 +1,133 @@
+锘�<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+                     xmlns:pw="https://opensource.panuon.com/wpf"
+                        xmlns:pu="https://opensource.panuon.com/wpf-ui"
+                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+xmlns:puconfig="clr-namespace:Panuon.WPF.UI.Configurations;assembly=Panuon.WPF.UI">
+
+    <pu:MessageBoxXSettings x:Key="MsgBoxWarn" 
+                                 InteropOwnersMask="True"
+                                 InverseButtonsSequence="False">
+        <pu:MessageBoxXSettings.WindowXStyle>
+            <Style TargetType="pu:WindowX" BasedOn="{StaticResource {x:Static pu:MessageBoxX.WindowXStyleKey}}">
+                <Setter Property="pu:WindowXCaption.Background" Value="{StaticResource WarningColor}" />
+                <Setter Property="pu:WindowXCaption.Foreground" Value="{StaticResource WarningColorContract}" />
+            </Style>
+        </pu:MessageBoxXSettings.WindowXStyle>
+
+        <pu:MessageBoxXSettings.ButtonStyle>
+            <Style TargetType="Button" BasedOn="{StaticResource {x:Static pu:MessageBoxX.ButtonStyleKey}}">
+
+                <Style.Triggers>
+                    <Trigger Property="Tag" Value="OK">
+                        <Setter Property="Foreground" Value="{StaticResource WarningColorContract}" />
+                        <Setter Property="Background" Value="{StaticResource WarningColor}" />
+                    </Trigger>
+
+                    <Trigger Property="Tag" Value="Cancel">
+                        <Setter Property="Background" Value="{x:Null}" />
+                        <Setter Property="Foreground" Value="Gray" />
+                        <Setter Property="Cursor" Value="Hand" />
+                        <Setter Property="ContentTemplate">
+                            <Setter.Value>
+                                <DataTemplate>
+                                    <TextBlock Text="{Binding}" TextDecorations="Underline" />
+                                </DataTemplate>
+                            </Setter.Value>
+                        </Setter>
+                    </Trigger>
+                </Style.Triggers>
+            </Style>
+        </pu:MessageBoxXSettings.ButtonStyle>
+    </pu:MessageBoxXSettings>
+
+    <pu:MessageBoxXSettings x:Key="MsgBoxError" 
+                             InteropOwnersMask="True"
+                             InverseButtonsSequence="False">
+        <pu:MessageBoxXSettings.WindowXStyle>
+            <Style TargetType="pu:WindowX" BasedOn="{StaticResource {x:Static pu:MessageBoxX.WindowXStyleKey}}">
+                <Setter Property="pu:WindowXCaption.Background" Value="{StaticResource DangerColor}" />
+                <Setter Property="pu:WindowXCaption.Foreground" Value="{StaticResource DangerColorContrast}" />
+            </Style>
+        </pu:MessageBoxXSettings.WindowXStyle>
+
+        <pu:MessageBoxXSettings.ButtonStyle>
+            <Style TargetType="Button" BasedOn="{StaticResource {x:Static pu:MessageBoxX.ButtonStyleKey}}">
+
+                <Style.Triggers>
+                    <Trigger Property="Tag" Value="OK">
+                        <Setter Property="Foreground" Value="{StaticResource DangerColorContrast}" />
+                        <Setter Property="Background" Value="{StaticResource DangerColor}" />
+                    </Trigger>
+
+                    <Trigger Property="Tag" Value="Cancel">
+                        <Setter Property="Background" Value="{x:Null}" />
+                        <Setter Property="Foreground" Value="Gray" />
+                        <Setter Property="Cursor" Value="Hand" />
+                        <Setter Property="ContentTemplate">
+                            <Setter.Value>
+                                <DataTemplate>
+                                    <TextBlock Text="{Binding}" TextDecorations="Underline" />
+                                </DataTemplate>
+                            </Setter.Value>
+                        </Setter>
+                    </Trigger>
+                </Style.Triggers>
+            </Style>
+        </pu:MessageBoxXSettings.ButtonStyle>
+    </pu:MessageBoxXSettings>
+
+    <pu:MessageBoxXSettings x:Key="MsgBoxInfo" 
+                             InteropOwnersMask="True"
+                             InverseButtonsSequence="False">
+        <pu:MessageBoxXSettings.WindowXStyle>
+            <Style TargetType="pu:WindowX" BasedOn="{StaticResource {x:Static pu:MessageBoxX.WindowXStyleKey}}">
+                <Setter Property="pu:WindowXCaption.Background" Value="{StaticResource PrimaryColor}" />
+                <Setter Property="pu:WindowXCaption.Foreground" Value="{StaticResource PrimaryColorContract}" />
+            </Style>
+        </pu:MessageBoxXSettings.WindowXStyle>
+
+        <pu:MessageBoxXSettings.ButtonStyle>
+            <Style TargetType="Button" BasedOn="{StaticResource {x:Static pu:MessageBoxX.ButtonStyleKey}}">
+
+                <Style.Triggers>
+                    <Trigger Property="Tag" Value="OK">
+                        <Setter Property="Foreground" Value="{StaticResource PrimaryColorContract}" />
+                        <Setter Property="Background" Value="{StaticResource PrimaryColor}" />
+                    </Trigger>
+
+                    <Trigger Property="Tag" Value="Cancel">
+                        <Setter Property="Background" Value="{x:Null}" />
+                        <Setter Property="Foreground" Value="Gray" />
+                        <Setter Property="Cursor" Value="Hand" />
+                        <Setter Property="ContentTemplate">
+                            <Setter.Value>
+                                <DataTemplate>
+                                    <TextBlock Text="{Binding}" TextDecorations="Underline" />
+                                </DataTemplate>
+                            </Setter.Value>
+                        </Setter>
+                    </Trigger>
+                </Style.Triggers>
+            </Style>
+        </pu:MessageBoxXSettings.ButtonStyle>
+    </pu:MessageBoxXSettings>
+
+    <pu:ToastSettings x:Key="toastSuccess" Spacing="25">
+        <pu:ToastSettings.LabelStyle>
+            <Style TargetType="Label" BasedOn="{StaticResource {x:Static pu:Toast.LabelStyleKey}}">
+                <Setter Property="Background" Value="{StaticResource SuccessColor}" />
+                <Setter Property="Foreground" Value="{StaticResource SuccessColorContrast}" />
+            </Style>
+        </pu:ToastSettings.LabelStyle>
+    </pu:ToastSettings>
+
+    <pu:ToastSettings x:Key="toastWarning" Spacing="25">
+        <pu:ToastSettings.LabelStyle>
+            <Style TargetType="Label" BasedOn="{StaticResource {x:Static pu:Toast.LabelStyleKey}}">
+                <Setter Property="Background" Value="{StaticResource WarningColor}" />
+                <Setter Property="Foreground" Value="{StaticResource SuccessColorContrast}" />
+            </Style>
+        </pu:ToastSettings.LabelStyle>
+    </pu:ToastSettings>
+
+</ResourceDictionary>
\ No newline at end of file
diff --git a/HMI.UI/Style/PanuonResource.xaml b/HMI.UI/Style/PanuonResource.xaml
new file mode 100644
index 0000000..18b061f
--- /dev/null
+++ b/HMI.UI/Style/PanuonResource.xaml
@@ -0,0 +1,133 @@
+锘�<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+                    xmlns:ui="clr-namespace:HMI.UI"
+                    xmlns:sys="clr-namespace:System;assembly=mscorlib"
+                    xmlns:pw="https://opensource.panuon.com/wpf"
+                    xmlns:pu="https://opensource.panuon.com/wpf-ui"
+             xmlns:dp="clr-namespace:HMI.UI;assembly=HMI.UI">
+    <ResourceDictionary.MergedDictionaries>
+        <ResourceDictionary Source="/HMI.UI;component/Style/Colors.xaml"/>
+        <pu:StyleDictionary Includes="TextBox,ComboBox,Button,DataGrid,TreeView" />
+        <ResourceDictionary Source="/HMI.UI;component/Resources/Font/Font.xaml"/>
+    </ResourceDictionary.MergedDictionaries>
+
+    <sys:Double x:Key="TitleFontSize">20</sys:Double>
+    <sys:Double x:Key="ContentFontSize">16</sys:Double>
+
+    <Style x:Key="PrimaryButton" TargetType="Button" BasedOn="{StaticResource {x:Static pu:StyleKeys.ButtonStyle}}">
+        <Setter Property="Background" Value="{StaticResource WindowBar}"/>
+        <Setter Property="Foreground" Value="#FFF"/>
+        <Setter Property="pu:IconHelper.FontFamily" Value="{StaticResource iconfont}"/>
+        <Setter Property="pu:IconHelper.Margin" Value="0,0,10,0"/>
+        <Setter Property="Padding" Value="10"/>
+        <Setter Property="BorderThickness" Value="0"/>
+        <Setter Property="Cursor" Value="Hand"/>
+    </Style>
+
+    <Style x:Key="CommonButton" TargetType="Button" BasedOn="{StaticResource PrimaryButton}">
+        <Setter Property="Background" Value="#FFF"/>
+        <Setter Property="Foreground" Value="Black"/>
+        <Setter Property="BorderBrush" Value="LightGray"/>
+    </Style>
+
+    <Style x:Key="DangerButton" TargetType="Button" BasedOn="{StaticResource PrimaryButton}">
+        <Setter Property="Background" Value="{StaticResource DangerColor}"/>
+        <Setter Property="Foreground" Value="{StaticResource DangerColorContrast}"/>
+    </Style>
+
+    <Style x:Key="LinkButton" TargetType="Button" BasedOn="{StaticResource {x:Static pu:StyleKeys.ButtonStyle}}">
+        <Setter Property="Background" Value="{x:Null}" />
+        <Setter Property="Foreground" Value="{StaticResource PrimaryColor}" />
+        <Setter Property="Cursor" Value="Hand" />
+        <Setter Property="ContentTemplate">
+            <Setter.Value>
+                <DataTemplate>
+                    <TextBlock Text="{Binding}" TextDecorations="Underline" />
+                </DataTemplate>
+            </Setter.Value>
+        </Setter>
+    </Style>
+
+    <Style x:Key="DangerLinkButton" TargetType="Button" BasedOn="{StaticResource LinkButton}">
+        <Setter Property="Foreground" Value="{StaticResource DangerColor}"/>
+    </Style>
+
+    <Style x:Key="CardBoarder" TargetType="Border">
+        <Setter Property="BorderBrush" Value="{StaticResource CommonBoarder}"/>
+        <Setter Property="BorderThickness" Value="2"/>
+        <Setter Property="Background" Value="#FFF"/>
+        <Setter Property="Margin" Value="10"/>
+        <Setter Property="Padding" Value="10"/>
+    </Style>
+
+    <Style x:Key="DefaultDataGrid" TargetType="DataGrid" BasedOn="{StaticResource {x:Static pu:StyleKeys.DataGridStyle}}">
+        <Style.Resources>
+            <Style TargetType="DataGridCell" 
+                   BasedOn="{StaticResource {x:Static pu:StyleKeys.DataGridCellStyle}}">
+                <Setter Property="Background" Value="Transparent"/>
+                <Setter Property="Padding" Value="0"/>
+                <Setter Property="BorderThickness" Value="0"/>
+                <Setter Property="VerticalAlignment" Value="Stretch"/>
+                <Setter Property="Background" Value="Transparent"/>
+            </Style>
+            <Style TargetType="TextBlock">
+                <Setter Property="VerticalAlignment" Value="Center"/>
+            </Style>
+        </Style.Resources>
+
+        <Setter Property="pu:DataGridHelper.ColumnHeaderBackground" Value="{StaticResource TableHeaderBackground}"/>
+        <Setter Property="pu:DataGridHelper.ColumnHeaderHoverBackground" Value="{StaticResource TableHeaderBackground}"/>
+        <Setter Property="pu:DataGridHelper.ColumnHeaderSeparatorBrush" Value="{StaticResource TableBoarder}"/>
+        <Setter Property="pu:DataGridHelper.ColumnHeaderSeparatorVisibility" Value="Visible"/>
+        <Setter Property="pu:DataGridHelper.ColumnHeaderVerticalContentAlignment" Value="Center"/>
+        <Setter Property="pu:DataGridHelper.RowHeaderBackground" Value="#ffffff"/>
+        <Setter Property="pu:DataGridHelper.RowHeaderSeparatorBrush" Value="{StaticResource PrimaryColor}"/>
+        <Setter Property="pu:DataGridHelper.RowHoverForeground" Value="{StaticResource SecondPrimaryColorContract}"/>
+        <Setter Property="pu:DataGridHelper.RowHoverBackground" Value="{StaticResource SecondPrimaryColor}"/>
+        <Setter Property="pu:DataGridHelper.RowSelectedBackground" Value="{StaticResource PrimaryColor}"/>
+        <Setter Property="pu:DataGridHelper.RowSelectedForeground" Value="#ffffff"/>
+        <Setter Property="HorizontalGridLinesBrush" Value="{StaticResource TableBoarder}"/>
+        <Setter Property="VerticalGridLinesBrush" Value="{StaticResource TableBoarder}"/>
+        <Setter Property="BorderBrush" Value="{StaticResource TableBoarder}" />
+        <Setter Property="AutoGenerateColumns" Value="False"/>
+        <Setter Property="CanUserAddRows" Value="False"/>
+        <Setter Property="CanUserSortColumns" Value="False"/>
+        <Setter Property="CanUserDeleteRows" Value="False"/>
+        <Setter Property="RowHeaderWidth" Value="0"/>
+        <Setter Property="IsReadOnly" Value="True"/>
+        <Setter Property="GridLinesVisibility" Value="All"/>
+        <Setter Property="BorderThickness" Value="1,1,0,0"/>
+        <Setter Property="FontSize" Value="{StaticResource ContentFontSize}"/>
+        <Setter Property="RowHeight" Value="24"/>
+        <Setter Property="ForceCursor" Value="True"/>
+        <Setter Property="SelectionMode" Value="Single"/>
+    </Style>
+
+    <Style x:Key="DefaultTreeView" TargetType="TreeView" BasedOn="{StaticResource {x:Static pu:StyleKeys.TreeViewStyle}}">
+        <Setter Property="pu:TreeViewHelper.ItemsHoverBackground" Value="{StaticResource SecondPrimaryColor}"/>
+        <Setter Property="pu:TreeViewHelper.ItemsHoverForeground" Value="{StaticResource SecondPrimaryColorContract}"/>
+        <Setter Property="pu:TreeViewHelper.ItemsSelectedBackground" Value="{StaticResource PrimaryColor}"/>
+        <Setter Property="pu:TreeViewHelper.ItemsSelectedForeground" Value="{StaticResource PrimaryColorContract}"/>
+        <Setter Property="pu:TreeViewHelper.ItemsMargin" Value="0"/>
+        <Setter Property="pu:TreeViewHelper.ItemsPadding" Value="7,5,7,5"/>
+        <Setter Property="dp:TreeViewHelper.AutoExpand" Value="True"/>
+        <Setter Property="FontSize" Value="{StaticResource ContentFontSize}"/>
+        <Setter Property="Background" Value="Transparent"/>
+        <Setter Property="BorderThickness" Value="0"/>
+    </Style>
+
+    <Style x:Key="RowLink" TargetType="Button" BasedOn="{StaticResource LinkButton}">
+        <Style.Triggers>
+            <DataTrigger Binding="{Binding Path=IsMouseOver,
+                RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}" 
+         Value="True">
+                <Setter Property="Foreground" Value="#FFF"/>
+            </DataTrigger>
+            <DataTrigger Binding="{Binding Path=IsSelected,
+       RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}" 
+Value="True">
+                <Setter Property="Foreground" Value="#FFF"/>
+            </DataTrigger>
+        </Style.Triggers>
+    </Style>
+</ResourceDictionary>
\ No newline at end of file
diff --git a/WPFProject/Style/WindowResources.xaml b/HMI.UI/Style/WindowResources.xaml
similarity index 77%
rename from WPFProject/Style/WindowResources.xaml
rename to HMI.UI/Style/WindowResources.xaml
index b1c0574..46d1925 100644
--- a/WPFProject/Style/WindowResources.xaml
+++ b/HMI.UI/Style/WindowResources.xaml
@@ -1,15 +1,15 @@
 锘�<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-                    xmlns:ctls="clr-namespace:WPFProject.Controls"
+                    xmlns:ui="clr-namespace:HMI.UI"
                     >
     <ResourceDictionary.MergedDictionaries>
-        <ResourceDictionary Source="/WPFProject;component/Style/Colors.xaml"/>
-        <ResourceDictionary Source="/WPFProject;component/Resources/Font/Font.xaml"/>
+        <ResourceDictionary Source="/HMI.UI;component/Style/Colors.xaml"/>
+        <ResourceDictionary Source="/HMI.UI;component/Resources/Font/Font.xaml"/>
     </ResourceDictionary.MergedDictionaries>
 
     <Style x:Key="WindowButton" TargetType="Button">
         <Setter Property="Background" Value="{StaticResource MainBorder}"/>
-        <Setter Property="ctls:DpPlugin.HoverColor" Value="{StaticResource ChildBorder}"/>
+        <Setter Property="ui:DpPlugin.HoverColor" Value="{StaticResource ChildBorder}"/>
         <Setter Property="FontFamily" Value="{StaticResource iconfont}"/>
         <Setter Property="FontWeight" Value="SemiBold"/>
         <Setter Property="Foreground" Value="White"/>
@@ -17,8 +17,9 @@
         <Setter Property="FontSize" Value="20"/>
         <Setter Property="BorderThickness" Value="0"/>
         <Setter Property="BorderBrush" Value="Transparent"/>
-        
-        
+        <Setter Property="Cursor" Value="Hand"/>
+        <Setter Property="WindowChrome.IsHitTestVisibleInChrome" Value="True"/>
+
         <Setter Property="Template">
             <Setter.Value>
                 <ControlTemplate TargetType="Button">
@@ -33,7 +34,7 @@
                     <ControlTemplate.Triggers>
                         <Trigger Property="IsMouseOver" Value="True">
                             <Setter TargetName="border" Property="Background" Value="{Binding 
-                                Path=(ctls:DpPlugin.HoverColor),RelativeSource={RelativeSource TemplatedParent}}"/>
+                                Path=(ui:DpPlugin.HoverColor),RelativeSource={RelativeSource TemplatedParent}}"/>
                         </Trigger>
                     </ControlTemplate.Triggers>
                 </ControlTemplate>
@@ -42,22 +43,22 @@
     </Style>
 
     <Style x:Key="WindowCloseButton" BasedOn="{StaticResource WindowButton}" TargetType="Button">
-        <Setter Property="ctls:DpPlugin.HoverColor" Value="Red"/>
+        <Setter Property="ui:DpPlugin.HoverColor" Value="Red"/>
     </Style>
 
     <Style x:Key="ChildWindowButton" BasedOn="{StaticResource WindowButton}" TargetType="Button">
         <Setter Property="FontSize" Value="15"/>
         <Setter Property="Width" Value="30"/>
         <Setter Property="Background" Value="{StaticResource ChildBorder}"/>
-        <Setter Property="ctls:DpPlugin.HoverColor" Value="{StaticResource MainBorder}"/>
+        <Setter Property="ui:DpPlugin.HoverColor" Value="{StaticResource MainBorder}"/>
     </Style>
 
     <Style x:Key="ChildWindowCloseButton" BasedOn="{StaticResource ChildWindowButton}" TargetType="Button">
-        <Setter Property="ctls:DpPlugin.HoverColor" Value="Red"/>
+        <Setter Property="ui:DpPlugin.HoverColor" Value="Red"/>
     </Style>
 
     <Style x:Key="LinkButton" TargetType="Button">
-        <Setter Property="ctls:DpPlugin.HoverColor" Value="{StaticResource ChildBorder}"/>
+        <Setter Property="ui:DpPlugin.HoverColor" Value="{StaticResource ChildBorder}"/>
         <Setter Property="FontFamily" Value="{StaticResource iconfont}"/>
         <Setter Property="Foreground" Value="{StaticResource ChildBorder}"/>
 
@@ -71,12 +72,11 @@
                     <ControlTemplate.Triggers>
                         <Trigger Property="IsMouseOver" Value="True">
                             <Setter TargetName="label" Property="Foreground" Value="{Binding 
-                                Path=(ctls:DpPlugin.HoverColor),RelativeSource={RelativeSource TemplatedParent}}"/>
+                                Path=(ui:DpPlugin.HoverColor),RelativeSource={RelativeSource TemplatedParent}}"/>
                         </Trigger>
                     </ControlTemplate.Triggers>
                 </ControlTemplate>
             </Setter.Value>
         </Setter>
     </Style>
-
 </ResourceDictionary>
\ No newline at end of file
diff --git a/HMI.UI/Util/IValueValidator.cs b/HMI.UI/Util/IValueValidator.cs
new file mode 100644
index 0000000..e93d76d
--- /dev/null
+++ b/HMI.UI/Util/IValueValidator.cs
@@ -0,0 +1,7 @@
+锘縩amespace HMI.UI.Util
+{
+    public interface IValueValidator
+    {
+        bool Validate(object input);
+    }
+}
diff --git a/HMI.UI/Util/MsgBoxHelper.cs b/HMI.UI/Util/MsgBoxHelper.cs
new file mode 100644
index 0000000..2f0e3df
--- /dev/null
+++ b/HMI.UI/Util/MsgBoxHelper.cs
@@ -0,0 +1,48 @@
+锘縰sing Panuon.WPF.UI;
+using System.Windows;
+using Panuon.WPF.UI.Configurations;
+
+namespace HMI.UI.Util
+{
+    public class MsgBoxHelper
+    {
+        #region Warn
+        public static MessageBoxResult WarnMessage(Window owner,
+            string message,
+            string caption = "璀﹀憡",
+            MessageBoxButton button = MessageBoxButton.OKCancel,
+            MessageBoxIcon icon = MessageBoxIcon.Warning,
+            DefaultButton defaultButton = DefaultButton.Unset, int? countdown = null)
+        {
+            var setting = Application.Current.FindResource("MsgBoxWarn") as MessageBoxXSetting;
+            return MessageBoxX.Show(owner, message, caption, button, icon, defaultButton, setting, countdown);
+        }
+        #endregion
+
+        #region Error
+        public static MessageBoxResult ErrorMessage(Window owner,
+            string message,
+            string caption = "閿欒",
+            MessageBoxButton button = MessageBoxButton.OKCancel,
+            MessageBoxIcon icon = MessageBoxIcon.Error,
+            DefaultButton defaultButton = DefaultButton.Unset, int? countdown = null)
+        {
+            var setting = Application.Current.FindResource("MsgBoxError") as MessageBoxXSetting;
+            return MessageBoxX.Show(owner, message, caption, button, icon, defaultButton, setting, countdown);
+        }
+        #endregion
+
+        #region Info
+        public static MessageBoxResult InfoMessage(Window owner,
+            string message,
+            string caption = "鎻愮ず",
+            MessageBoxButton button = MessageBoxButton.OKCancel,
+            MessageBoxIcon icon = MessageBoxIcon.Info,
+            DefaultButton defaultButton = DefaultButton.Unset, int? countdown = null)
+        {
+            var setting = Application.Current.FindResource("MsgBoxInfo") as MessageBoxXSetting;
+            return MessageBoxX.Show(owner, message, caption, button, icon, defaultButton, setting, countdown);
+        }
+        #endregion
+    }
+}
diff --git a/HMI.UI/Util/ToastHelper.cs b/HMI.UI/Util/ToastHelper.cs
new file mode 100644
index 0000000..7f32e02
--- /dev/null
+++ b/HMI.UI/Util/ToastHelper.cs
@@ -0,0 +1,48 @@
+锘縰sing Panuon.WPF.UI;
+using System.Windows;
+
+namespace HMI.UI.Util
+{
+    public interface ToastHandler
+    {
+        void Success(Window window,
+                string message,
+                MessageBoxIcon icon,
+                ToastPosition position, double offset, int durationMs,
+                ToastWindow targetWindow);
+
+        void Warning(Window window,
+                string message,
+                MessageBoxIcon icon,
+                ToastPosition position, double offset, int durationMs,
+                ToastWindow targetWindow);
+    }
+
+    public class ToastHelper
+    {
+        private static ToastHandler Instance;
+
+        public static void Register(ToastHandler helper)
+        {
+            if (Instance == null) { Instance = helper; }
+        }
+
+        public static void Success(Window window,
+            string message,
+            MessageBoxIcon icon = MessageBoxIcon.Success,
+            ToastPosition position = ToastPosition.Top, double offset = 0, int durationMs = 3000,
+            ToastWindow targetWindow = ToastWindow.ActiveWindow)
+        {
+            Instance.Success(window, message, icon, position, offset, durationMs, targetWindow);
+        }
+
+        public static void Warning(Window window,
+            string message,
+            MessageBoxIcon icon = MessageBoxIcon.Warning,
+            ToastPosition position = ToastPosition.Top, double offset = 0, int durationMs = 3000,
+            ToastWindow targetWindow = ToastWindow.ActiveWindow)
+        {
+            Instance.Warning(window, message, icon, position, offset, durationMs, targetWindow);
+        }
+    }
+}
diff --git a/HMI.UI/packages.config b/HMI.UI/packages.config
new file mode 100644
index 0000000..46ff1b7
--- /dev/null
+++ b/HMI.UI/packages.config
@@ -0,0 +1,5 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="Panuon.WPF" version="1.1.2.2" targetFramework="net472" />
+  <package id="Panuon.WPF.UI" version="1.2.4.9" targetFramework="net472" />
+</packages>
\ No newline at end of file
diff --git a/HMI.UnitTest/App.config b/HMI.UnitTest/App.config
new file mode 100644
index 0000000..56efbc7
--- /dev/null
+++ b/HMI.UnitTest/App.config
@@ -0,0 +1,6 @@
+锘�<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
+    </startup>
+</configuration>
\ No newline at end of file
diff --git a/HMI.UnitTest/App.xaml b/HMI.UnitTest/App.xaml
new file mode 100644
index 0000000..0976a73
--- /dev/null
+++ b/HMI.UnitTest/App.xaml
@@ -0,0 +1,16 @@
+锘�<Application x:Class="UnitTest.App"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:local="clr-namespace:UnitTest"
+            xmlns:pw="https://opensource.panuon.com/wpf"
+            xmlns:pu="https://opensource.panuon.com/wpf-ui"
+             StartupUri="MainWindow.xaml">
+    <Application.Resources>
+        <ResourceDictionary>
+            <ResourceDictionary.MergedDictionaries>
+                <ResourceDictionary Source="/HMI.UI;component/Style/FormStyle.xaml"/>
+            </ResourceDictionary.MergedDictionaries>
+            <Style TargetType="{x:Type pu:FormGroup}" BasedOn="{StaticResource InputFormGroupStyle}"></Style>
+        </ResourceDictionary>
+    </Application.Resources>
+</Application>
diff --git a/HMI.UnitTest/App.xaml.cs b/HMI.UnitTest/App.xaml.cs
new file mode 100644
index 0000000..44777f2
--- /dev/null
+++ b/HMI.UnitTest/App.xaml.cs
@@ -0,0 +1,17 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace UnitTest
+{
+    /// <summary>
+    /// App.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class App : Application
+    {
+    }
+}
diff --git a/HMI.UnitTest/HMI.UnitTest.csproj b/HMI.UnitTest/HMI.UnitTest.csproj
new file mode 100644
index 0000000..f91baeb
--- /dev/null
+++ b/HMI.UnitTest/HMI.UnitTest.csproj
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{325A7F52-FE51-44F0-B3AC-5F42F5356605}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <RootNamespace>HMI.UnitTest</RootNamespace>
+    <AssemblyName>HMI.UnitTest</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <WarningLevel>4</WarningLevel>
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <Prefer32Bit>true</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <Prefer32Bit>true</Prefer32Bit>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="log4net, Version=3.0.3.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\log4net.3.0.3\lib\net462\log4net.dll</HintPath>
+    </Reference>
+    <Reference Include="Panuon.WPF, Version=1.1.2.2, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\Panuon.WPF.1.1.2.2\lib\net472\Panuon.WPF.dll</HintPath>
+    </Reference>
+    <Reference Include="Panuon.WPF.UI, Version=1.2.4.8, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\Panuon.WPF.UI.1.2.4.9\lib\net472\Panuon.WPF.UI.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Web" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xaml">
+      <RequiredTargetFramework>4.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="WindowsBase" />
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+  </ItemGroup>
+  <ItemGroup>
+    <ApplicationDefinition Include="App.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </ApplicationDefinition>
+    <Page Include="MainWindow.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Compile Include="App.xaml.cs">
+      <DependentUpon>App.xaml</DependentUpon>
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="MainWindow.xaml.cs">
+      <DependentUpon>MainWindow.xaml</DependentUpon>
+      <SubType>Code</SubType>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <None Include="packages.config" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HMI.Core\HMI.Core.csproj">
+      <Project>{3e3bf44a-0b69-45c5-9512-528cb48a7106}</Project>
+      <Name>HMI.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HMI.SettingControl\HMI.SettingControl.csproj">
+      <Project>{3dd748ac-9708-49ad-b846-659214035588}</Project>
+      <Name>HMI.SettingControl</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HMI.UI\HMI.UI.csproj">
+      <Project>{f17de6b5-af1d-48c6-94a0-6b763a6546a6}</Project>
+      <Name>HMI.UI</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/HMI.UnitTest/MainWindow.xaml b/HMI.UnitTest/MainWindow.xaml
new file mode 100644
index 0000000..cab718c
--- /dev/null
+++ b/HMI.UnitTest/MainWindow.xaml
@@ -0,0 +1,12 @@
+锘�<Window x:Class="UnitTest.MainWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:UnitTest"
+        mc:Ignorable="d"
+        Title="MainWindow" Height="450" Width="800">
+    <Grid x:Name="page">
+        
+    </Grid>
+</Window>
diff --git a/HMI.UnitTest/MainWindow.xaml.cs b/HMI.UnitTest/MainWindow.xaml.cs
new file mode 100644
index 0000000..ba897eb
--- /dev/null
+++ b/HMI.UnitTest/MainWindow.xaml.cs
@@ -0,0 +1,31 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using HMI.SettingControl;
+
+namespace UnitTest
+{
+    /// <summary>
+    /// MainWindow.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class MainWindow : Window
+    {
+        public MainWindow()
+        {
+            InitializeComponent();
+            page.Children.Clear();
+            page.Children.Add(new SettingControl());
+        }
+    }
+}
diff --git a/HMI.UnitTest/Properties/AssemblyInfo.cs b/HMI.UnitTest/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..dd3535f
--- /dev/null
+++ b/HMI.UnitTest/Properties/AssemblyInfo.cs
@@ -0,0 +1,52 @@
+锘縰sing System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
+[assembly: AssemblyTitle("UnitTest")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Organization")]
+[assembly: AssemblyProduct("UnitTest")]
+[assembly: AssemblyCopyright("Copyright 漏 Organization 2025")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏� ComVisible 璁剧疆涓� false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵� COM 缁勪欢涓嶅彲瑙併�傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�ц缃负 true銆�
+[assembly: ComVisible(false)]
+
+//鑻ヨ寮�濮嬬敓鎴愬彲鏈湴鍖栫殑搴旂敤绋嬪簭锛岃璁剧疆
+//.csproj 鏂囦欢涓殑 <UICulture>CultureYouAreCodingWith</UICulture>
+//鍦� <PropertyGroup> 涓�備緥濡傦紝濡傛灉浣犱娇鐢ㄧ殑鏄編鍥借嫳璇��
+//浣跨敤鐨勬槸缇庡浗鑻辫锛岃灏� <UICulture> 璁剧疆涓� en-US銆�  鐒跺悗鍙栨秷
+//瀵逛互涓� NeutralResourceLanguage 鐗规�х殑娉ㄩ噴銆�  鏇存柊
+//浠ヤ笅琛屼腑鐨勨�渆n-US鈥濅互鍖归厤椤圭洰鏂囦欢涓殑 UICulture 璁剧疆銆�
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+    ResourceDictionaryLocation.None, //涓婚鐗瑰畾璧勬簮璇嶅吀鎵�澶勪綅缃�
+                                     //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                                     //鎴栧簲鐢ㄧ▼搴忚祫婧愬瓧鍏镐腑鎵惧埌鏃朵娇鐢�)
+    ResourceDictionaryLocation.SourceAssembly //甯歌璧勬簮璇嶅吀鎵�澶勪綅缃�
+                                              //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                                              //銆佸簲鐢ㄧ▼搴忔垨浠讳綍涓婚涓撶敤璧勬簮瀛楀吀涓壘鍒版椂浣跨敤)
+)]
+
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�肩粍鎴�: 
+//
+//      涓荤増鏈�
+//      娆$増鏈�
+//      鐢熸垚鍙�
+//      淇鍙�
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/HMI.UnitTest/Properties/Resources.Designer.cs b/HMI.UnitTest/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..402e669
--- /dev/null
+++ b/HMI.UnitTest/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
+//     杩愯鏃剁増鏈�:4.0.30319.42000
+//
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋�
+//     閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便��
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HMI.UnitTest.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   涓�涓己绫诲瀷鐨勮祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲鐨勫瓧绗︿覆绛夈��
+    /// </summary>
+    // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+    // 绫婚�氳繃绫讳技浜� ResGen 鎴� Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆�
+    // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈� .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛� ResGen
+    // (浠� /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆�
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   杩斿洖姝ょ被浣跨敤鐨勭紦瀛樼殑 ResourceManager 瀹炰緥銆�
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HMI.UnitTest.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   閲嶅啓褰撳墠绾跨▼鐨� CurrentUICulture 灞炴�э紝瀵�
+        ///   浣跨敤姝ゅ己绫诲瀷璧勬簮绫荤殑鎵�鏈夎祫婧愭煡鎵炬墽琛岄噸鍐欍��
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}
diff --git a/HMI.UnitTest/Properties/Resources.resx b/HMI.UnitTest/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/HMI.UnitTest/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/HMI.UnitTest/Properties/Settings.Designer.cs b/HMI.UnitTest/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..c21690e
--- /dev/null
+++ b/HMI.UnitTest/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
+//     杩愯鏃剁増鏈�:4.0.30319.42000
+//
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋�
+//     閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便��
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HMI.UnitTest.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.12.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+    }
+}
diff --git a/HMI.UnitTest/Properties/Settings.settings b/HMI.UnitTest/Properties/Settings.settings
new file mode 100644
index 0000000..033d7a5
--- /dev/null
+++ b/HMI.UnitTest/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘�<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>
\ No newline at end of file
diff --git a/HMI.UnitTest/packages.config b/HMI.UnitTest/packages.config
new file mode 100644
index 0000000..63cdc53
--- /dev/null
+++ b/HMI.UnitTest/packages.config
@@ -0,0 +1,6 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="log4net" version="3.0.3" targetFramework="net472" />
+  <package id="Panuon.WPF" version="1.1.2.2" targetFramework="net472" />
+  <package id="Panuon.WPF.UI" version="1.2.4.9" targetFramework="net472" />
+</packages>
\ No newline at end of file
diff --git a/Libs/DatabaseHelper.dll b/Libs/DatabaseHelper.dll
new file mode 100644
index 0000000..8398f83
--- /dev/null
+++ b/Libs/DatabaseHelper.dll
Binary files differ
diff --git a/Libs/SQLite.Interop.dll b/Libs/SQLite.Interop.dll
new file mode 100644
index 0000000..f666eab
--- /dev/null
+++ b/Libs/SQLite.Interop.dll
Binary files differ
diff --git a/Libs/System.Data.SQLite.EF6.dll b/Libs/System.Data.SQLite.EF6.dll
new file mode 100644
index 0000000..92a3cf0
--- /dev/null
+++ b/Libs/System.Data.SQLite.EF6.dll
Binary files differ
diff --git a/Libs/System.Data.SQLite.Linq.dll b/Libs/System.Data.SQLite.Linq.dll
new file mode 100644
index 0000000..cb2da5f
--- /dev/null
+++ b/Libs/System.Data.SQLite.Linq.dll
Binary files differ
diff --git a/Libs/System.Data.SQLite.dll b/Libs/System.Data.SQLite.dll
new file mode 100644
index 0000000..4de7b04
--- /dev/null
+++ b/Libs/System.Data.SQLite.dll
Binary files differ
diff --git a/Libs/System.Data.SQLite.dll.config b/Libs/System.Data.SQLite.dll.config
new file mode 100644
index 0000000..b14f7b5
--- /dev/null
+++ b/Libs/System.Data.SQLite.dll.config
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<!--
+ *
+ * System.Data.SQLite.dll.config -
+ *
+ * WARNING: This XML configuration file is intended for use within the NuGet
+ *          package directories only.  Please do not copy this file to any of
+ *          the build output directories because it could interfere with the
+ *          native library pre-loading feature.
+ *
+ * Written by Joe Mistachkin.
+ * Released to the public domain, use at your own risk!
+ *
+-->
+<configuration>
+  <appSettings>
+    <add key="PreLoadSQLite_BaseDirectory"
+         value="%PreLoadSQLite_AssemblyDirectory%\..\..\build\%PreLoadSQLite_TargetFramework%" />
+  </appSettings>
+
+  <dllmap dll="SQLite.Interop" target="SQLite.Interop.dll" />
+</configuration>
diff --git a/Libs/System.Data.SQLite.xml b/Libs/System.Data.SQLite.xml
new file mode 100644
index 0000000..021d08d
--- /dev/null
+++ b/Libs/System.Data.SQLite.xml
@@ -0,0 +1,21379 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>System.Data.SQLite</name>
+    </assembly>
+    <members>
+        <member name="T:System.Data.SQLite.AssemblySourceIdAttribute">
+            <summary>
+            Defines a source code identifier custom attribute for an assembly
+            manifest.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.AssemblySourceIdAttribute.#ctor(System.String)">
+            <summary>
+            Constructs an instance of this attribute class using the specified
+            source code identifier value.
+            </summary>
+            <param name="value">
+            The source code identifier value to use.
+            </param>
+        </member>
+        <member name="P:System.Data.SQLite.AssemblySourceIdAttribute.SourceId">
+            <summary>
+            Gets the source code identifier value.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.AssemblySourceTimeStampAttribute">
+            <summary>
+            Defines a source code time-stamp custom attribute for an assembly
+            manifest.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.AssemblySourceTimeStampAttribute.#ctor(System.String)">
+            <summary>
+            Constructs an instance of this attribute class using the specified
+            source code time-stamp value.
+            </summary>
+            <param name="value">
+            The source code time-stamp value to use.
+            </param>
+        </member>
+        <member name="P:System.Data.SQLite.AssemblySourceTimeStampAttribute.SourceTimeStamp">
+            <summary>
+            Gets the source code time-stamp value.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteLogCallback">
+             <summary>
+             This is the method signature for the SQLite core library logging callback
+             function for use with sqlite3_log() and the SQLITE_CONFIG_LOG.
+            
+             WARNING: This delegate is used more-or-less directly by native code, do
+                      not modify its type signature.
+             </summary>
+             <param name="pUserData">
+             The extra data associated with this message, if any.
+             </param>
+             <param name="errorCode">
+             The error code associated with this message.
+             </param>
+             <param name="pMessage">
+             The message string to be logged.
+             </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLite3">
+            <summary>
+            This class implements SQLiteBase completely, and is the guts of the code that interop's SQLite with .NET
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteBase">
+            <summary>
+            This internal class provides the foundation of SQLite support.  It defines all the abstract members needed to implement
+            a SQLite data provider, and inherits from SQLiteConvert which allows for simple translations of string to and from SQLite.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteConvert">
+            <summary>
+            This base class provides datatype conversion services for the SQLite provider.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConvert.EscapeChar">
+            <summary>
+            This character is used to escape other characters, including itself, in
+            connection string property names and values.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConvert.QuoteChar">
+            <summary>
+            This character can be used to wrap connection string property names and
+            values.  Normally, it is optional; however, when used, it must be the
+            first -AND- last character of that connection string property name -OR-
+            value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConvert.AltQuoteChar">
+            <summary>
+            This character can be used to wrap connection string property names and
+            values.  Normally, it is optional; however, when used, it must be the
+            first -AND- last character of that connection string property name -OR-
+            value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConvert.ValueChar">
+            <summary>
+            The character is used to separate the name and value for a connection
+            string property.  This character cannot be present in any connection
+            string property name.  This character can be present in a connection
+            string property value; however, this should be avoided unless deemed
+            absolutely necessary.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConvert.PairChar">
+            <summary>
+            This character is used to separate connection string properties.  When
+            the "No_SQLiteConnectionNewParser" setting is enabled, this character
+            may not appear in connection string property names -OR- values.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConvert.FallbackDefaultDbType">
+            <summary>
+            The fallback default database type when one cannot be obtained from an
+            existing connection instance.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConvert.FullFormat">
+            <summary>
+            The format string for DateTime values when using the InvariantCulture or CurrentCulture formats.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConvert.SpecialChars">
+            <summary>
+            These are the characters that are special to the connection string
+            parser.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConvert.FallbackDefaultTypeName">
+            <summary>
+            The fallback default database type name when one cannot be obtained from
+            an existing connection instance.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConvert.UnixEpoch">
+            <summary>
+            The value for the Unix epoch (e.g. January 1, 1970 at midnight, in UTC).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConvert.OleAutomationEpochAsJulianDay">
+            <summary>
+            The value of the OLE Automation epoch represented as a Julian day.  This
+            field cannot be removed as the test suite relies upon it.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConvert.MinimumJd">
+            <summary>
+            This is the minimum Julian Day value supported by this library
+            (148731163200000).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConvert.MaximumJd">
+            <summary>
+            This is the maximum Julian Day value supported by this library
+            (464269060799000).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConvert._datetimeFormats">
+            <summary>
+            An array of ISO-8601 DateTime formats that we support parsing.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConvert._datetimeFormatUtc">
+            <summary>
+            The internal default format for UTC DateTime values when converting
+            to a string.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConvert._datetimeFormatLocal">
+            <summary>
+            The internal default format for local DateTime values when converting
+            to a string.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConvert._utf8">
+            <summary>
+            An UTF-8 Encoding instance, so we can convert strings to and from UTF-8
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConvert._datetimeFormat">
+            <summary>
+            The default DateTime format for this instance.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConvert._datetimeKind">
+            <summary>
+            The default DateTimeKind for this instance.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConvert._datetimeFormatString">
+            <summary>
+            The default DateTime format string for this instance.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.#ctor(System.Data.SQLite.SQLiteDateFormats,System.DateTimeKind,System.String)">
+            <summary>
+            Initializes the conversion class
+            </summary>
+            <param name="fmt">The default date/time format to use for this instance</param>
+            <param name="kind">The DateTimeKind to use.</param>
+            <param name="fmtString">The DateTime format string to use.</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.ToUTF8(System.String)">
+            <summary>
+            Converts a string to a UTF-8 encoded byte array sized to include a null-terminating character.
+            </summary>
+            <param name="sourceText">The string to convert to UTF-8</param>
+            <returns>A byte array containing the converted string plus an extra 0 terminating byte at the end of the array.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.ToUTF8(System.DateTime)">
+            <summary>
+            Convert a DateTime to a UTF-8 encoded, zero-terminated byte array.
+            </summary>
+            <remarks>
+            This function is a convenience function, which first calls ToString() on the DateTime, and then calls ToUTF8() with the
+            string result.
+            </remarks>
+            <param name="dateTimeValue">The DateTime to convert.</param>
+            <returns>The UTF-8 encoded string, including a 0 terminating byte at the end of the array.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.ToString(System.IntPtr,System.Int32)">
+            <summary>
+            Converts a UTF-8 encoded IntPtr of the specified length into a .NET string
+            </summary>
+            <param name="nativestring">The pointer to the memory where the UTF-8 string is encoded</param>
+            <param name="nativestringlen">The number of bytes to decode</param>
+            <returns>A string containing the translated character(s)</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.UTF8ToString(System.IntPtr,System.Int32)">
+            <summary>
+            Converts a UTF-8 encoded IntPtr of the specified length into a .NET string
+            </summary>
+            <param name="nativestring">The pointer to the memory where the UTF-8 string is encoded</param>
+            <param name="nativestringlen">The number of bytes to decode</param>
+            <returns>A string containing the translated character(s)</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.isValidJd(System.Int64)">
+            <summary>
+            Checks if the specified <see cref="T:System.Int64"/> is within the
+            supported range for a Julian Day value.
+            </summary>
+            <param name="jd">
+            The Julian Day value to check.
+            </param>
+            <returns>
+            Non-zero if the specified Julian Day value is in the supported
+            range; otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.DoubleToJd(System.Double)">
+            <summary>
+            Converts a Julian Day value from a <see cref="T:System.Double"/> to an
+            <see cref="T:System.Int64"/>.
+            </summary>
+            <param name="julianDay">
+            The Julian Day <see cref="T:System.Double"/> value to convert.
+            </param>
+            <returns>
+            The resulting Julian Day <see cref="T:System.Int64"/> value.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.JdToDouble(System.Int64)">
+            <summary>
+            Converts a Julian Day value from an <see cref="T:System.Int64"/> to a
+            <see cref="T:System.Double"/>.
+            </summary>
+            <param name="jd">
+            The Julian Day <see cref="T:System.Int64"/> value to convert.
+            </param>
+            <returns>
+            The resulting Julian Day <see cref="T:System.Double"/> value.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.computeYMD(System.Int64,System.Nullable{System.DateTime})">
+            <summary>
+            Converts a Julian Day value to a <see cref="T:System.DateTime"/>.
+            This method was translated from the "computeYMD" function in the
+            "date.c" file belonging to the SQLite core library.
+            </summary>
+            <param name="jd">
+            The Julian Day value to convert.
+            </param>
+            <param name="badValue">
+            The <see cref="T:System.DateTime"/> value to return in the event that the
+            Julian Day is out of the supported range.  If this value is null,
+            an exception will be thrown instead.
+            </param>
+            <returns>
+            A <see cref="T:System.DateTime"/> value that contains the year, month, and
+            day values that are closest to the specified Julian Day value.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.computeHMS(System.Int64,System.Nullable{System.DateTime})">
+            <summary>
+            Converts a Julian Day value to a <see cref="T:System.DateTime"/>.
+            This method was translated from the "computeHMS" function in the
+            "date.c" file belonging to the SQLite core library.
+            </summary>
+            <param name="jd">
+            The Julian Day value to convert.
+            </param>
+            <param name="badValue">
+            The <see cref="T:System.DateTime"/> value to return in the event that the
+            Julian Day value is out of the supported range.  If this value is
+            null, an exception will be thrown instead.
+            </param>
+            <returns>
+            A <see cref="T:System.DateTime"/> value that contains the hour, minute, and
+            second, and millisecond values that are closest to the specified
+            Julian Day value.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.computeJD(System.DateTime)">
+            <summary>
+            Converts a <see cref="T:System.DateTime"/> to a Julian Day value.
+            This method was translated from the "computeJD" function in
+            the "date.c" file belonging to the SQLite core library.
+            Since the range of Julian Day values supported by this method
+            includes all possible (valid) values of a <see cref="T:System.DateTime"/>
+            value, it should be extremely difficult for this method to
+            raise an exception or return an undefined result.
+            </summary>
+            <param name="dateTime">
+            The <see cref="T:System.DateTime"/> value to convert.  This value
+            will be within the range of <see cref="F:System.DateTime.MinValue"/>
+            (00:00:00.0000000, January 1, 0001) to
+            <see cref="F:System.DateTime.MaxValue"/> (23:59:59.9999999, December
+            31, 9999).
+            </param>
+            <returns>
+            The nearest Julian Day value corresponding to the specified
+            <see cref="T:System.DateTime"/> value.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.ToDateTime(System.String)">
+            <summary>
+            Converts a string into a DateTime, using the DateTimeFormat, DateTimeKind,
+            and DateTimeFormatString specified for the connection when it was opened.
+            </summary>
+            <remarks>
+            Acceptable ISO8601 DateTime formats are:
+            <list type="bullet">
+            <item><description>THHmmssK</description></item>
+            <item><description>THHmmK</description></item>
+            <item><description>HH:mm:ss.FFFFFFFK</description></item>
+            <item><description>HH:mm:ssK</description></item>
+            <item><description>HH:mmK</description></item>
+            <item><description>yyyy-MM-dd HH:mm:ss.FFFFFFFK</description></item>
+            <item><description>yyyy-MM-dd HH:mm:ssK</description></item>
+            <item><description>yyyy-MM-dd HH:mmK</description></item>
+            <item><description>yyyy-MM-ddTHH:mm:ss.FFFFFFFK</description></item>
+            <item><description>yyyy-MM-ddTHH:mmK</description></item>
+            <item><description>yyyy-MM-ddTHH:mm:ssK</description></item>
+            <item><description>yyyyMMddHHmmssK</description></item>
+            <item><description>yyyyMMddHHmmK</description></item>
+            <item><description>yyyyMMddTHHmmssFFFFFFFK</description></item>
+            <item><description>THHmmss</description></item>
+            <item><description>THHmm</description></item>
+            <item><description>HH:mm:ss.FFFFFFF</description></item>
+            <item><description>HH:mm:ss</description></item>
+            <item><description>HH:mm</description></item>
+            <item><description>yyyy-MM-dd HH:mm:ss.FFFFFFF</description></item>
+            <item><description>yyyy-MM-dd HH:mm:ss</description></item>
+            <item><description>yyyy-MM-dd HH:mm</description></item>
+            <item><description>yyyy-MM-ddTHH:mm:ss.FFFFFFF</description></item>
+            <item><description>yyyy-MM-ddTHH:mm</description></item>
+            <item><description>yyyy-MM-ddTHH:mm:ss</description></item>
+            <item><description>yyyyMMddHHmmss</description></item>
+            <item><description>yyyyMMddHHmm</description></item>
+            <item><description>yyyyMMddTHHmmssFFFFFFF</description></item>
+            <item><description>yyyy-MM-dd</description></item>
+            <item><description>yyyyMMdd</description></item>
+            <item><description>yy-MM-dd</description></item>
+            </list>
+            If the string cannot be matched to one of the above formats -OR-
+            the DateTimeFormatString if one was provided, an exception will
+            be thrown.
+            </remarks>
+            <param name="dateText">The string containing either a long integer number of 100-nanosecond units since
+            System.DateTime.MinValue, a Julian day double, an integer number of seconds since the Unix epoch, a
+            culture-independent formatted date and time string, a formatted date and time string in the current
+            culture, or an ISO8601-format string.</param>
+            <returns>A DateTime value</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.ToDateTime(System.String,System.Data.SQLite.SQLiteDateFormats,System.DateTimeKind,System.String)">
+            <summary>
+            Converts a string into a DateTime, using the specified DateTimeFormat,
+            DateTimeKind and DateTimeFormatString.
+            </summary>
+            <remarks>
+            Acceptable ISO8601 DateTime formats are:
+            <list type="bullet">
+            <item><description>THHmmssK</description></item>
+            <item><description>THHmmK</description></item>
+            <item><description>HH:mm:ss.FFFFFFFK</description></item>
+            <item><description>HH:mm:ssK</description></item>
+            <item><description>HH:mmK</description></item>
+            <item><description>yyyy-MM-dd HH:mm:ss.FFFFFFFK</description></item>
+            <item><description>yyyy-MM-dd HH:mm:ssK</description></item>
+            <item><description>yyyy-MM-dd HH:mmK</description></item>
+            <item><description>yyyy-MM-ddTHH:mm:ss.FFFFFFFK</description></item>
+            <item><description>yyyy-MM-ddTHH:mmK</description></item>
+            <item><description>yyyy-MM-ddTHH:mm:ssK</description></item>
+            <item><description>yyyyMMddHHmmssK</description></item>
+            <item><description>yyyyMMddHHmmK</description></item>
+            <item><description>yyyyMMddTHHmmssFFFFFFFK</description></item>
+            <item><description>THHmmss</description></item>
+            <item><description>THHmm</description></item>
+            <item><description>HH:mm:ss.FFFFFFF</description></item>
+            <item><description>HH:mm:ss</description></item>
+            <item><description>HH:mm</description></item>
+            <item><description>yyyy-MM-dd HH:mm:ss.FFFFFFF</description></item>
+            <item><description>yyyy-MM-dd HH:mm:ss</description></item>
+            <item><description>yyyy-MM-dd HH:mm</description></item>
+            <item><description>yyyy-MM-ddTHH:mm:ss.FFFFFFF</description></item>
+            <item><description>yyyy-MM-ddTHH:mm</description></item>
+            <item><description>yyyy-MM-ddTHH:mm:ss</description></item>
+            <item><description>yyyyMMddHHmmss</description></item>
+            <item><description>yyyyMMddHHmm</description></item>
+            <item><description>yyyyMMddTHHmmssFFFFFFF</description></item>
+            <item><description>yyyy-MM-dd</description></item>
+            <item><description>yyyyMMdd</description></item>
+            <item><description>yy-MM-dd</description></item>
+            </list>
+            If the string cannot be matched to one of the above formats -OR-
+            the DateTimeFormatString if one was provided, an exception will
+            be thrown.
+            </remarks>
+            <param name="dateText">The string containing either a long integer number of 100-nanosecond units since
+            System.DateTime.MinValue, a Julian day double, an integer number of seconds since the Unix epoch, a
+            culture-independent formatted date and time string, a formatted date and time string in the current
+            culture, or an ISO8601-format string.</param>
+            <param name="format">The SQLiteDateFormats to use.</param>
+            <param name="kind">The DateTimeKind to use.</param>
+            <param name="formatString">The DateTime format string to use.</param>
+            <returns>A DateTime value</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.ToDateTime(System.Double)">
+            <summary>
+            Converts a julianday value into a DateTime
+            </summary>
+            <param name="julianDay">The value to convert</param>
+            <returns>A .NET DateTime</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.ToDateTime(System.Double,System.DateTimeKind)">
+            <summary>
+            Converts a julianday value into a DateTime
+            </summary>
+            <param name="julianDay">The value to convert</param>
+            <param name="kind">The DateTimeKind to use.</param>
+            <returns>A .NET DateTime</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.UnixEpochToDateTime(System.Int64,System.DateTimeKind)">
+            <summary>
+            Converts the specified number of seconds from the Unix epoch into a
+            <see cref="T:System.DateTime"/> value.
+            </summary>
+            <param name="seconds">
+            The number of whole seconds since the Unix epoch.
+            </param>
+            <param name="kind">
+            Either Utc or Local time.
+            </param>
+            <returns>
+            The new <see cref="T:System.DateTime"/> value.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.TicksToDateTime(System.Int64,System.DateTimeKind)">
+            <summary>
+            Converts the specified number of ticks since the epoch into a
+            <see cref="T:System.DateTime"/> value.
+            </summary>
+            <param name="ticks">
+            The number of whole ticks since the epoch.
+            </param>
+            <param name="kind">
+            Either Utc or Local time.
+            </param>
+            <returns>
+            The new <see cref="T:System.DateTime"/> value.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.ToJulianDay(System.DateTime)">
+            <summary>
+            Converts a DateTime struct to a JulianDay double
+            </summary>
+            <param name="value">The DateTime to convert</param>
+            <returns>The JulianDay value the Datetime represents</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.ToUnixEpoch(System.DateTime)">
+            <summary>
+            Converts a DateTime struct to the whole number of seconds since the
+            Unix epoch.
+            </summary>
+            <param name="value">The DateTime to convert</param>
+            <returns>The whole number of seconds since the Unix epoch</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.GetDateTimeKindFormat(System.DateTimeKind,System.String)">
+            <summary>
+            Returns the DateTime format string to use for the specified DateTimeKind.
+            If <paramref name="formatString" /> is not null, it will be returned verbatim.
+            </summary>
+            <param name="kind">The DateTimeKind to use.</param>
+            <param name="formatString">The DateTime format string to use.</param>
+            <returns>
+            The DateTime format string to use for the specified DateTimeKind.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.ToString(System.DateTime)">
+            <summary>
+            Converts a string into a DateTime, using the DateTimeFormat, DateTimeKind,
+            and DateTimeFormatString specified for the connection when it was opened.
+            </summary>
+            <param name="dateValue">The DateTime value to convert</param>
+            <returns>Either a string containing the long integer number of 100-nanosecond units since System.DateTime.MinValue, a
+            Julian day double, an integer number of seconds since the Unix epoch, a culture-independent formatted date and time
+            string, a formatted date and time string in the current culture, or an ISO8601-format date/time string.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.ToString(System.DateTime,System.Data.SQLite.SQLiteDateFormats,System.DateTimeKind,System.String)">
+            <summary>
+            Converts a string into a DateTime, using the DateTimeFormat, DateTimeKind,
+            and DateTimeFormatString specified for the connection when it was opened.
+            </summary>
+            <param name="dateValue">The DateTime value to convert</param>
+            <param name="format">The SQLiteDateFormats to use.</param>
+            <param name="kind">The DateTimeKind to use.</param>
+            <param name="formatString">The DateTime format string to use.</param>
+            <returns>Either a string containing the long integer number of 100-nanosecond units since System.DateTime.MinValue, a
+            Julian day double, an integer number of seconds since the Unix epoch, a culture-independent formatted date and time
+            string, a formatted date and time string in the current culture, or an ISO8601-format date/time string.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.ToDateTime(System.IntPtr,System.Int32)">
+            <summary>
+            Internal function to convert a UTF-8 encoded IntPtr of the specified length to a DateTime.
+            </summary>
+            <remarks>
+            This is a convenience function, which first calls ToString() on the IntPtr to convert it to a string, then calls
+            ToDateTime() on the string to return a DateTime.
+            </remarks>
+            <param name="ptr">A pointer to the UTF-8 encoded string</param>
+            <param name="len">The length in bytes of the string</param>
+            <returns>The parsed DateTime value</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.Split(System.String,System.Char)">
+            <summary>
+            Smart method of splitting a string.  Skips quoted elements, removes the quotes.
+            </summary>
+            <remarks>
+            This split function works somewhat like the String.Split() function in that it breaks apart a string into
+            pieces and returns the pieces as an array.  The primary differences are:
+            <list type="bullet">
+            <item><description>Only one character can be provided as a separator character</description></item>
+            <item><description>Quoted text inside the string is skipped over when searching for the separator, and the quotes are removed.</description></item>
+            </list>
+            Thus, if splitting the following string looking for a comma:<br/>
+            One,Two, "Three, Four", Five<br/>
+            <br/>
+            The resulting array would contain<br/>
+            [0] One<br/>
+            [1] Two<br/>
+            [2] Three, Four<br/>
+            [3] Five<br/>
+            <br/>
+            Note that the leading and trailing spaces were removed from each item during the split.
+            </remarks>
+            <param name="source">Source string to split apart</param>
+            <param name="separator">Separator character</param>
+            <returns>A string array of the split up elements</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.NewSplit(System.String,System.Char,System.Boolean,System.String@)">
+            <summary>
+            Splits the specified string into multiple strings based on a separator
+            and returns the result as an array of strings.
+            </summary>
+            <param name="value">
+            The string to split into pieces based on the separator character.  If
+            this string is null, null will always be returned.  If this string is
+            empty, an array of zero strings will always be returned.
+            </param>
+            <param name="separator">
+            The character used to divide the original string into sub-strings.
+            This character cannot be a backslash or a double-quote; otherwise, no
+            work will be performed and null will be returned.
+            </param>
+            <param name="keepQuote">
+            If this parameter is non-zero, all double-quote characters will be
+            retained in the returned list of strings; otherwise, they will be
+            dropped.
+            </param>
+            <param name="error">
+            Upon failure, this parameter will be modified to contain an appropriate
+            error message.
+            </param>
+            <returns>
+            The new array of strings or null if the input string is null -OR- the
+            separator character is a backslash or a double-quote -OR- the string
+            contains an unbalanced backslash or double-quote character.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.ToStringWithProvider(System.Object,System.IFormatProvider)">
+            <summary>
+            Queries and returns the string representation for an object, using the
+            specified (or current) format provider.
+            </summary>
+            <param name="obj">
+            The object instance to return the string representation for.
+            </param>
+            <param name="provider">
+            The format provider to use -OR- null if the current format provider for
+            the thread should be used instead.
+            </param>
+            <returns>
+            The string representation for the object instance -OR- null if the
+            object instance is also null.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.ToBoolean(System.Object,System.IFormatProvider,System.Boolean)">
+            <summary>
+            Attempts to convert an arbitrary object to the Boolean data type.
+            Null object values are converted to false.  Throws an exception
+            upon failure.
+            </summary>
+            <param name="obj">
+            The object value to convert.
+            </param>
+            <param name="provider">
+            The format provider to use.
+            </param>
+            <param name="viaFramework">
+            If non-zero, a string value will be converted using the
+            <see cref="M:System.Convert.ToBoolean(System.Object,System.IFormatProvider)"/>
+            method; otherwise, the <see cref="M:System.Data.SQLite.SQLiteConvert.ToBoolean(System.String)"/>
+            method will be used.
+            </param>
+            <returns>
+            The converted boolean value.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.ToBoolean(System.Object)">
+            <summary>
+            Convert a value to true or false.
+            </summary>
+            <param name="source">A string or number representing true or false</param>
+            <returns></returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.ToString(System.Int32)">
+            <summary>
+            Converts an integer to a string that can be round-tripped using the
+            invariant culture.
+            </summary>
+            <param name="value">
+            The integer value to return the string representation for.
+            </param>
+            <returns>
+            The string representation of the specified integer value, using the
+            invariant culture.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.ToBoolean(System.String)">
+            <summary>
+            Attempts to convert a <see cref="T:System.String"/> into a <see cref="T:System.Boolean"/>.
+            </summary>
+            <param name="source">
+            The <see cref="T:System.String"/> to convert, cannot be null.
+            </param>
+            <returns>
+            The converted <see cref="T:System.Boolean"/> value.
+            </returns>
+            <remarks>
+            The supported strings are "yes", "no", "y", "n", "on", "off", "0", "1",
+            as well as any prefix of the strings <see cref="F:System.Boolean.FalseString"/>
+            and <see cref="F:System.Boolean.TrueString"/>.  All strings are treated in a
+            case-insensitive manner.
+            </remarks>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.SQLiteTypeToType(System.Data.SQLite.SQLiteType)">
+            <summary>
+            Converts a SQLiteType to a .NET Type object
+            </summary>
+            <param name="t">The SQLiteType to convert</param>
+            <returns>Returns a .NET Type object</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.TypeToDbType(System.Type)">
+            <summary>
+            For a given intrinsic type, return a DbType
+            </summary>
+            <param name="typ">The native type to convert</param>
+            <returns>The corresponding (closest match) DbType</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.DbTypeToColumnSize(System.Data.DbType)">
+            <summary>
+            Returns the ColumnSize for the given DbType
+            </summary>
+            <param name="typ">The DbType to get the size of</param>
+            <returns></returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.GetDefaultTypeName(System.Data.SQLite.SQLiteConnection)">
+            <summary>
+            Determines the default database type name to be used when a
+            per-connection value is not available.
+            </summary>
+            <param name="connection">
+            The connection context for type mappings, if any.
+            </param>
+            <returns>
+            The default database type name to use.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.DefaultTypeNameWarning(System.Data.DbType,System.Data.SQLite.SQLiteConnectionFlags,System.String)">
+            <summary>
+            If applicable, issues a trace log message warning about falling back to
+            the default database type name.
+            </summary>
+            <param name="dbType">
+            The database value type.
+            </param>
+            <param name="flags">
+            The flags associated with the parent connection object.
+            </param>
+            <param name="typeName">
+            The textual name of the database type.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.DefaultDbTypeWarning(System.String,System.Data.SQLite.SQLiteConnectionFlags,System.Nullable{System.Data.DbType})">
+            <summary>
+            If applicable, issues a trace log message warning about falling back to
+            the default database value type.
+            </summary>
+            <param name="typeName">
+            The textual name of the database type.
+            </param>
+            <param name="flags">
+            The flags associated with the parent connection object.
+            </param>
+            <param name="dbType">
+            The database value type.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.DbTypeToTypeName(System.Data.SQLite.SQLiteConnection,System.Data.DbType,System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            For a given database value type, return the "closest-match" textual database type name.
+            </summary>
+            <param name="connection">The connection context for custom type mappings, if any.</param>
+            <param name="dbType">The database value type.</param>
+            <param name="flags">The flags associated with the parent connection object.</param>
+            <returns>The type name or an empty string if it cannot be determined.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.DbTypeToType(System.Data.DbType)">
+            <summary>
+            Convert a DbType to a Type
+            </summary>
+            <param name="typ">The DbType to convert from</param>
+            <returns>The closest-match .NET type</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.TypeToAffinity(System.Type,System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            For a given type, return the closest-match SQLite TypeAffinity, which only understands a very limited subset of types.
+            </summary>
+            <param name="typ">The type to evaluate</param>
+            <param name="flags">The flags associated with the connection.</param>
+            <returns>The SQLite type affinity for that type.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.GetSQLiteDbTypeMap">
+            <summary>
+            Builds and returns a map containing the database column types
+            recognized by this provider.
+            </summary>
+            <returns>
+            A map containing the database column types recognized by this
+            provider.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.IsStringDbType(System.Data.DbType)">
+            <summary>
+            Determines if a database type is considered to be a string.
+            </summary>
+            <param name="type">
+            The database type to check.
+            </param>
+            <returns>
+            Non-zero if the database type is considered to be a string, zero
+            otherwise.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.SettingValueToString(System.Object)">
+            <summary>
+            Determines and returns the runtime configuration setting string that
+            should be used in place of the specified object value.
+            </summary>
+            <param name="value">
+            The object value to convert to a string.
+            </param>
+            <returns>
+            Either the string to use in place of the object value -OR- null if it
+            cannot be determined.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.GetDefaultDbType(System.Data.SQLite.SQLiteConnection)">
+            <summary>
+            Determines the default <see cref="T:System.Data.DbType"/> value to be used when a
+            per-connection value is not available.
+            </summary>
+            <param name="connection">
+            The connection context for type mappings, if any.
+            </param>
+            <returns>
+            The default <see cref="T:System.Data.DbType"/> value to use.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.GetStringOrNull(System.Object)">
+            <summary>
+            Converts the object value, which is assumed to have originated
+            from a <see cref="T:System.Data.DataRow"/>, to a string value.
+            </summary>
+            <param name="value">
+            The value to be converted to a string.
+            </param>
+            <returns>
+            A null value will be returned if the original value is null -OR-
+            the original value is <see cref="F:System.DBNull.Value"/>.  Otherwise,
+            the original value will be converted to a string, using its
+            (possibly overridden) <see cref="M:System.Object.ToString"/> method and
+            then returned.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.LooksLikeNull(System.String)">
+            <summary>
+            Determines if the specified textual value appears to be a
+            <see cref="T:System.DBNull"/> value.
+            </summary>
+            <param name="text">
+            The textual value to inspect.
+            </param>
+            <returns>
+            Non-zero if the text looks like a <see cref="T:System.DBNull"/> value,
+            zero otherwise.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.LooksLikeInt64(System.String)">
+            <summary>
+            Determines if the specified textual value appears to be an
+            <see cref="T:System.Int64"/> value.
+            </summary>
+            <param name="text">
+            The textual value to inspect.
+            </param>
+            <returns>
+            Non-zero if the text looks like an <see cref="T:System.Int64"/> value,
+            zero otherwise.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.LooksLikeDouble(System.String)">
+            <summary>
+            Determines if the specified textual value appears to be a
+            <see cref="T:System.Double"/> value.
+            </summary>
+            <param name="text">
+            The textual value to inspect.
+            </param>
+            <returns>
+            Non-zero if the text looks like a <see cref="T:System.Double"/> value,
+            zero otherwise.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.LooksLikeDateTime(System.Data.SQLite.SQLiteConvert,System.String)">
+            <summary>
+            Determines if the specified textual value appears to be a
+            <see cref="T:System.DateTime"/> value.
+            </summary>
+            <param name="convert">
+            The <see cref="T:System.Data.SQLite.SQLiteConvert"/> object instance configured with
+            the chosen <see cref="T:System.DateTime"/> format.
+            </param>
+            <param name="text">
+            The textual value to inspect.
+            </param>
+            <returns>
+            Non-zero if the text looks like a <see cref="T:System.DateTime"/> in the
+            configured format, zero otherwise.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConvert.TypeNameToDbType(System.Data.SQLite.SQLiteConnection,System.String,System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            For a given textual database type name, return the "closest-match" database type.
+            This method is called during query result processing; therefore, its performance
+            is critical.
+            </summary>
+            <param name="connection">The connection context for custom type mappings, if any.</param>
+            <param name="typeName">The textual name of the database type to match.</param>
+            <param name="flags">The flags associated with the parent connection object.</param>
+            <returns>The .NET DBType the text evaluates to.</returns>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteBase.COR_E_EXCEPTION">
+            <summary>
+            The error code used for logging exceptions caught in user-provided
+            code.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.IsReadOnly(System.String)">
+            <summary>
+            Returns non-zero if this connection to the database is read-only.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.SetMemoryStatus(System.Boolean)">
+            <summary>
+            Sets the status of the memory usage tracking subsystem in the SQLite core library.  By default, this is enabled.
+            If this is disabled, memory usage tracking will not be performed.  This is not really a per-connection value, it is
+            global to the process.
+            </summary>
+            <param name="value">Non-zero to enable memory usage tracking, zero otherwise.</param>
+            <returns>A standard SQLite return code (i.e. zero for success and non-zero for failure).</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.ReleaseMemory">
+            <summary>
+            Attempts to free as much heap memory as possible for the database connection.
+            </summary>
+            <returns>A standard SQLite return code (i.e. zero for success and non-zero for failure).</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.Shutdown">
+            <summary>
+            Shutdown the SQLite engine so that it can be restarted with different config options.
+            We depend on auto initialization to recover.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.IsOpen">
+            <summary>
+            Determines if the associated native connection handle is open.
+            </summary>
+            <returns>
+            Non-zero if a database connection is open.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.GetFileName(System.String)">
+            <summary>
+            Returns the fully qualified path and file name for the currently open
+            database, if any.
+            </summary>
+            <param name="dbName">
+            The name of the attached database to query.
+            </param>
+            <returns>
+            The fully qualified path and file name for the currently open database,
+            if any.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.Open(System.String,System.String,System.Data.SQLite.SQLiteConnectionFlags,System.Data.SQLite.SQLiteOpenFlagsEnum,System.Int32,System.Boolean)">
+            <summary>
+            Opens a database.
+            </summary>
+            <remarks>
+            Implementers should call SQLiteFunction.BindFunctions() and save the array after opening a connection
+            to bind all attributed user-defined functions and collating sequences to the new connection.
+            </remarks>
+            <param name="strFilename">The filename of the database to open.  SQLite automatically creates it if it doesn't exist.</param>
+            <param name="vfsName">The name of the VFS to use -OR- null to use the default VFS.</param>
+            <param name="connectionFlags">The flags associated with the parent connection object</param>
+            <param name="openFlags">The open flags to use when creating the connection</param>
+            <param name="maxPoolSize">The maximum size of the pool for the given filename</param>
+            <param name="usePool">If true, the connection can be pulled from the connection pool</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.Close(System.Boolean)">
+            <summary>
+            Closes the currently-open database.
+            </summary>
+            <remarks>
+            After the database has been closed implemeters should call SQLiteFunction.UnbindFunctions() to deallocate all interop allocated
+            memory associated with the user-defined functions and collating sequences tied to the closed connection.
+            </remarks>
+            <param name="disposing">Non-zero if connection is being disposed, zero otherwise.</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.SetTimeout(System.Int32)">
+            <summary>
+            Sets the busy timeout on the connection.  SQLiteCommand will call this before executing any command.
+            </summary>
+            <param name="nTimeoutMS">The number of milliseconds to wait before returning SQLITE_BUSY</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.GetLastError">
+            <summary>
+            Returns the text of the last error issued by SQLite
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.GetLastError(System.String)">
+            <summary>
+            Returns the text of the last error issued by SQLite -OR- the specified default error text if
+            none is available from the SQLite core library.
+            </summary>
+            <param name="defValue">
+            The error text to return in the event that one is not available from the SQLite core library.
+            </param>
+            <returns>
+            The error text.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.ClearPool">
+            <summary>
+            When pooling is enabled, force this connection to be disposed rather than returned to the pool
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.CountPool">
+            <summary>
+            When pooling is enabled, returns the number of pool entries matching the current file name.
+            </summary>
+            <returns>The number of pool entries matching the current file name.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.Prepare(System.Data.SQLite.SQLiteConnection,System.String,System.Data.SQLite.SQLiteStatement,System.UInt32,System.String@)">
+            <summary>
+            Prepares a SQL statement for execution.
+            </summary>
+            <param name="cnn">The source connection preparing the command.  Can be null for any caller except LINQ</param>
+            <param name="strSql">The SQL command text to prepare</param>
+            <param name="previous">The previous statement in a multi-statement command, or null if no previous statement exists</param>
+            <param name="timeoutMS">The timeout to wait before aborting the prepare</param>
+            <param name="strRemain">The remainder of the statement that was not processed.  Each call to prepare parses the
+            SQL up to to either the end of the text or to the first semi-colon delimiter.  The remaining text is returned
+            here for a subsequent call to Prepare() until all the text has been processed.</param>
+            <returns>Returns an initialized SQLiteStatement.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.Step(System.Data.SQLite.SQLiteStatement)">
+            <summary>
+            Steps through a prepared statement.
+            </summary>
+            <param name="stmt">The SQLiteStatement to step through</param>
+            <returns>True if a row was returned, False if not.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.IsReadOnly(System.Data.SQLite.SQLiteStatement)">
+            <summary>
+            Returns non-zero if the specified statement is read-only in nature.
+            </summary>
+            <param name="stmt">The statement to check.</param>
+            <returns>True if the outer query is read-only.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.Reset(System.Data.SQLite.SQLiteStatement)">
+            <summary>
+            Resets a prepared statement so it can be executed again.  If the error returned is SQLITE_SCHEMA,
+            transparently attempt to rebuild the SQL statement and throw an error if that was not possible.
+            </summary>
+            <param name="stmt">The statement to reset</param>
+            <returns>Returns -1 if the schema changed while resetting, 0 if the reset was sucessful or 6 (SQLITE_LOCKED) if the reset failed due to a lock</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.Cancel">
+            <summary>
+            Attempts to interrupt the query currently executing on the associated
+            native database connection.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.BindFunction(System.Data.SQLite.SQLiteFunctionAttribute,System.Data.SQLite.SQLiteFunction,System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            This function binds a user-defined function to the connection.
+            </summary>
+            <param name="functionAttribute">
+            The <see cref="T:System.Data.SQLite.SQLiteFunctionAttribute"/> object instance containing
+            the metadata for the function to be bound.
+            </param>
+            <param name="function">
+            The <see cref="T:System.Data.SQLite.SQLiteFunction"/> object instance that implements the
+            function to be bound.
+            </param>
+            <param name="flags">
+            The flags associated with the parent connection object.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.UnbindFunction(System.Data.SQLite.SQLiteFunctionAttribute,System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            This function unbinds a user-defined function from the connection.
+            </summary>
+            <param name="functionAttribute">
+            The <see cref="T:System.Data.SQLite.SQLiteFunctionAttribute"/> object instance containing
+            the metadata for the function to be unbound.
+            </param>
+            <param name="flags">
+            The flags associated with the parent connection object.
+            </param>
+            <returns>Non-zero if the function was unbound.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.CreateModule(System.Data.SQLite.SQLiteModule,System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Calls the native SQLite core library in order to create a disposable
+            module containing the implementation of a virtual table.
+            </summary>
+            <param name="module">
+            The module object to be used when creating the native disposable module.
+            </param>
+            <param name="flags">
+            The flags for the associated <see cref="T:System.Data.SQLite.SQLiteConnection"/> object instance.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.DisposeModule(System.Data.SQLite.SQLiteModule,System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Calls the native SQLite core library in order to cleanup the resources
+            associated with a module containing the implementation of a virtual table.
+            </summary>
+            <param name="module">
+            The module object previously passed to the <see cref="M:System.Data.SQLite.SQLiteBase.CreateModule(System.Data.SQLite.SQLiteModule,System.Data.SQLite.SQLiteConnectionFlags)"/>
+            method.
+            </param>
+            <param name="flags">
+            The flags for the associated <see cref="T:System.Data.SQLite.SQLiteConnection"/> object instance.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.DeclareVirtualTable(System.Data.SQLite.SQLiteModule,System.String,System.String@)">
+            <summary>
+            Calls the native SQLite core library in order to declare a virtual table
+            in response to a call into the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/>
+            or <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> virtual table methods.
+            </summary>
+            <param name="module">
+            The virtual table module that is to be responsible for the virtual table
+            being declared.
+            </param>
+            <param name="strSql">
+            The string containing the SQL statement describing the virtual table to
+            be declared.
+            </param>
+            <param name="error">
+            Upon success, the contents of this parameter are undefined.  Upon failure,
+            it should contain an appropriate error message.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.DeclareVirtualFunction(System.Data.SQLite.SQLiteModule,System.Int32,System.String,System.String@)">
+            <summary>
+            Calls the native SQLite core library in order to declare a virtual table
+            function in response to a call into the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/>
+            or <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> virtual table methods.
+            </summary>
+            <param name="module">
+            The virtual table module that is to be responsible for the virtual table
+            function being declared.
+            </param>
+            <param name="argumentCount">
+            The number of arguments to the function being declared.
+            </param>
+            <param name="name">
+            The name of the function being declared.
+            </param>
+            <param name="error">
+            Upon success, the contents of this parameter are undefined.  Upon failure,
+            it should contain an appropriate error message.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.GetStatusParameter(System.Data.SQLite.SQLiteStatusOpsEnum,System.Boolean,System.Int32@,System.Int32@)">
+            <summary>
+            Returns the current and/or highwater values for the specified database status parameter.
+            </summary>
+            <param name="option">
+            The database status parameter to query.
+            </param>
+            <param name="reset">
+            Non-zero to reset the highwater value to the current value.
+            </param>
+            <param name="current">
+            If applicable, receives the current value.
+            </param>
+            <param name="highwater">
+            If applicable, receives the highwater value.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.SetLimitOption(System.Data.SQLite.SQLiteLimitOpsEnum,System.Int32)">
+            <summary>
+            Change a limit value for the database.
+            </summary>
+            <param name="option">
+            The database limit to change.
+            </param>
+            <param name="value">
+            The new value for the specified limit.
+            </param>
+            <returns>
+            The old value for the specified limit -OR- negative one if an error
+            occurs.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.SetConfigurationOption(System.Data.SQLite.SQLiteConfigDbOpsEnum,System.Object)">
+            <summary>
+            Change a configuration option value for the database.
+            </summary>
+            <param name="option">
+            The database configuration option to change.
+            </param>
+            <param name="value">
+            The new value for the specified configuration option.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.SetLoadExtension(System.Boolean)">
+            <summary>
+            Enables or disables extension loading by SQLite.
+            </summary>
+            <param name="bOnOff">
+            True to enable loading of extensions, false to disable.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.LoadExtension(System.String,System.String)">
+            <summary>
+            Loads a SQLite extension library from the named file.
+            </summary>
+            <param name="fileName">
+            The name of the dynamic link library file containing the extension.
+            </param>
+            <param name="procName">
+            The name of the exported function used to initialize the extension.
+            If null, the default "sqlite3_extension_init" will be used.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.SetExtendedResultCodes(System.Boolean)">
+            <summary>
+            Enables or disables extened result codes returned by SQLite
+            </summary>
+            <param name="bOnOff">true to enable extended result codes, false to disable.</param>
+            <returns></returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.ResultCode">
+            <summary>
+            Returns the numeric result code for the most recent failed SQLite API call
+            associated with the database connection.
+            </summary>
+            <returns>Result code</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.ExtendedResultCode">
+            <summary>
+            Returns the extended numeric result code for the most recent failed SQLite API call
+            associated with the database connection.
+            </summary>
+            <returns>Extended result code</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.LogMessage(System.Data.SQLite.SQLiteErrorCode,System.String)">
+            <summary>
+            Add a log message via the SQLite sqlite3_log interface.
+            </summary>
+            <param name="iErrCode">Error code to be logged with the message.</param>
+            <param name="zMessage">String to be logged.  Unlike the SQLite sqlite3_log()
+            interface, this should be pre-formatted.  Consider using the
+            String.Format() function.</param>
+            <returns></returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.IsInitialized">
+            <summary>
+            Checks if the SQLite core library has been initialized in the current process.
+            </summary>
+            <returns>
+            Non-zero if the SQLite core library has been initialized in the current process,
+            zero otherwise.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.InitializeBackup(System.Data.SQLite.SQLiteConnection,System.String,System.String)">
+            <summary>
+            Creates a new SQLite backup object based on the provided destination
+            database connection.  The source database connection is the one
+            associated with this object.  The source and destination database
+            connections cannot be the same.
+            </summary>
+            <param name="destCnn">The destination database connection.</param>
+            <param name="destName">The destination database name.</param>
+            <param name="sourceName">The source database name.</param>
+            <returns>The newly created backup object.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.StepBackup(System.Data.SQLite.SQLiteBackup,System.Int32,System.Boolean@)">
+            <summary>
+            Copies up to N pages from the source database to the destination
+            database associated with the specified backup object.
+            </summary>
+            <param name="backup">The backup object to use.</param>
+            <param name="nPage">
+            The number of pages to copy or negative to copy all remaining pages.
+            </param>
+            <param name="retry">
+            Set to true if the operation needs to be retried due to database
+            locking issues.
+            </param>
+            <returns>
+            True if there are more pages to be copied, false otherwise.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.RemainingBackup(System.Data.SQLite.SQLiteBackup)">
+            <summary>
+            Returns the number of pages remaining to be copied from the source
+            database to the destination database associated with the specified
+            backup object.
+            </summary>
+            <param name="backup">The backup object to check.</param>
+            <returns>The number of pages remaining to be copied.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.PageCountBackup(System.Data.SQLite.SQLiteBackup)">
+            <summary>
+            Returns the total number of pages in the source database associated
+            with the specified backup object.
+            </summary>
+            <param name="backup">The backup object to check.</param>
+            <returns>The total number of pages in the source database.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.FinishBackup(System.Data.SQLite.SQLiteBackup)">
+            <summary>
+            Destroys the backup object, rolling back any backup that may be in
+            progess.
+            </summary>
+            <param name="backup">The backup object to destroy.</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBase.FallbackGetErrorString(System.Data.SQLite.SQLiteErrorCode)">
+            <summary>
+            Returns the error message for the specified SQLite return code using
+            the internal static lookup table.
+            </summary>
+            <param name="rc">The SQLite return code.</param>
+            <returns>The error message or null if it cannot be found.</returns>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteBase.Version">
+            <summary>
+            Returns a string representing the active version of SQLite
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteBase.VersionNumber">
+            <summary>
+            Returns an integer representing the active version of SQLite
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteBase.LastInsertRowId">
+            <summary>
+            Returns the rowid of the most recent successful INSERT into the database from this connection.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteBase.Changes">
+            <summary>
+            Returns the number of changes the last executing insert/update caused.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteBase.MemoryUsed">
+            <summary>
+            Returns the amount of memory (in bytes) currently in use by the SQLite core library.  This is not really a per-connection
+            value, it is global to the process.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteBase.MemoryHighwater">
+            <summary>
+            Returns the maximum amount of memory (in bytes) used by the SQLite core library since the high-water mark was last reset.
+            This is not really a per-connection value, it is global to the process.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteBase.OwnHandle">
+            <summary>
+            Returns non-zero if the underlying native connection handle is owned by this instance.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteBase.Functions">
+            <summary>
+            Returns the logical list of functions associated with this connection.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteBase.AutoCommit">
+            <summary>
+            Returns non-zero if the given database connection is in autocommit mode.
+            Autocommit mode is on by default.  Autocommit mode is disabled by a BEGIN
+            statement.  Autocommit mode is re-enabled by a COMMIT or ROLLBACK.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLite3.dbName">
+            <summary>
+            This field is used to refer to memory allocated for the
+            SQLITE_DBCONFIG_MAINDBNAME value used with the native
+            "sqlite3_db_config" API.  If allocated, the associated
+            memeory will be freed when the underlying connection is
+            closed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLite3._sql">
+            <summary>
+            The opaque pointer returned to us by the sqlite provider
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLite3._functions">
+            <summary>
+            The user-defined functions registered on this connection
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLite3._shimExtensionFileName">
+            <summary>
+            This is the name of the native library file that contains the
+            "vtshim" extension [wrapper].
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLite3._shimIsLoadNeeded">
+            <summary>
+            This is the flag indicate whether the native library file that
+            contains the "vtshim" extension must be dynamically loaded by
+            this class prior to use.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLite3._shimExtensionProcName">
+            <summary>
+            This is the name of the native entry point for the "vtshim"
+            extension [wrapper].
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLite3._modules">
+            <summary>
+            The modules created using this connection.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.#ctor(System.Data.SQLite.SQLiteDateFormats,System.DateTimeKind,System.String,System.IntPtr,System.String,System.Boolean)">
+            <summary>
+            Constructs the object used to interact with the SQLite core library
+            using the UTF-8 text encoding.
+            </summary>
+            <param name="fmt">
+            The DateTime format to be used when converting string values to a
+            DateTime and binding DateTime parameters.
+            </param>
+            <param name="kind">
+            The <see cref="T:System.DateTimeKind"/> to be used when creating DateTime
+            values.
+            </param>
+            <param name="fmtString">
+            The format string to be used when parsing and formatting DateTime
+            values.
+            </param>
+            <param name="db">
+            The native handle to be associated with the database connection.
+            </param>
+            <param name="fileName">
+            The fully qualified file name associated with <paramref name="db "/>.
+            </param>
+            <param name="ownHandle">
+            Non-zero if the newly created object instance will need to dispose
+            of <paramref name="db"/> when it is no longer needed.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.DisposeModules">
+            <summary>
+            This method attempts to dispose of all the <see cref="T:System.Data.SQLite.SQLiteModule"/> derived
+            object instances currently associated with the native database connection.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.GetCancelCount">
+            <summary>
+            Returns the number of times the <see cref="M:System.Data.SQLite.SQLite3.Cancel"/> method has been
+            called.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.ShouldThrowForCancel">
+            <summary>
+            This method determines whether or not a <see cref="T:System.Data.SQLite.SQLiteException"/>
+            with a return code of <see cref="F:System.Data.SQLite.SQLiteErrorCode.Interrupt"/> should
+            be thrown after making a call into the SQLite core library.
+            </summary>
+            <returns>
+            Non-zero if a <see cref="T:System.Data.SQLite.SQLiteException"/> to be thrown.  This method
+            will only return non-zero if the <see cref="M:System.Data.SQLite.SQLite3.Cancel"/> method was called
+            one or more times during a call into the SQLite core library (e.g. when
+            the sqlite3_prepare*() or sqlite3_step() APIs are used).
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.ResetCancelCount">
+            <summary>
+            Resets the value of the <see cref="F:System.Data.SQLite.SQLite3._cancelCount"/> field.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.Cancel">
+            <summary>
+            Attempts to interrupt the query currently executing on the associated
+            native database connection.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.BindFunction(System.Data.SQLite.SQLiteFunctionAttribute,System.Data.SQLite.SQLiteFunction,System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            This function binds a user-defined function to the connection.
+            </summary>
+            <param name="functionAttribute">
+            The <see cref="T:System.Data.SQLite.SQLiteFunctionAttribute"/> object instance containing
+            the metadata for the function to be bound.
+            </param>
+            <param name="function">
+            The <see cref="T:System.Data.SQLite.SQLiteFunction"/> object instance that implements the
+            function to be bound.
+            </param>
+            <param name="flags">
+            The flags associated with the parent connection object.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.UnbindFunction(System.Data.SQLite.SQLiteFunctionAttribute,System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            This function binds a user-defined function to the connection.
+            </summary>
+            <param name="functionAttribute">
+            The <see cref="T:System.Data.SQLite.SQLiteFunctionAttribute"/> object instance containing
+            the metadata for the function to be unbound.
+            </param>
+            <param name="flags">
+            The flags associated with the parent connection object.
+            </param>
+            <returns>Non-zero if the function was unbound and removed.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.ReleaseMemory">
+            <summary>
+            Attempts to free as much heap memory as possible for the database connection.
+            </summary>
+            <returns>A standard SQLite return code (i.e. zero for success and non-zero for failure).</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.StaticReleaseMemory(System.Int32,System.Boolean,System.Boolean,System.Int32@,System.Boolean@,System.UInt32@)">
+            <summary>
+            Attempts to free N bytes of heap memory by deallocating non-essential memory
+            allocations held by the database library. Memory used to cache database pages
+            to improve performance is an example of non-essential memory.  This is a no-op
+            returning zero if the SQLite core library was not compiled with the compile-time
+            option SQLITE_ENABLE_MEMORY_MANAGEMENT.  Optionally, attempts to reset and/or
+            compact the Win32 native heap, if applicable.
+            </summary>
+            <param name="nBytes">
+            The requested number of bytes to free.
+            </param>
+            <param name="reset">
+            Non-zero to attempt a heap reset.
+            </param>
+            <param name="compact">
+            Non-zero to attempt heap compaction.
+            </param>
+            <param name="nFree">
+            The number of bytes actually freed.  This value may be zero.
+            </param>
+            <param name="resetOk">
+            This value will be non-zero if the heap reset was successful.
+            </param>
+            <param name="nLargest">
+            The size of the largest committed free block in the heap, in bytes.
+            This value will be zero unless heap compaction is enabled.
+            </param>
+            <returns>
+            A standard SQLite return code (i.e. zero for success and non-zero
+            for failure).
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.Shutdown">
+            <summary>
+            Shutdown the SQLite engine so that it can be restarted with different
+            configuration options.  We depend on auto initialization to recover.
+            </summary>
+            <returns>Returns a standard SQLite result code.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.StaticShutdown(System.Boolean)">
+            <summary>
+            Shutdown the SQLite engine so that it can be restarted with different
+            configuration options.  We depend on auto initialization to recover.
+            </summary>
+            <param name="directories">
+            Non-zero to reset the database and temporary directories to their
+            default values, which should be null for both.  This parameter has no
+            effect on non-Windows operating systems.
+            </param>
+            <returns>Returns a standard SQLite result code.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.IsOpen">
+            <summary>
+            Determines if the associated native connection handle is open.
+            </summary>
+            <returns>
+            Non-zero if the associated native connection handle is open.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.GetFileName(System.String)">
+            <summary>
+            Returns the fully qualified path and file name for the currently open
+            database, if any.
+            </summary>
+            <param name="dbName">
+            The name of the attached database to query.
+            </param>
+            <returns>
+            The fully qualified path and file name for the currently open database,
+            if any.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.IsAllowedToUsePool(System.Data.SQLite.SQLiteOpenFlagsEnum)">
+            <summary>
+            This method attempts to determine if a database connection opened
+            with the specified <see cref="T:System.Data.SQLite.SQLiteOpenFlagsEnum"/> should be
+            allowed into the connection pool.
+            </summary>
+            <param name="openFlags">
+            The <see cref="T:System.Data.SQLite.SQLiteOpenFlagsEnum"/> that were specified when the
+            connection was opened.
+            </param>
+            <returns>
+            Non-zero if the connection should (eventually) be allowed into the
+            connection pool; otherwise, zero.
+            </returns>
+        </member>
+        <member name="F:System.Data.SQLite.SQLite3.have_errstr">
+            <summary>
+            Has the sqlite3_errstr() core library API been checked for yet?
+            If so, is it present?
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.GetErrorString(System.Data.SQLite.SQLiteErrorCode)">
+             <summary>
+             Returns the error message for the specified SQLite return code using
+             the sqlite3_errstr() function, falling back to the internal lookup
+             table if necessary.
+            
+             WARNING: Do not remove this method, it is used via reflection.
+             </summary>
+             <param name="rc">The SQLite return code.</param>
+             <returns>The error message or null if it cannot be found.</returns>
+        </member>
+        <member name="F:System.Data.SQLite.SQLite3.have_stmt_readonly">
+            <summary>
+            Has the sqlite3_stmt_readonly() core library API been checked for yet?
+            If so, is it present?
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.IsReadOnly(System.Data.SQLite.SQLiteStatement)">
+            <summary>
+            Returns non-zero if the specified statement is read-only in nature.
+            </summary>
+            <param name="stmt">The statement to check.</param>
+            <returns>True if the outer query is read-only.</returns>
+        </member>
+        <member name="F:System.Data.SQLite.SQLite3.forceLogPrepare">
+            <summary>
+            This field is used to keep track of whether or not the
+            "SQLite_ForceLogPrepare" environment variable has been queried.  If so,
+            it will only be non-zero if the environment variable was present.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLite3.forceLogLifecycle">
+            <summary>
+            This field is used to keep track of whether or not the
+            "SQLite_ForceLogLifecycle" environment variable has been queried.  If
+            so, it will only be non-zero if the environment variable was present.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.ForceLogPrepare">
+            <summary>
+            Determines if all calls to prepare a SQL query will be logged,
+            regardless of the flags for the associated connection.
+            </summary>
+            <returns>
+            Non-zero to log all calls to prepare a SQL query.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.ForceLogLifecycle">
+            <summary>
+            Determines if calls into key members pertaining to the lifecycle of
+            connections and their associated classes will be logged, regardless
+            of the flags for the associated connection.
+            </summary>
+            <returns>
+            Non-zero to log calls into key members pertaining to the lifecycle of
+            connections and their associated classes (e.g. LINQ, EF6, etc).
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.GetShimExtensionFileName(System.Boolean@)">
+            <summary>
+            Determines the file name of the native library containing the native
+            "vtshim" extension -AND- whether it should be dynamically loaded by
+            this class.
+            </summary>
+            <param name="isLoadNeeded">
+            This output parameter will be set to non-zero if the returned native
+            library file name should be dynamically loaded prior to attempting
+            the creation of native disposable extension modules.
+            </param>
+            <returns>
+            The file name of the native library containing the native "vtshim"
+            extension -OR- null if it cannot be determined.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.CreateModule(System.Data.SQLite.SQLiteModule,System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Calls the native SQLite core library in order to create a disposable
+            module containing the implementation of a virtual table.
+            </summary>
+            <param name="module">
+            The module object to be used when creating the native disposable module.
+            </param>
+            <param name="flags">
+            The flags for the associated <see cref="T:System.Data.SQLite.SQLiteConnection"/> object instance.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.DisposeModule(System.Data.SQLite.SQLiteModule,System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Calls the native SQLite core library in order to cleanup the resources
+            associated with a module containing the implementation of a virtual table.
+            </summary>
+            <param name="module">
+            The module object previously passed to the <see cref="M:System.Data.SQLite.SQLite3.CreateModule(System.Data.SQLite.SQLiteModule,System.Data.SQLite.SQLiteConnectionFlags)"/>
+            method.
+            </param>
+            <param name="flags">
+            The flags for the associated <see cref="T:System.Data.SQLite.SQLiteConnection"/> object instance.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.DeclareVirtualTable(System.Data.SQLite.SQLiteModule,System.String,System.String@)">
+            <summary>
+            Calls the native SQLite core library in order to declare a virtual table
+            in response to a call into the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/>
+            or <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> virtual table methods.
+            </summary>
+            <param name="module">
+            The virtual table module that is to be responsible for the virtual table
+            being declared.
+            </param>
+            <param name="strSql">
+            The string containing the SQL statement describing the virtual table to
+            be declared.
+            </param>
+            <param name="error">
+            Upon success, the contents of this parameter are undefined.  Upon failure,
+            it should contain an appropriate error message.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.DeclareVirtualFunction(System.Data.SQLite.SQLiteModule,System.Int32,System.String,System.String@)">
+            <summary>
+            Calls the native SQLite core library in order to declare a virtual table
+            function in response to a call into the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/>
+            or <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> virtual table methods.
+            </summary>
+            <param name="module">
+            The virtual table module that is to be responsible for the virtual table
+            function being declared.
+            </param>
+            <param name="argumentCount">
+            The number of arguments to the function being declared.
+            </param>
+            <param name="name">
+            The name of the function being declared.
+            </param>
+            <param name="error">
+            Upon success, the contents of this parameter are undefined.  Upon failure,
+            it should contain an appropriate error message.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.GetStatusDbOpsNames">
+            <summary>
+            Builds an error message string fragment containing the
+            defined values of the <see cref="T:System.Data.SQLite.SQLiteStatusOpsEnum"/>
+            enumeration.
+            </summary>
+            <returns>
+            The built string fragment.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.GetLimitOpsNames">
+            <summary>
+            Builds an error message string fragment containing the
+            defined values of the <see cref="T:System.Data.SQLite.SQLiteLimitOpsEnum"/>
+            enumeration.
+            </summary>
+            <returns>
+            The built string fragment.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.GetConfigDbOpsNames">
+            <summary>
+            Builds an error message string fragment containing the
+            defined values of the <see cref="T:System.Data.SQLite.SQLiteConfigDbOpsEnum"/>
+            enumeration.
+            </summary>
+            <returns>
+            The built string fragment.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.GetStatusParameter(System.Data.SQLite.SQLiteStatusOpsEnum,System.Boolean,System.Int32@,System.Int32@)">
+            <summary>
+            Returns the current and/or highwater values for the specified
+            database status parameter.
+            </summary>
+            <param name="option">
+            The database status parameter to query.
+            </param>
+            <param name="reset">
+            Non-zero to reset the highwater value to the current value.
+            </param>
+            <param name="current">
+            If applicable, receives the current value.
+            </param>
+            <param name="highwater">
+            If applicable, receives the highwater value.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.SetLimitOption(System.Data.SQLite.SQLiteLimitOpsEnum,System.Int32)">
+            <summary>
+            Change a limit value for the database.
+            </summary>
+            <param name="option">
+            The database limit to change.
+            </param>
+            <param name="value">
+            The new value for the specified limit.
+            </param>
+            <returns>
+            The old value for the specified limit -OR- negative one if an error
+            occurs.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.SetConfigurationOption(System.Data.SQLite.SQLiteConfigDbOpsEnum,System.Object)">
+            <summary>
+            Change a configuration option value for the database.
+            </summary>
+            <param name="option">
+            The database configuration option to change.
+            </param>
+            <param name="value">
+            The new value for the specified configuration option.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.SetLoadExtension(System.Boolean)">
+            <summary>
+            Enables or disables extension loading by SQLite.
+            </summary>
+            <param name="bOnOff">
+            True to enable loading of extensions, false to disable.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.LoadExtension(System.String,System.String)">
+            <summary>
+            Loads a SQLite extension library from the named file.
+            </summary>
+            <param name="fileName">
+            The name of the dynamic link library file containing the extension.
+            </param>
+            <param name="procName">
+            The name of the exported function used to initialize the extension.
+            If null, the default "sqlite3_extension_init" will be used.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.SetExtendedResultCodes(System.Boolean)">
+            Enables or disables extended result codes returned by SQLite
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.ResultCode">
+            Gets the last SQLite error code
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.ExtendedResultCode">
+            Gets the last SQLite extended error code
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.LogMessage(System.Data.SQLite.SQLiteErrorCode,System.String)">
+            Add a log message via the SQLite sqlite3_log interface.
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.StaticLogMessage(System.Data.SQLite.SQLiteErrorCode,System.String)">
+            Add a log message via the SQLite sqlite3_log interface.
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.SetLogCallback(System.Data.SQLite.SQLiteLogCallback)">
+            <summary>
+            Allows the setting of a logging callback invoked by SQLite when a
+            log event occurs.  Only one callback may be set.  If NULL is passed,
+            the logging callback is unregistered.
+            </summary>
+            <param name="func">The callback function to invoke.</param>
+            <returns>Returns a result code</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.AppendError(System.Text.StringBuilder,System.String)">
+            <summary>
+            Appends an error message and an appropriate line-ending to a <see cref="T:System.Text.StringBuilder"/>
+            instance.  This is useful because the .NET Compact Framework has a slightly different set
+            of supported methods for the <see cref="T:System.Text.StringBuilder"/> class.
+            </summary>
+            <param name="builder">
+            The <see cref="T:System.Text.StringBuilder"/> instance to append to.
+            </param>
+            <param name="message">
+            The message to append.  It will be followed by an appropriate line-ending.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.UnhookNativeCallbacks(System.Boolean,System.Boolean)">
+            <summary>
+            This method attempts to cause the SQLite native library to invalidate
+            its function pointers that refer to this instance.  This is necessary
+            to prevent calls from native code into delegates that may have been
+            garbage collected.  Normally, these types of issues can only arise for
+            connections that are added to the pool; howver, it is good practice to
+            unconditionally invalidate function pointers that may refer to objects
+            being disposed.
+            </summary>
+            <param name="includeGlobal">
+            Non-zero to also invalidate global function pointers (i.e. those that
+            are not directly associated with this connection on the native side).
+            </param>
+            <param name="canThrow">
+            Non-zero if this method is being executed within a context where it can
+            throw an exception in the event of failure; otherwise, zero.
+            </param>
+            <returns>
+            Non-zero if this method was successful; otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.FreeDbName(System.Boolean)">
+            <summary>
+            This method attempts to free the cached database name used with the
+            <see cref="M:System.Data.SQLite.SQLite3.SetConfigurationOption(System.Data.SQLite.SQLiteConfigDbOpsEnum,System.Object)"/> method.
+            </summary>
+            <param name="canThrow">
+            Non-zero if this method is being executed within a context where it can
+            throw an exception in the event of failure; otherwise, zero.
+            </param>
+            <returns>
+            Non-zero if this method was successful; otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.InitializeBackup(System.Data.SQLite.SQLiteConnection,System.String,System.String)">
+            <summary>
+            Creates a new SQLite backup object based on the provided destination
+            database connection.  The source database connection is the one
+            associated with this object.  The source and destination database
+            connections cannot be the same.
+            </summary>
+            <param name="destCnn">The destination database connection.</param>
+            <param name="destName">The destination database name.</param>
+            <param name="sourceName">The source database name.</param>
+            <returns>The newly created backup object.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.StepBackup(System.Data.SQLite.SQLiteBackup,System.Int32,System.Boolean@)">
+            <summary>
+            Copies up to N pages from the source database to the destination
+            database associated with the specified backup object.
+            </summary>
+            <param name="backup">The backup object to use.</param>
+            <param name="nPage">
+            The number of pages to copy, negative to copy all remaining pages.
+            </param>
+            <param name="retry">
+            Set to true if the operation needs to be retried due to database
+            locking issues; otherwise, set to false.
+            </param>
+            <returns>
+            True if there are more pages to be copied, false otherwise.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.RemainingBackup(System.Data.SQLite.SQLiteBackup)">
+            <summary>
+            Returns the number of pages remaining to be copied from the source
+            database to the destination database associated with the specified
+            backup object.
+            </summary>
+            <param name="backup">The backup object to check.</param>
+            <returns>The number of pages remaining to be copied.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.PageCountBackup(System.Data.SQLite.SQLiteBackup)">
+            <summary>
+            Returns the total number of pages in the source database associated
+            with the specified backup object.
+            </summary>
+            <param name="backup">The backup object to check.</param>
+            <returns>The total number of pages in the source database.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.FinishBackup(System.Data.SQLite.SQLiteBackup)">
+            <summary>
+            Destroys the backup object, rolling back any backup that may be in
+            progess.
+            </summary>
+            <param name="backup">The backup object to destroy.</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.IsInitialized">
+            <summary>
+            Determines if the SQLite core library has been initialized for the
+            current process.
+            </summary>
+            <returns>
+            A boolean indicating whether or not the SQLite core library has been
+            initialized for the current process.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.StaticIsInitialized">
+            <summary>
+            Determines if the SQLite core library has been initialized for the
+            current process.
+            </summary>
+            <returns>
+            A boolean indicating whether or not the SQLite core library has been
+            initialized for the current process.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3.GetValue(System.Data.SQLite.SQLiteStatement,System.Data.SQLite.SQLiteConnectionFlags,System.Int32,System.Data.SQLite.SQLiteType)">
+            <summary>
+            Helper function to retrieve a column of data from an active statement.
+            </summary>
+            <param name="stmt">The statement being step()'d through</param>
+            <param name="flags">The flags associated with the connection.</param>
+            <param name="index">The column index to retrieve</param>
+            <param name="typ">The type of data contained in the column.  If Uninitialized, this function will retrieve the datatype information.</param>
+            <returns>Returns the data in the column</returns>
+        </member>
+        <member name="P:System.Data.SQLite.SQLite3.OwnHandle">
+            <summary>
+            Returns non-zero if the underlying native connection handle is owned
+            by this instance.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLite3.Functions">
+            <summary>
+            Returns the logical list of functions associated with this connection.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLite3_UTF16">
+            <summary>
+            Alternate SQLite3 object, overriding many text behaviors to support UTF-16 (Unicode)
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3_UTF16.#ctor(System.Data.SQLite.SQLiteDateFormats,System.DateTimeKind,System.String,System.IntPtr,System.String,System.Boolean)">
+            <summary>
+            Constructs the object used to interact with the SQLite core library
+            using the UTF-8 text encoding.
+            </summary>
+            <param name="fmt">
+            The DateTime format to be used when converting string values to a
+            DateTime and binding DateTime parameters.
+            </param>
+            <param name="kind">
+            The <see cref="T:System.DateTimeKind"/> to be used when creating DateTime
+            values.
+            </param>
+            <param name="fmtString">
+            The format string to be used when parsing and formatting DateTime
+            values.
+            </param>
+            <param name="db">
+            The native handle to be associated with the database connection.
+            </param>
+            <param name="fileName">
+            The fully qualified file name associated with <paramref name="db"/>.
+            </param>
+            <param name="ownHandle">
+            Non-zero if the newly created object instance will need to dispose
+            of <paramref name="db"/> when it is no longer needed.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLite3_UTF16.ToString(System.IntPtr,System.Int32)">
+            <summary>
+            Overrides SQLiteConvert.ToString() to marshal UTF-16 strings instead of UTF-8
+            </summary>
+            <param name="b">A pointer to a UTF-16 string</param>
+            <param name="nbytelen">The length (IN BYTES) of the string</param>
+            <returns>A .NET string</returns>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteBackup">
+            <summary>
+            Represents a single SQL backup in SQLite.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteBackup._sql">
+            <summary>
+            The underlying SQLite object this backup is bound to.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteBackup._sqlite_backup">
+            <summary>
+            The actual backup handle.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteBackup._destDb">
+            <summary>
+            The destination database for the backup.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteBackup._zDestName">
+            <summary>
+            The destination database name for the backup.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteBackup._sourceDb">
+            <summary>
+            The source database for the backup.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteBackup._zSourceName">
+            <summary>
+            The source database name for the backup.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteBackup._stepResult">
+            <summary>
+            The last result from the StepBackup method of the SQLite3 class.
+            This is used to determine if the call to the FinishBackup method of
+            the SQLite3 class should throw an exception when it receives a non-Ok
+            return code from the core SQLite library.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBackup.#ctor(System.Data.SQLite.SQLiteBase,System.Data.SQLite.SQLiteBackupHandle,System.IntPtr,System.Byte[],System.IntPtr,System.Byte[])">
+            <summary>
+            Initializes the backup.
+            </summary>
+            <param name="sqlbase">The base SQLite object.</param>
+            <param name="backup">The backup handle.</param>
+            <param name="destDb">The destination database for the backup.</param>
+            <param name="zDestName">The destination database name for the backup.</param>
+            <param name="sourceDb">The source database for the backup.</param>
+            <param name="zSourceName">The source database name for the backup.</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBackup.Dispose">
+            <summary>
+            Disposes and finalizes the backup.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.ISQLiteSchemaExtensions">
+             <summary>
+            
+             </summary>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteSchemaExtensions.BuildTempSchema(System.Data.SQLite.SQLiteConnection)">
+            <summary>
+            Creates temporary tables on the connection so schema information can be queried.
+            </summary>
+            <param name="connection">
+            The connection upon which to build the schema tables.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteConnectionFlags">
+            <summary>
+            The extra behavioral flags that can be applied to a connection.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.None">
+            <summary>
+            No extra flags.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.LogPrepare">
+            <summary>
+            Enable logging of all SQL statements to be prepared.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.LogPreBind">
+            <summary>
+            Enable logging of all bound parameter types and raw values.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.LogBind">
+            <summary>
+            Enable logging of all bound parameter strongly typed values.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.LogCallbackException">
+            <summary>
+            Enable logging of all exceptions caught from user-provided
+            managed code called from native code via delegates.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.LogBackup">
+            <summary>
+            Enable logging of backup API errors.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.NoExtensionFunctions">
+            <summary>
+            Skip adding the extension functions provided by the native
+            interop assembly.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.BindUInt32AsInt64">
+            <summary>
+            When binding parameter values with the <see cref="T:System.UInt32"/>
+            type, use the interop method that accepts an <see cref="T:System.Int64"/>
+            value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.BindAllAsText">
+            <summary>
+            When binding parameter values, always bind them as though they were
+            plain text (i.e. no numeric, date/time, or other conversions should
+            be attempted).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.GetAllAsText">
+            <summary>
+            When returning column values, always return them as though they were
+            plain text (i.e. no numeric, date/time, or other conversions should
+            be attempted).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.NoLoadExtension">
+            <summary>
+            Prevent this <see cref="T:System.Data.SQLite.SQLiteConnection"/> object instance from
+            loading extensions.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.NoCreateModule">
+            <summary>
+            Prevent this <see cref="T:System.Data.SQLite.SQLiteConnection"/> object instance from
+            creating virtual table modules.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.NoBindFunctions">
+            <summary>
+            Skip binding any functions provided by other managed assemblies when
+            opening the connection.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.NoLogModule">
+            <summary>
+            Skip setting the logging related properties of the
+            <see cref="T:System.Data.SQLite.SQLiteModule"/> object instance that was passed to
+            the <see cref="M:System.Data.SQLite.SQLiteConnection.CreateModule(System.Data.SQLite.SQLiteModule)"/> method.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.LogModuleError">
+            <summary>
+            Enable logging of all virtual table module errors seen by the
+            <see cref="M:System.Data.SQLite.SQLiteModule.SetTableError(System.IntPtr,System.String)"/> method.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.LogModuleException">
+            <summary>
+            Enable logging of certain virtual table module exceptions that cannot
+            be easily discovered via other means.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.TraceWarning">
+            <summary>
+            Enable tracing of potentially important [non-fatal] error conditions
+            that cannot be easily reported through other means.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.ConvertInvariantText">
+            <summary>
+            When binding parameter values, always use the invariant culture when
+            converting their values from strings.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.BindInvariantText">
+            <summary>
+            When binding parameter values, always use the invariant culture when
+            converting their values to strings.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.NoConnectionPool">
+            <summary>
+            Disable using the connection pool by default.  If the "Pooling"
+            connection string property is specified, its value will override
+            this flag.  The precise outcome of combining this flag with the
+            <see cref="F:System.Data.SQLite.SQLiteConnectionFlags.UseConnectionPool"/> flag is unspecified; however,
+            one of the flags will be in effect.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.UseConnectionPool">
+            <summary>
+            Enable using the connection pool by default.  If the "Pooling"
+            connection string property is specified, its value will override
+            this flag.  The precise outcome of combining this flag with the
+            <see cref="F:System.Data.SQLite.SQLiteConnectionFlags.NoConnectionPool"/> flag is unspecified; however,
+            one of the flags will be in effect.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.UseConnectionTypes">
+            <summary>
+            Enable using per-connection mappings between type names and
+            <see cref="T:System.Data.DbType"/> values.  Also see the
+            <see cref="M:System.Data.SQLite.SQLiteConnection.ClearTypeMappings"/>,
+            <see cref="M:System.Data.SQLite.SQLiteConnection.GetTypeMappings"/>, and
+            <see cref="M:System.Data.SQLite.SQLiteConnection.AddTypeMapping(System.String,System.Data.DbType,System.Boolean)"/> methods.  These
+            per-connection mappings, when present, override the corresponding
+            global mappings.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.NoGlobalTypes">
+            <summary>
+            Disable using global mappings between type names and
+            <see cref="T:System.Data.DbType"/> values.  This may be useful in some very narrow
+            cases; however, if there are no per-connection type mappings, the
+            fallback defaults will be used for both type names and their
+            associated <see cref="T:System.Data.DbType"/> values.  Therefore, use of this flag
+            is not recommended.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.StickyHasRows">
+            <summary>
+            When the <see cref="P:System.Data.SQLite.SQLiteDataReader.HasRows"/> property is used, it
+            should return non-zero if there were ever any rows in the associated
+            result sets.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.StrictEnlistment">
+            <summary>
+            Enable "strict" transaction enlistment semantics.  Setting this flag
+            will cause an exception to be thrown if an attempt is made to enlist
+            in a transaction with an unavailable or unsupported isolation level.
+            In the future, more extensive checks may be enabled by this flag as
+            well.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.MapIsolationLevels">
+            <summary>
+            Enable mapping of unsupported transaction isolation levels to the
+            closest supported transaction isolation level.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.DetectTextAffinity">
+            <summary>
+            When returning column values, attempt to detect the affinity of
+            textual values by checking if they fully conform to those of the
+            <see cref="F:System.Data.SQLite.TypeAffinity.Null"/>,
+            <see cref="F:System.Data.SQLite.TypeAffinity.Int64"/>,
+            <see cref="F:System.Data.SQLite.TypeAffinity.Double"/>,
+            or <see cref="F:System.Data.SQLite.TypeAffinity.DateTime"/> types.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.DetectStringType">
+            <summary>
+            When returning column values, attempt to detect the type of
+            string values by checking if they fully conform to those of
+            the <see cref="F:System.Data.SQLite.TypeAffinity.Null"/>,
+            <see cref="F:System.Data.SQLite.TypeAffinity.Int64"/>,
+            <see cref="F:System.Data.SQLite.TypeAffinity.Double"/>,
+            or <see cref="F:System.Data.SQLite.TypeAffinity.DateTime"/> types.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.NoConvertSettings">
+            <summary>
+            Skip querying runtime configuration settings for use by the
+            <see cref="T:System.Data.SQLite.SQLiteConvert"/> class, including the default
+            <see cref="T:System.Data.DbType"/> value and default database type name.
+            <b>NOTE: If the <see cref="P:System.Data.SQLite.SQLiteConnection.DefaultDbType"/>
+            and/or <see cref="P:System.Data.SQLite.SQLiteConnection.DefaultTypeName"/>
+            properties are not set explicitly nor set via their connection
+            string properties and repeated calls to determine these runtime
+            configuration settings are seen to be a problem, this flag
+            should be set.</b>
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.BindDateTimeWithKind">
+            <summary>
+            When binding parameter values with the <see cref="T:System.DateTime"/>
+            type, take their <see cref="T:System.DateTimeKind"/> into account as
+            well as that of the associated <see cref="T:System.Data.SQLite.SQLiteConnection"/>.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.RollbackOnException">
+            <summary>
+            If an exception is caught when raising the
+            <see cref="E:System.Data.SQLite.SQLiteConnection.Commit"/> event, the transaction
+            should be rolled back.  If this is not specified, the transaction
+            will continue the commit process instead.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.DenyOnException">
+            <summary>
+            If an exception is caught when raising the
+            <see cref="E:System.Data.SQLite.SQLiteConnection.Authorize"/> event, the action should
+            should be denied.  If this is not specified, the action will be
+            allowed instead.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.InterruptOnException">
+            <summary>
+            If an exception is caught when raising the
+            <see cref="E:System.Data.SQLite.SQLiteConnection.Progress"/> event, the operation
+            should be interrupted.  If this is not specified, the operation
+            will simply continue.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.UnbindFunctionsOnClose">
+            <summary>
+            Attempt to unbind all functions provided by other managed assemblies
+            when closing the connection.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.NoVerifyTextAffinity">
+            <summary>
+            When returning column values as a <see cref="T:System.String"/>, skip
+            verifying their affinity.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.UseConnectionBindValueCallbacks">
+            <summary>
+            Enable using per-connection mappings between type names and
+            <see cref="T:System.Data.SQLite.SQLiteBindValueCallback"/> values.  Also see the
+            <see cref="M:System.Data.SQLite.SQLiteConnection.ClearTypeCallbacks"/>,
+            <see cref="M:System.Data.SQLite.SQLiteConnection.TryGetTypeCallbacks(System.String,System.Data.SQLite.SQLiteTypeCallbacks@)"/>, and
+            <see cref="M:System.Data.SQLite.SQLiteConnection.SetTypeCallbacks(System.String,System.Data.SQLite.SQLiteTypeCallbacks)"/> methods.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.UseConnectionReadValueCallbacks">
+            <summary>
+            Enable using per-connection mappings between type names and
+            <see cref="T:System.Data.SQLite.SQLiteReadValueCallback"/> values.  Also see the
+            <see cref="M:System.Data.SQLite.SQLiteConnection.ClearTypeCallbacks"/>,
+            <see cref="M:System.Data.SQLite.SQLiteConnection.TryGetTypeCallbacks(System.String,System.Data.SQLite.SQLiteTypeCallbacks@)"/>, and
+            <see cref="M:System.Data.SQLite.SQLiteConnection.SetTypeCallbacks(System.String,System.Data.SQLite.SQLiteTypeCallbacks)"/> methods.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.UseParameterNameForTypeName">
+            <summary>
+            If the database type name has not been explicitly set for the
+            parameter specified, fallback to using the parameter name.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.UseParameterDbTypeForTypeName">
+            <summary>
+            If the database type name has not been explicitly set for the
+            parameter specified, fallback to using the database type name
+            associated with the <see cref="T:System.Data.DbType"/> value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.NoVerifyTypeAffinity">
+            <summary>
+            When returning column values, skip verifying their affinity.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.AllowNestedTransactions">
+            <summary>
+            Allow transactions to be nested.  The outermost transaction still
+            controls whether or not any changes are ultimately committed or
+            rolled back.  All non-outermost transactions are implemented using
+            the SAVEPOINT construct.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.BindDecimalAsText">
+            <summary>
+            When binding parameter values, always bind <see cref="T:System.Decimal"/>
+            values as though they were plain text (i.e. not <see cref="T:System.Decimal"/>,
+            which is the legacy behavior).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.GetDecimalAsText">
+            <summary>
+            When returning column values, always return <see cref="T:System.Decimal"/>
+            values as though they were plain text (i.e. not <see cref="T:System.Double"/>,
+            which is the legacy behavior).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.BindInvariantDecimal">
+            <summary>
+            When binding <see cref="T:System.Decimal"/> parameter values, always use
+            the invariant culture when converting their values to strings.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.GetInvariantDecimal">
+            <summary>
+            When returning <see cref="T:System.Decimal"/> column values, always use
+            the invariant culture when converting their values from strings.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.WaitForEnlistmentReset">
+            <summary>
+            <b>EXPERIMENTAL</b> --
+            Enable waiting for the enlistment to be reset prior to attempting
+            to create a new enlistment.  This may be necessary due to the
+            semantics used by distributed transactions, which complete
+            asynchronously.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.GetInvariantInt64">
+            <summary>
+            When returning <see cref="T:System.Int64"/> column values, always use
+            the invariant culture when converting their values from strings.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.GetInvariantDouble">
+            <summary>
+            When returning <see cref="T:System.Double"/> column values, always use
+            the invariant culture when converting their values from strings.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.StrictConformance">
+            <summary>
+            <b>EXPERIMENTAL</b> --
+            Enable strict conformance to the ADO.NET standard, e.g. use of
+            thrown exceptions to indicate common error conditions.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.HidePassword">
+            <summary>
+            <b>EXPERIMENTAL</b> --
+            When opening a connection, attempt to hide the password from the
+            connection string, etc.  Given the memory architecture of the CLR,
+            (and P/Invoke) this is not 100% reliable and should not be relied
+            upon for security critical uses or applications.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.BindAndGetAllAsText">
+            <summary>
+            When binding parameter values or returning column values, always
+            treat them as though they were plain text (i.e. no numeric,
+            date/time, or other conversions should be attempted).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.ConvertAndBindInvariantText">
+            <summary>
+            When binding parameter values, always use the invariant culture when
+            converting their values to strings or from strings.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.BindAndGetAllAsInvariantText">
+            <summary>
+            When binding parameter values or returning column values, always
+            treat them as though they were plain text (i.e. no numeric,
+            date/time, or other conversions should be attempted) and always
+            use the invariant culture when converting their values to strings.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.ConvertAndBindAndGetAllAsInvariantText">
+            <summary>
+            When binding parameter values or returning column values, always
+            treat them as though they were plain text (i.e. no numeric,
+            date/time, or other conversions should be attempted) and always
+            use the invariant culture when converting their values to strings
+            or from strings.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.UseConnectionAllValueCallbacks">
+            <summary>
+            Enables use of all per-connection value handling callbacks.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.UseParameterAnythingForTypeName">
+            <summary>
+            Enables use of all applicable <see cref="T:System.Data.SQLite.SQLiteParameter"/>
+            properties as fallbacks for the database type name.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.LogAll">
+            <summary>
+            Enable all logging.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.LogDefault">
+            <summary>
+            The default logging related flags for new connections.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.Default">
+            <summary>
+            The default extra flags for new connections.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionFlags.DefaultAndLogAll">
+            <summary>
+            The default extra flags for new connections with all logging enabled.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteStatusOpsEnum">
+            <summary>
+            These are the supported status parameters for use with the native
+            SQLite library.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStatusOpsEnum.SQLITE_DBSTATUS_LOOKASIDE_USED">
+            <summary>
+            This parameter returns the number of lookaside memory slots
+            currently checked out.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStatusOpsEnum.SQLITE_DBSTATUS_CACHE_USED">
+            <summary>
+            This parameter returns the approximate number of bytes of
+            heap memory used by all pager caches associated with the
+            database connection. The highwater mark associated with
+            SQLITE_DBSTATUS_CACHE_USED is always 0.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStatusOpsEnum.SQLITE_DBSTATUS_SCHEMA_USED">
+            <summary>
+            This parameter returns the approximate number of bytes of
+            heap memory used to store the schema for all databases
+            associated with the connection - main, temp, and any ATTACH-ed
+            databases. The full amount of memory used by the schemas is
+            reported, even if the schema memory is shared with other
+            database connections due to shared cache mode being enabled.
+            The highwater mark associated with SQLITE_DBSTATUS_SCHEMA_USED
+            is always 0.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStatusOpsEnum.SQLITE_DBSTATUS_STMT_USED">
+            <summary>
+            This parameter returns the number malloc attempts that might
+            have been satisfied using lookaside memory but failed due to
+            all lookaside memory already being in use. Only the high-water
+            value is meaningful; the current value is always zero.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStatusOpsEnum.SQLITE_DBSTATUS_LOOKASIDE_HIT">
+            <summary>
+            This parameter returns the number malloc attempts that were
+            satisfied using lookaside memory. Only the high-water value
+            is meaningful; the current value is always zero.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStatusOpsEnum.SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE">
+            <summary>
+            This parameter returns the number malloc attempts that might
+            have been satisfied using lookaside memory but failed due to
+            the amount of memory requested being larger than the lookaside
+            slot size. Only the high-water value is meaningful; the current
+            value is always zero.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStatusOpsEnum.SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL">
+            <summary>
+            This parameter returns the number malloc attempts that might
+            have been satisfied using lookaside memory but failed due to
+            the amount of memory requested being larger than the lookaside
+            slot size. Only the high-water value is meaningful; the current
+            value is always zero.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStatusOpsEnum.SQLITE_DBSTATUS_CACHE_HIT">
+            <summary>
+            This parameter returns the number of pager cache hits that
+            have occurred. The highwater mark associated with
+            SQLITE_DBSTATUS_CACHE_HIT is always 0.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStatusOpsEnum.SQLITE_DBSTATUS_CACHE_MISS">
+            <summary>
+            This parameter returns the number of pager cache misses that
+            have occurred. The highwater mark associated with
+            SQLITE_DBSTATUS_CACHE_MISS is always 0.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStatusOpsEnum.SQLITE_DBSTATUS_CACHE_WRITE">
+            <summary>
+            This parameter returns the number of dirty cache entries that
+            have been written to disk. Specifically, the number of pages
+            written to the wal file in wal mode databases, or the number
+            of pages written to the database file in rollback mode
+            databases. Any pages written as part of transaction rollback
+            or database recovery operations are not included. If an IO or
+            other error occurs while writing a page to disk, the effect
+            on subsequent SQLITE_DBSTATUS_CACHE_WRITE requests is
+            undefined. The highwater mark associated with
+            SQLITE_DBSTATUS_CACHE_WRITE is always 0.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStatusOpsEnum.SQLITE_DBSTATUS_DEFERRED_FKS">
+            <summary>
+            This parameter returns zero for the current value if and only
+            if all foreign key constraints (deferred or immediate) have
+            been resolved. The highwater mark is always 0.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStatusOpsEnum.SQLITE_DBSTATUS_CACHE_USED_SHARED">
+            <summary>
+            This parameter is similar to DBSTATUS_CACHE_USED, except that
+            if a pager cache is shared between two or more connections the
+            bytes of heap memory used by that pager cache is divided evenly
+            between the attached connections. In other words, if none of
+            the pager caches associated with the database connection are
+            shared, this request returns the same value as DBSTATUS_CACHE_USED.
+            Or, if one or more or the pager caches are shared, the value
+            returned by this call will be smaller than that returned by
+            DBSTATUS_CACHE_USED. The highwater mark associated with
+            SQLITE_DBSTATUS_CACHE_USED_SHARED is always 0.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStatusOpsEnum.SQLITE_DBSTATUS_CACHE_SPILL">
+            <summary>
+            This parameter returns the number of dirty cache entries that have
+            been written to disk in the middle of a transaction due to the page
+            cache overflowing. Transactions are more efficient if they are
+            written to disk all at once. When pages spill mid-transaction, that
+            introduces additional overhead. This parameter can be used help
+            identify inefficiencies that can be resolved by increasing the cache
+            size.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteConfigDbOpsEnum">
+            <summary>
+            These are the supported configuration verbs for use with the native
+            SQLite library.  They are used with the
+            <see cref="M:System.Data.SQLite.SQLiteConnection.SetConfigurationOption(System.Data.SQLite.SQLiteConfigDbOpsEnum,System.Object)"/> method.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_NONE">
+            <summary>
+            This value represents an unknown (or invalid) option, do not use it.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_MAINDBNAME">
+            <summary>
+            This option is used to change the name of the "main" database
+            schema.  The sole argument is a pointer to a constant UTF8 string
+            which will become the new schema name in place of "main".
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_LOOKASIDE">
+            <summary>
+            This option is used to configure the lookaside memory allocator.
+            The value must be an array with three elements.  The second element
+            must be an <see cref="T:System.Int32"/> containing the size of each buffer
+            slot.  The third element must be an <see cref="T:System.Int32"/> containing
+            the number of slots.  The first element must be an <see cref="T:System.IntPtr"/>
+            that points to a native memory buffer of bytes equal to or greater
+            than the product of the second and third element values.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_ENABLE_FKEY">
+            <summary>
+            This option is used to enable or disable the enforcement of
+            foreign key constraints.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_ENABLE_TRIGGER">
+            <summary>
+            This option is used to enable or disable triggers.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER">
+            <summary>
+            This option is used to enable or disable the two-argument version
+            of the fts3_tokenizer() function which is part of the FTS3 full-text
+            search engine extension.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION">
+            <summary>
+            This option is used to enable or disable the loading of extensions.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE">
+            <summary>
+            This option is used to enable or disable the automatic checkpointing
+            when a WAL database is closed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_ENABLE_QPSG">
+            <summary>
+            This option is used to enable or disable the query planner stability
+            guarantee (QPSG).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_TRIGGER_EQP">
+            <summary>
+            This option is used to enable or disable the extra EXPLAIN QUERY PLAN
+            output for trigger programs.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_RESET_DATABASE">
+            <summary>
+            This option is used as part of the process to reset a database back
+            to an empty state.  Because resetting a database is destructive and
+            irreversible, the process requires the use of this obscure flag and
+            multiple steps to help ensure that it does not happen by accident.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_DEFENSIVE">
+            <summary>
+            This option activates or deactivates the "defensive" flag for a
+            database connection.  When the defensive flag is enabled, language
+            features that allow ordinary SQL to deliberately corrupt the database
+            file are disabled.  The disabled features include but are not limited
+            to the following:
+            <![CDATA[<ul>]]>
+            <![CDATA[<li>]]>
+            The PRAGMA writable_schema=ON statement.
+            <![CDATA[</li>]]>
+            <![CDATA[<li>]]>
+            The PRAGMA journal_mode=OFF statement.
+            <![CDATA[</li>]]>
+            <![CDATA[<li>]]>
+            Writes to the sqlite_dbpage virtual table.
+            <![CDATA[</li>]]>
+            <![CDATA[<li>]]>
+            Direct writes to shadow tables.
+            <![CDATA[</li>]]>
+            <![CDATA[</ul>]]>
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_WRITABLE_SCHEMA">
+            <summary>
+            This option activates or deactivates the "writable_schema" flag.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_LEGACY_ALTER_TABLE">
+            <summary>
+            This option activates or deactivates the legacy behavior of the ALTER
+            TABLE RENAME command such it behaves as it did prior to version 3.24.0
+            (2018-06-04).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_DQS_DML">
+            <summary>
+            This option activates or deactivates the legacy double-quoted string
+            literal misfeature for DML statement only, that is DELETE, INSERT,
+            SELECT, and UPDATE statements.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_DQS_DDL">
+            <summary>
+            This option activates or deactivates the legacy double-quoted string
+            literal misfeature for DDL statements, such as CREATE TABLE and CREATE
+            INDEX.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_ENABLE_VIEW">
+            <summary>
+            This option is used to enable or disable CREATE VIEW.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_LEGACY_FILE_FORMAT">
+            <summary>
+            This option activates or deactivates the legacy file format flag.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConfigDbOpsEnum.SQLITE_DBCONFIG_TRUSTED_SCHEMA">
+            <summary>
+            This option tells SQLite to assume that database schemas (i.e. the
+            contents of the sqlite_master tables) are untainted by malicious
+            content.  When the trusted schema option is disabled, SQLite takes
+            additional defensive steps to protect the application from harm
+            including:
+            <![CDATA[<ul>]]>
+            <![CDATA[<li>]]>
+            Prohibit the use of SQL functions inside triggers, views, CHECK
+            constraints, DEFAULT clauses, expression indexes, partial indexes,
+            or generated columns unless those functions are tagged with
+            SQLITE_INNOCUOUS.
+            <![CDATA[</li>]]>
+            <![CDATA[<li>]]>
+            Prohibit the use of virtual tables inside of triggers or views
+            unless those virtual tables are tagged with SQLITE_VTAB_INNOCUOUS.
+            <![CDATA[</ul>]]>
+            This setting defaults to "on" for legacy compatibility, however
+            all applications are advised to turn it off if possible.  This
+            setting can also be controlled using the PRAGMA trusted_schema
+            statement.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteTraceFlags">
+            <summary>
+            These constants are used with the sqlite3_trace_v2() API and the
+            callbacks registered by it.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteLimitOpsEnum">
+            <summary>
+            These constants are used with the sqlite3_limit() API.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteLimitOpsEnum.SQLITE_LIMIT_NONE">
+            <summary>
+            This value represents an unknown (or invalid) limit, do not use it.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteLimitOpsEnum.SQLITE_LIMIT_LENGTH">
+            <summary>
+            The maximum size of any string or BLOB or table row, in bytes.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteLimitOpsEnum.SQLITE_LIMIT_SQL_LENGTH">
+            <summary>
+            The maximum length of an SQL statement, in bytes.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteLimitOpsEnum.SQLITE_LIMIT_COLUMN">
+            <summary>
+            The maximum number of columns in a table definition or in the
+            result set of a SELECT or the maximum number of columns in an
+            index or in an ORDER BY or GROUP BY clause.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteLimitOpsEnum.SQLITE_LIMIT_EXPR_DEPTH">
+            <summary>
+            The maximum depth of the parse tree on any expression.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteLimitOpsEnum.SQLITE_LIMIT_COMPOUND_SELECT">
+            <summary>
+            The maximum number of terms in a compound SELECT statement.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteLimitOpsEnum.SQLITE_LIMIT_VDBE_OP">
+            <summary>
+            The maximum number of instructions in a virtual machine program
+            used to implement an SQL statement. If sqlite3_prepare_v2() or
+            the equivalent tries to allocate space for more than this many
+            opcodes in a single prepared statement, an SQLITE_NOMEM error
+            is returned.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteLimitOpsEnum.SQLITE_LIMIT_FUNCTION_ARG">
+            <summary>
+            The maximum number of arguments on a function.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteLimitOpsEnum.SQLITE_LIMIT_ATTACHED">
+            <summary>
+            The maximum number of attached databases.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteLimitOpsEnum.SQLITE_LIMIT_LIKE_PATTERN_LENGTH">
+            <summary>
+            The maximum length of the pattern argument to the LIKE or GLOB
+            operators.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteLimitOpsEnum.SQLITE_LIMIT_VARIABLE_NUMBER">
+            <summary>
+            The maximum index number of any parameter in an SQL statement.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteLimitOpsEnum.SQLITE_LIMIT_TRIGGER_DEPTH">
+            <summary>
+            The maximum depth of recursion for triggers.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteLimitOpsEnum.SQLITE_LIMIT_WORKER_THREADS">
+            <summary>
+            The maximum number of auxiliary worker threads that a single
+            prepared statement may start.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteBlob">
+            <summary>
+            Represents a single SQL blob in SQLite.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteBlob._sql">
+            <summary>
+            The underlying SQLite object this blob is bound to.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteBlob._sqlite_blob">
+            <summary>
+            The actual blob handle.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBlob.#ctor(System.Data.SQLite.SQLiteBase,System.Data.SQLite.SQLiteBlobHandle)">
+            <summary>
+            Initializes the blob.
+            </summary>
+            <param name="sqlbase">The base SQLite object.</param>
+            <param name="blob">The blob handle.</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBlob.Create(System.Data.SQLite.SQLiteDataReader,System.Int32,System.Boolean)">
+            <summary>
+            Creates a <see cref="T:System.Data.SQLite.SQLiteBlob"/> object.  This will not work
+            for tables that were created WITHOUT ROWID -OR- if the query
+            does not include the "rowid" column or one of its aliases -OR-
+            if the <see cref="T:System.Data.SQLite.SQLiteDataReader"/> was not created with the
+            <see cref="F:System.Data.CommandBehavior.KeyInfo"/> flag.
+            </summary>
+            <param name="dataReader">
+            The <see cref="T:System.Data.SQLite.SQLiteDataReader"/> instance with a result set
+            containing the desired blob column.
+            </param>
+            <param name="i">
+            The index of the blob column.
+            </param>
+            <param name="readOnly">
+            Non-zero to open the blob object for read-only access.
+            </param>
+            <returns>
+            The newly created <see cref="T:System.Data.SQLite.SQLiteBlob"/> instance -OR- null
+            if an error occurs.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBlob.Create(System.Data.SQLite.SQLiteConnection,System.String,System.String,System.String,System.Int64,System.Boolean)">
+            <summary>
+            Creates a <see cref="T:System.Data.SQLite.SQLiteBlob"/> object.  This will not work
+            for tables that were created WITHOUT ROWID.
+            </summary>
+            <param name="connection">
+            The connection to use when opening the blob object.
+            </param>
+            <param name="databaseName">
+            The name of the database containing the blob object.
+            </param>
+            <param name="tableName">
+            The name of the table containing the blob object.
+            </param>
+            <param name="columnName">
+            The name of the column containing the blob object.
+            </param>
+            <param name="rowId">
+            The integer identifier for the row associated with the desired
+            blob object.
+            </param>
+            <param name="readOnly">
+            Non-zero to open the blob object for read-only access.
+            </param>
+            <returns>
+            The newly created <see cref="T:System.Data.SQLite.SQLiteBlob"/> instance -OR- null
+            if an error occurs.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBlob.CheckOpen">
+            <summary>
+            Throws an exception if the blob object does not appear to be open.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBlob.VerifyParameters(System.Byte[],System.Int32,System.Int32)">
+            <summary>
+            Throws an exception if an invalid read/write parameter is detected.
+            </summary>
+            <param name="buffer">
+            When reading, this array will be populated with the bytes read from
+            the underlying database blob.  When writing, this array contains new
+            values for the specified portion of the underlying database blob.
+            </param>
+            <param name="count">
+            The number of bytes to read or write.
+            </param>
+            <param name="offset">
+            The byte offset, relative to the start of the underlying database
+            blob, where the read or write operation will begin.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBlob.Reopen(System.Int64)">
+            <summary>
+            Retargets this object to an underlying database blob for a
+            different row; the database, table, and column remain exactly
+            the same.  If this operation fails for any reason, this blob
+            object is automatically disposed.
+            </summary>
+            <param name="rowId">
+            The integer identifier for the new row.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBlob.GetCount">
+            <summary>
+            Queries the total number of bytes for the underlying database blob.
+            </summary>
+            <returns>
+            The total number of bytes for the underlying database blob.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBlob.Read(System.Byte[],System.Int32,System.Int32)">
+            <summary>
+            Reads data from the underlying database blob.
+            </summary>
+            <param name="buffer">
+            This array will be populated with the bytes read from the
+            underlying database blob.
+            </param>
+            <param name="count">
+            The number of bytes to read.
+            </param>
+            <param name="offset">
+            The byte offset, relative to the start of the underlying
+            database blob, where the read operation will begin.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBlob.Write(System.Byte[],System.Int32,System.Int32)">
+            <summary>
+            Writes data into the underlying database blob.
+            </summary>
+            <param name="buffer">
+            This array contains the new values for the specified portion of
+            the underlying database blob.
+            </param>
+            <param name="count">
+            The number of bytes to write.
+            </param>
+            <param name="offset">
+            The byte offset, relative to the start of the underlying
+            database blob, where the write operation will begin.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBlob.Close">
+            <summary>
+            Closes the blob, freeing the associated resources.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBlob.Dispose">
+            <summary>
+            Disposes and finalizes the blob.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBlob.Finalize">
+            <summary>
+            The destructor.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteCommand">
+            <summary>
+            SQLite implementation of DbCommand.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteCommand.DefaultConnectionString">
+            <summary>
+            The default connection string to be used when creating a temporary
+            connection to execute a command via the static
+            <see cref="M:System.Data.SQLite.SQLiteCommand.Execute(System.String,System.Data.SQLite.SQLiteExecuteType,System.String,System.Object[])"/> or
+            <see cref="M:System.Data.SQLite.SQLiteCommand.Execute(System.String,System.Data.SQLite.SQLiteExecuteType,System.Data.CommandBehavior,System.String,System.Object[])"/>
+            methods.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteCommand._commandText">
+            <summary>
+            The command text this command is based on
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteCommand._cnn">
+            <summary>
+            The connection the command is associated with
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteCommand._version">
+            <summary>
+            The version of the connection the command is associated with
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteCommand._activeReader">
+            <summary>
+            Indicates whether or not a DataReader is active on the command.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteCommand._commandTimeout">
+            <summary>
+            The timeout for the command, kludged because SQLite doesn't support per-command timeout values
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteCommand._designTimeVisible">
+            <summary>
+            Designer support
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteCommand._updateRowSource">
+            <summary>
+            Used by DbDataAdapter to determine updating behavior
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteCommand._parameterCollection">
+            <summary>
+            The collection of parameters for the command
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteCommand._statementList">
+            <summary>
+            The SQL command text, broken into individual SQL statements as they are executed
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteCommand._remainingText">
+            <summary>
+            Unprocessed SQL text that has not been executed
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteCommand._transaction">
+            <summary>
+            Transaction associated with this command
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.#ctor">
+            <overloads>
+             Constructs a new SQLiteCommand
+             </overloads>
+             <summary>
+             Default constructor
+             </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.#ctor(System.String)">
+            <summary>
+            Initializes the command with the given command text
+            </summary>
+            <param name="commandText">The SQL command text</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.#ctor(System.String,System.Data.SQLite.SQLiteConnection)">
+            <summary>
+            Initializes the command with the given SQL command text and attach the command to the specified
+            connection.
+            </summary>
+            <param name="commandText">The SQL command text</param>
+            <param name="connection">The connection to associate with the command</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.#ctor(System.Data.SQLite.SQLiteConnection)">
+            <summary>
+            Initializes the command and associates it with the specified connection.
+            </summary>
+            <param name="connection">The connection to associate with the command</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.#ctor(System.String,System.Data.SQLite.SQLiteConnection,System.Data.SQLite.SQLiteTransaction)">
+            <summary>
+            Initializes a command with the given SQL, connection and transaction
+            </summary>
+            <param name="commandText">The SQL command text</param>
+            <param name="connection">The connection to associate with the command</param>
+            <param name="transaction">The transaction the command should be associated with</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.Dispose(System.Boolean)">
+            <summary>
+            Disposes of the command and clears all member variables
+            </summary>
+            <param name="disposing">Whether or not the class is being explicitly or implicitly disposed</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.GetFlags(System.Data.SQLite.SQLiteCommand)">
+            <summary>
+            This method attempts to query the flags associated with the database
+            connection in use.  If the database connection is disposed, the default
+            flags will be returned.
+            </summary>
+            <param name="command">
+            The command containing the databse connection to query the flags from.
+            </param>
+            <returns>
+            The connection flags value.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.ClearCommands">
+            <summary>
+            Clears and destroys all statements currently prepared
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.BuildNextCommand">
+            <summary>
+            Builds an array of prepared statements for each complete SQL statement in the command text
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.Cancel">
+            <summary>
+            Not implemented
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.CreateDbParameter">
+            <summary>
+            Forwards to the local CreateParameter() function
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.CreateParameter">
+            <summary>
+            Create a new parameter
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.VerifyOnly">
+            <summary>
+            Verifies that all SQL queries associated with the current command text
+            can be successfully compiled.  A <see cref="T:System.Data.SQLite.SQLiteException"/> will be
+            raised if any errors occur.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.InitializeForReader">
+            <summary>
+            This function ensures there are no active readers, that we have a valid connection,
+            that the connection is open, that all statements are prepared and all parameters are assigned
+            in preparation for allocating a data reader.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.ExecuteDbDataReader(System.Data.CommandBehavior)">
+            <summary>
+            Creates a new SQLiteDataReader to execute/iterate the array of SQLite prepared statements
+            </summary>
+            <param name="behavior">The behavior the data reader should adopt</param>
+            <returns>Returns a SQLiteDataReader object</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.Execute(System.String,System.Data.SQLite.SQLiteExecuteType,System.String,System.Object[])">
+            <summary>
+            This method creates a new connection, executes the query using the given
+            execution type, closes the connection, and returns the results.  If the
+            connection string is null, a temporary in-memory database connection will
+            be used.
+            </summary>
+            <param name="commandText">
+            The text of the command to be executed.
+            </param>
+            <param name="executeType">
+            The execution type for the command.  This is used to determine which method
+            of the command object to call, which then determines the type of results
+            returned, if any.
+            </param>
+            <param name="connectionString">
+            The connection string to the database to be opened, used, and closed.  If
+            this parameter is null, a temporary in-memory databse will be used.
+            </param>
+            <param name="args">
+            The SQL parameter values to be used when building the command object to be
+            executed, if any.
+            </param>
+            <returns>
+            The results of the query -OR- null if no results were produced from the
+            given execution type.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.Execute(System.String,System.Data.SQLite.SQLiteExecuteType,System.Data.CommandBehavior,System.String,System.Object[])">
+            <summary>
+            This method creates a new connection, executes the query using the given
+            execution type and command behavior, closes the connection unless a data
+            reader is created, and returns the results.  If the connection string is
+            null, a temporary in-memory database connection will be used.
+            </summary>
+            <param name="commandText">
+            The text of the command to be executed.
+            </param>
+            <param name="executeType">
+            The execution type for the command.  This is used to determine which method
+            of the command object to call, which then determines the type of results
+            returned, if any.
+            </param>
+            <param name="commandBehavior">
+            The command behavior flags for the command.
+            </param>
+            <param name="connectionString">
+            The connection string to the database to be opened, used, and closed.  If
+            this parameter is null, a temporary in-memory databse will be used.
+            </param>
+            <param name="args">
+            The SQL parameter values to be used when building the command object to be
+            executed, if any.
+            </param>
+            <returns>
+            The results of the query -OR- null if no results were produced from the
+            given execution type.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.Execute(System.String,System.Data.SQLite.SQLiteExecuteType,System.Data.CommandBehavior,System.Data.SQLite.SQLiteConnection,System.Object[])">
+            <summary>
+            This method executes a query using the given execution type and command
+            behavior and returns the results.
+            </summary>
+            <param name="commandText">
+            The text of the command to be executed.
+            </param>
+            <param name="executeType">
+            The execution type for the command.  This is used to determine which method
+            of the command object to call, which then determines the type of results
+            returned, if any.
+            </param>
+            <param name="commandBehavior">
+            The command behavior flags for the command.
+            </param>
+            <param name="connection">
+            The connection used to create and execute the command.
+            </param>
+            <param name="args">
+            The SQL parameter values to be used when building the command object to be
+            executed, if any.
+            </param>
+            <returns>
+            The results of the query -OR- null if no results were produced from the
+            given execution type.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.ExecuteReader(System.Data.CommandBehavior)">
+            <summary>
+            Overrides the default behavior to return a SQLiteDataReader specialization class
+            </summary>
+            <param name="behavior">The flags to be associated with the reader.</param>
+            <returns>A SQLiteDataReader</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.ExecuteReader">
+            <summary>
+            Overrides the default behavior of DbDataReader to return a specialized SQLiteDataReader class
+            </summary>
+            <returns>A SQLiteDataReader</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.ResetDataReader">
+            <summary>
+            Called by the SQLiteDataReader when the data reader is closed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.ExecuteNonQuery">
+            <summary>
+            Execute the command and return the number of rows inserted/updated affected by it.
+            </summary>
+            <returns>The number of rows inserted/updated affected by it.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.ExecuteNonQuery(System.Data.CommandBehavior)">
+            <summary>
+            Execute the command and return the number of rows inserted/updated affected by it.
+            </summary>
+            <param name="behavior">The flags to be associated with the reader.</param>
+            <returns>The number of rows inserted/updated affected by it.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.ExecuteScalar">
+            <summary>
+            Execute the command and return the first column of the first row of the resultset
+            (if present), or null if no resultset was returned.
+            </summary>
+            <returns>The first column of the first row of the first resultset from the query.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.ExecuteScalar(System.Data.CommandBehavior)">
+            <summary>
+            Execute the command and return the first column of the first row of the resultset
+            (if present), or null if no resultset was returned.
+            </summary>
+            <param name="behavior">The flags to be associated with the reader.</param>
+            <returns>The first column of the first row of the first resultset from the query.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.Reset">
+            <summary>
+            This method resets all the prepared statements held by this instance
+            back to their initial states, ready to be re-executed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.Reset(System.Boolean,System.Boolean)">
+            <summary>
+            This method resets all the prepared statements held by this instance
+            back to their initial states, ready to be re-executed.
+            </summary>
+            <param name="clearBindings">
+            Non-zero if the parameter bindings should be cleared as well.
+            </param>
+            <param name="ignoreErrors">
+            If this is zero, a <see cref="T:System.Data.SQLite.SQLiteException"/> may be thrown for
+            any unsuccessful return codes from the native library; otherwise, a
+            <see cref="T:System.Data.SQLite.SQLiteException"/> will only be thrown if the connection
+            or its state is invalid.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.Prepare">
+            <summary>
+            Does nothing.  Commands are prepared as they are executed the first time, and kept in prepared state afterwards.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommand.Clone">
+            <summary>
+            Clones a command, including all its parameters
+            </summary>
+            <returns>A new SQLiteCommand with the same commandtext, connection and parameters</returns>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteCommand.CommandText">
+            <summary>
+            The SQL command text associated with the command
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteCommand.CommandTimeout">
+            <summary>
+            The amount of time to wait for the connection to become available before erroring out
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteCommand.CommandType">
+            <summary>
+            The type of the command.  SQLite only supports CommandType.Text
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteCommand.Connection">
+            <summary>
+            The connection associated with this command
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteCommand.DbConnection">
+            <summary>
+            Forwards to the local Connection property
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteCommand.Parameters">
+            <summary>
+            Returns the SQLiteParameterCollection for the given command
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteCommand.DbParameterCollection">
+            <summary>
+            Forwards to the local Parameters property
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteCommand.Transaction">
+            <summary>
+            The transaction associated with this command.  SQLite only supports one transaction per connection, so this property forwards to the
+            command's underlying connection.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteCommand.DbTransaction">
+            <summary>
+            Forwards to the local Transaction property
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteCommand.UpdatedRowSource">
+            <summary>
+            Sets the method the SQLiteCommandBuilder uses to determine how to update inserted or updated rows in a DataTable.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteCommand.DesignTimeVisible">
+            <summary>
+            Determines if the command is visible at design time.  Defaults to True.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteCommandBuilder">
+            <summary>
+            SQLite implementation of DbCommandBuilder.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommandBuilder.#ctor">
+            <summary>
+            Default constructor
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommandBuilder.#ctor(System.Data.SQLite.SQLiteDataAdapter)">
+            <summary>
+            Initializes the command builder and associates it with the specified data adapter.
+            </summary>
+            <param name="adp"></param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommandBuilder.Dispose(System.Boolean)">
+            <summary>
+            Cleans up resources (native and managed) associated with the current instance.
+            </summary>
+            <param name="disposing">
+            Zero when being disposed via garbage collection; otherwise, non-zero.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommandBuilder.ApplyParameterInfo(System.Data.Common.DbParameter,System.Data.DataRow,System.Data.StatementType,System.Boolean)">
+            <summary>
+            Minimal amount of parameter processing.  Primarily sets the DbType for the parameter equal to the provider type in the schema
+            </summary>
+            <param name="parameter">The parameter to use in applying custom behaviors to a row</param>
+            <param name="row">The row to apply the parameter to</param>
+            <param name="statementType">The type of statement</param>
+            <param name="whereClause">Whether the application of the parameter is part of a WHERE clause</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommandBuilder.GetParameterName(System.String)">
+            <summary>
+            Returns a valid named parameter
+            </summary>
+            <param name="parameterName">The name of the parameter</param>
+            <returns>Error</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommandBuilder.GetParameterName(System.Int32)">
+            <summary>
+            Returns a named parameter for the given ordinal
+            </summary>
+            <param name="parameterOrdinal">The i of the parameter</param>
+            <returns>Error</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommandBuilder.GetParameterPlaceholder(System.Int32)">
+            <summary>
+            Returns a placeholder character for the specified parameter i.
+            </summary>
+            <param name="parameterOrdinal">The index of the parameter to provide a placeholder for</param>
+            <returns>Returns a named parameter</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommandBuilder.SetRowUpdatingHandler(System.Data.Common.DbDataAdapter)">
+            <summary>
+            Sets the handler for receiving row updating events.  Used by the DbCommandBuilder to autogenerate SQL
+            statements that may not have previously been generated.
+            </summary>
+            <param name="adapter">A data adapter to receive events on.</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommandBuilder.GetDeleteCommand">
+            <summary>
+            Returns the automatically-generated SQLite command to delete rows from the database
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommandBuilder.GetDeleteCommand(System.Boolean)">
+            <summary>
+            Returns the automatically-generated SQLite command to delete rows from the database
+            </summary>
+            <param name="useColumnsForParameterNames"></param>
+            <returns></returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommandBuilder.GetUpdateCommand">
+            <summary>
+            Returns the automatically-generated SQLite command to update rows in the database
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommandBuilder.GetUpdateCommand(System.Boolean)">
+            <summary>
+            Returns the automatically-generated SQLite command to update rows in the database
+            </summary>
+            <param name="useColumnsForParameterNames"></param>
+            <returns></returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommandBuilder.GetInsertCommand">
+            <summary>
+            Returns the automatically-generated SQLite command to insert rows into the database
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommandBuilder.GetInsertCommand(System.Boolean)">
+            <summary>
+            Returns the automatically-generated SQLite command to insert rows into the database
+            </summary>
+            <param name="useColumnsForParameterNames"></param>
+            <returns></returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommandBuilder.QuoteIdentifier(System.String)">
+            <summary>
+            Places brackets around an identifier
+            </summary>
+            <param name="unquotedIdentifier">The identifier to quote</param>
+            <returns>The bracketed identifier</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommandBuilder.UnquoteIdentifier(System.String)">
+            <summary>
+            Removes brackets around an identifier
+            </summary>
+            <param name="quotedIdentifier">The quoted (bracketed) identifier</param>
+            <returns>The undecorated identifier</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteCommandBuilder.GetSchemaTable(System.Data.Common.DbCommand)">
+            <summary>
+            Override helper, which can help the base command builder choose the right keys for the given query
+            </summary>
+            <param name="sourceCommand"></param>
+            <returns></returns>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteCommandBuilder.DataAdapter">
+            <summary>
+            Gets/sets the DataAdapter for this CommandBuilder
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteCommandBuilder.CatalogLocation">
+            <summary>
+            Overridden to hide its property from the designer
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteCommandBuilder.CatalogSeparator">
+            <summary>
+            Overridden to hide its property from the designer
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteCommandBuilder.QuotePrefix">
+            <summary>
+            Overridden to hide its property from the designer
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteCommandBuilder.QuoteSuffix">
+            <summary>
+            Overridden to hide its property from the designer
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteCommandBuilder.SchemaSeparator">
+            <summary>
+            Overridden to hide its property from the designer
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteDataReaderValue">
+            <summary>
+            This class represents a single value to be returned
+            from the <see cref="T:System.Data.SQLite.SQLiteDataReader"/> class via
+            its <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBlob(System.Int32,System.Boolean)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBoolean(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetByte(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBytes(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetChar(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetChars(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetDateTime(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetDecimal(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetDouble(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetFloat(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetGuid(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetInt16(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetInt32(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetInt64(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetString(System.Int32)"/>, or
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetValue(System.Int32)"/> method.  If the value of the
+            associated public field of this class is null upon returning from the
+            callback, the null value will only be used if the return type for the
+            <see cref="T:System.Data.SQLite.SQLiteDataReader"/> method called is not a value type.
+            If the value to be returned from the <see cref="T:System.Data.SQLite.SQLiteDataReader"/>
+            method is unsuitable (e.g. null with a value type), an exception will
+            be thrown.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReaderValue.BlobValue">
+            <summary>
+            The value to be returned from the
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBlob(System.Int32,System.Boolean)"/> method -OR- null to
+            indicate an error.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReaderValue.BooleanValue">
+            <summary>
+            The value to be returned from the
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBoolean(System.Int32)"/> method -OR- null to
+            indicate an error.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReaderValue.ByteValue">
+            <summary>
+            The value to be returned from the
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetByte(System.Int32)"/> method -OR- null to
+            indicate an error.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReaderValue.BytesValue">
+            <summary>
+            The value to be returned from the
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBytes(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32)"/> method.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReaderValue.CharValue">
+            <summary>
+            The value to be returned from the
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetChar(System.Int32)"/> method -OR- null to
+            indicate an error.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReaderValue.CharsValue">
+            <summary>
+            The value to be returned from the
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetChars(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32)"/> method.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReaderValue.DateTimeValue">
+            <summary>
+            The value to be returned from the
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetDateTime(System.Int32)"/> method -OR- null to
+            indicate an error.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReaderValue.DecimalValue">
+            <summary>
+            The value to be returned from the
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetDecimal(System.Int32)"/> method -OR- null to
+            indicate an error.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReaderValue.DoubleValue">
+            <summary>
+            The value to be returned from the
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetDouble(System.Int32)"/> method -OR- null to
+            indicate an error.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReaderValue.FloatValue">
+            <summary>
+            The value to be returned from the
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetFloat(System.Int32)"/> method -OR- null to
+            indicate an error.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReaderValue.GuidValue">
+            <summary>
+            The value to be returned from the
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetGuid(System.Int32)"/> method -OR- null to
+            indicate an error.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReaderValue.Int16Value">
+            <summary>
+            The value to be returned from the
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetInt16(System.Int32)"/> method -OR- null to
+            indicate an error.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReaderValue.Int32Value">
+            <summary>
+            The value to be returned from the
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetInt32(System.Int32)"/> method -OR- null to
+            indicate an error.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReaderValue.Int64Value">
+            <summary>
+            The value to be returned from the
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetInt64(System.Int32)"/> method -OR- null to
+            indicate an error.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReaderValue.StringValue">
+            <summary>
+            The value to be returned from the
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetString(System.Int32)"/> method.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReaderValue.Value">
+            <summary>
+            The value to be returned from the
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetValue(System.Int32)"/> method.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteReadEventArgs">
+            <summary>
+            This class represents the parameters that are provided
+            to the <see cref="T:System.Data.SQLite.SQLiteDataReader"/> methods, with
+            the exception of the column index (provided separately).
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteReadBlobEventArgs">
+            <summary>
+            This class represents the parameters that are provided to
+            the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBlob(System.Int32,System.Boolean)"/> method, with
+            the exception of the column index (provided separately).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteReadBlobEventArgs.readOnly">
+            <summary>
+            Provides the underlying storage for the
+            <see cref="P:System.Data.SQLite.SQLiteReadBlobEventArgs.ReadOnly"/> property.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteReadBlobEventArgs.#ctor(System.Boolean)">
+            <summary>
+            Constructs an instance of this class to pass into a user-defined
+            callback associated with the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBlob(System.Int32,System.Boolean)"/>
+            method.
+            </summary>
+            <param name="readOnly">
+            The value that was originally specified for the "readOnly"
+            parameter to the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBlob(System.Int32,System.Boolean)"/> method.
+            </param>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteReadBlobEventArgs.ReadOnly">
+            <summary>
+            The value that was originally specified for the "readOnly"
+            parameter to the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBlob(System.Int32,System.Boolean)"/> method.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteReadArrayEventArgs">
+            <summary>
+            This class represents the parameters that are provided
+            to the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBytes(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32)"/> and
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetChars(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32)"/> methods, with
+            the exception of the column index (provided separately).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteReadArrayEventArgs.dataOffset">
+            <summary>
+            Provides the underlying storage for the
+            <see cref="P:System.Data.SQLite.SQLiteReadArrayEventArgs.DataOffset"/> property.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteReadArrayEventArgs.byteBuffer">
+            <summary>
+            Provides the underlying storage for the
+            <see cref="P:System.Data.SQLite.SQLiteReadArrayEventArgs.ByteBuffer"/> property.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteReadArrayEventArgs.charBuffer">
+            <summary>
+            Provides the underlying storage for the
+            <see cref="P:System.Data.SQLite.SQLiteReadArrayEventArgs.CharBuffer"/> property.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteReadArrayEventArgs.bufferOffset">
+            <summary>
+            Provides the underlying storage for the
+            <see cref="P:System.Data.SQLite.SQLiteReadArrayEventArgs.BufferOffset"/> property.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteReadArrayEventArgs.length">
+            <summary>
+            Provides the underlying storage for the
+            <see cref="P:System.Data.SQLite.SQLiteReadArrayEventArgs.Length"/> property.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteReadArrayEventArgs.#ctor(System.Int64,System.Byte[],System.Int32,System.Int32)">
+            <summary>
+            Constructs an instance of this class to pass into a user-defined
+            callback associated with the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBytes(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32)"/>
+            method.
+            </summary>
+            <param name="dataOffset">
+            The value that was originally specified for the "dataOffset"
+            parameter to the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBytes(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32)"/> or
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetChars(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32)"/> methods.
+            </param>
+            <param name="byteBuffer">
+            The value that was originally specified for the "buffer"
+            parameter to the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBytes(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32)"/>
+            method.
+            </param>
+            <param name="bufferOffset">
+            The value that was originally specified for the "bufferOffset"
+            parameter to the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBytes(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32)"/> or
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetChars(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32)"/> methods.
+            </param>
+            <param name="length">
+            The value that was originally specified for the "length"
+            parameter to the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBytes(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32)"/> or
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetChars(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32)"/> methods.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteReadArrayEventArgs.#ctor(System.Int64,System.Char[],System.Int32,System.Int32)">
+            <summary>
+            Constructs an instance of this class to pass into a user-defined
+            callback associated with the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetChars(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32)"/>
+            method.
+            </summary>
+            <param name="dataOffset">
+            The value that was originally specified for the "dataOffset"
+            parameter to the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBytes(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32)"/> or
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetChars(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32)"/> methods.
+            </param>
+            <param name="charBuffer">
+            The value that was originally specified for the "buffer"
+            parameter to the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetChars(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32)"/>
+            method.
+            </param>
+            <param name="bufferOffset">
+            The value that was originally specified for the "bufferOffset"
+            parameter to the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBytes(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32)"/> or
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetChars(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32)"/> methods.
+            </param>
+            <param name="length">
+            The value that was originally specified for the "length"
+            parameter to the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBytes(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32)"/> or
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetChars(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32)"/> methods.
+            </param>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteReadArrayEventArgs.DataOffset">
+            <summary>
+            The value that was originally specified for the "dataOffset"
+            parameter to the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBytes(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32)"/> or
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetChars(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32)"/> methods.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteReadArrayEventArgs.ByteBuffer">
+            <summary>
+            The value that was originally specified for the "buffer"
+            parameter to the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBytes(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32)"/>
+            method.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteReadArrayEventArgs.CharBuffer">
+            <summary>
+            The value that was originally specified for the "buffer"
+            parameter to the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetChars(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32)"/>
+            method.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteReadArrayEventArgs.BufferOffset">
+            <summary>
+            The value that was originally specified for the "bufferOffset"
+            parameter to the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBytes(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32)"/> or
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetChars(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32)"/> methods.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteReadArrayEventArgs.Length">
+            <summary>
+            The value that was originally specified for the "length"
+            parameter to the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBytes(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32)"/> or
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetChars(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32)"/> methods.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteReadValueEventArgs">
+            <summary>
+            This class represents the parameters and return values for the
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBlob(System.Int32,System.Boolean)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBoolean(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetByte(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBytes(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetChar(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetChars(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetDateTime(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetDecimal(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetDouble(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetFloat(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetGuid(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetInt16(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetInt32(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetInt64(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetString(System.Int32)"/>, and
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetValue(System.Int32)"/> methods.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteReadValueEventArgs.methodName">
+            <summary>
+            Provides the underlying storage for the
+            <see cref="P:System.Data.SQLite.SQLiteReadValueEventArgs.MethodName"/> property.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteReadValueEventArgs.extraEventArgs">
+            <summary>
+            Provides the underlying storage for the
+            <see cref="P:System.Data.SQLite.SQLiteReadValueEventArgs.ExtraEventArgs"/> property.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteReadValueEventArgs.value">
+            <summary>
+            Provides the underlying storage for the
+            <see cref="P:System.Data.SQLite.SQLiteReadValueEventArgs.Value"/> property.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteReadValueEventArgs.#ctor(System.String,System.Data.SQLite.SQLiteReadEventArgs,System.Data.SQLite.SQLiteDataReaderValue)">
+            <summary>
+            Constructs a new instance of this class.  Depending on the method
+            being called, the <paramref name="extraEventArgs"/> and/or
+            <paramref name="value"/> parameters may be null.
+            </summary>
+            <param name="methodName">
+            The name of the <see cref="T:System.Data.SQLite.SQLiteDataReader"/> method that was
+            responsible for invoking this callback.
+            </param>
+            <param name="extraEventArgs">
+            If the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBytes(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32)"/> or
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetChars(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32)"/> method is being called,
+            this object will contain the array related parameters for that
+            method.  If the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBlob(System.Int32,System.Boolean)"/> method is
+            being called, this object will contain the blob related parameters
+            for that method.
+            </param>
+            <param name="value">
+            This may be used by the callback to set the return value for the
+            called <see cref="T:System.Data.SQLite.SQLiteDataReader"/> method.
+            </param>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteReadValueEventArgs.MethodName">
+            <summary>
+            The name of the <see cref="T:System.Data.SQLite.SQLiteDataReader"/> method that was
+            responsible for invoking this callback.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteReadValueEventArgs.ExtraEventArgs">
+            <summary>
+            If the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBytes(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32)"/> or
+            <see cref="M:System.Data.SQLite.SQLiteDataReader.GetChars(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32)"/> method is being called,
+            this object will contain the array related parameters for that
+            method.  If the <see cref="M:System.Data.SQLite.SQLiteDataReader.GetBlob(System.Int32,System.Boolean)"/> method is
+            being called, this object will contain the blob related parameters
+            for that method.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteReadValueEventArgs.Value">
+            <summary>
+            This may be used by the callback to set the return value for the
+            called <see cref="T:System.Data.SQLite.SQLiteDataReader"/> method.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteBindValueCallback">
+            <summary>
+            This represents a method that will be called in response to a request to
+            bind a parameter to a command.  If an exception is thrown, it will cause
+            the parameter binding operation to fail -AND- it will continue to unwind
+            the call stack.
+            </summary>
+            <param name="convert">
+            The <see cref="T:System.Data.SQLite.SQLiteConvert"/> instance in use.
+            </param>
+            <param name="command">
+            The <see cref="T:System.Data.SQLite.SQLiteCommand"/> instance in use.
+            </param>
+            <param name="flags">
+            The flags associated with the <see cref="T:System.Data.SQLite.SQLiteConnection"/> instance
+            in use.
+            </param>
+            <param name="parameter">
+            The <see cref="T:System.Data.SQLite.SQLiteParameter"/> instance being bound to the command.
+            </param>
+            <param name="typeName">
+            The database type name associated with this callback.
+            </param>
+            <param name="index">
+            The ordinal of the parameter being bound to the command.
+            </param>
+            <param name="userData">
+            The data originally used when registering this callback.
+            </param>
+            <param name="complete">
+            Non-zero if the default handling for the parameter binding call should
+            be skipped (i.e. the parameter should not be bound at all).  Great care
+            should be used when setting this to non-zero.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteReadValueCallback">
+            <summary>
+            This represents a method that will be called in response to a request
+            to read a value from a data reader.  If an exception is thrown, it will
+            cause the data reader operation to fail -AND- it will continue to unwind
+            the call stack.
+            </summary>
+            <param name="convert">
+            The <see cref="T:System.Data.SQLite.SQLiteConvert"/> instance in use.
+            </param>
+            <param name="dataReader">
+            The <see cref="T:System.Data.SQLite.SQLiteDataReader"/> instance in use.
+            </param>
+            <param name="flags">
+            The flags associated with the <see cref="T:System.Data.SQLite.SQLiteConnection"/> instance
+            in use.
+            </param>
+            <param name="eventArgs">
+            The parameter and return type data for the column being read from the
+            data reader.
+            </param>
+            <param name="typeName">
+            The database type name associated with this callback.
+            </param>
+            <param name="index">
+            The zero based index of the column being read from the data reader.
+            </param>
+            <param name="userData">
+            The data originally used when registering this callback.
+            </param>
+            <param name="complete">
+            Non-zero if the default handling for the data reader call should be
+            skipped.  If this is set to non-zero and the necessary return value
+            is unavailable or unsuitable, an exception will be thrown.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteTypeCallbacks">
+            <summary>
+            This class represents the custom data type handling callbacks
+            for a single type name.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteTypeCallbacks.typeName">
+            <summary>
+            Provides the underlying storage for the
+            <see cref="P:System.Data.SQLite.SQLiteTypeCallbacks.TypeName"/> property.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteTypeCallbacks.bindValueCallback">
+            <summary>
+            Provides the underlying storage for the
+            <see cref="P:System.Data.SQLite.SQLiteTypeCallbacks.BindValueCallback"/> property.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteTypeCallbacks.readValueCallback">
+            <summary>
+            Provides the underlying storage for the
+            <see cref="P:System.Data.SQLite.SQLiteTypeCallbacks.ReadValueCallback"/> property.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteTypeCallbacks.bindValueUserData">
+            <summary>
+            Provides the underlying storage for the
+            <see cref="P:System.Data.SQLite.SQLiteTypeCallbacks.BindValueUserData"/> property.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteTypeCallbacks.readValueUserData">
+            <summary>
+            Provides the underlying storage for the
+            <see cref="P:System.Data.SQLite.SQLiteTypeCallbacks.ReadValueUserData"/> property.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteTypeCallbacks.#ctor(System.Data.SQLite.SQLiteBindValueCallback,System.Data.SQLite.SQLiteReadValueCallback,System.Object,System.Object)">
+            <summary>
+            Constructs an instance of this class.
+            </summary>
+            <param name="bindValueCallback">
+            The custom paramater binding callback.  This parameter may be null.
+            </param>
+            <param name="readValueCallback">
+            The custom data reader value callback.  This parameter may be null.
+            </param>
+            <param name="bindValueUserData">
+            The extra data to pass into the parameter binding callback.  This
+            parameter may be null.
+            </param>
+            <param name="readValueUserData">
+            The extra data to pass into the data reader value callback.  This
+            parameter may be null.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteTypeCallbacks.Create(System.Data.SQLite.SQLiteBindValueCallback,System.Data.SQLite.SQLiteReadValueCallback,System.Object,System.Object)">
+            <summary>
+            Creates an instance of the <see cref="T:System.Data.SQLite.SQLiteTypeCallbacks"/> class.
+            </summary>
+            <param name="bindValueCallback">
+            The custom paramater binding callback.  This parameter may be null.
+            </param>
+            <param name="readValueCallback">
+            The custom data reader value callback.  This parameter may be null.
+            </param>
+            <param name="bindValueUserData">
+            The extra data to pass into the parameter binding callback.  This
+            parameter may be null.
+            </param>
+            <param name="readValueUserData">
+            The extra data to pass into the data reader value callback.  This
+            parameter may be null.
+            </param>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteTypeCallbacks.TypeName">
+            <summary>
+            The database type name that the callbacks contained in this class
+            will apply to.  This value may not be null.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteTypeCallbacks.BindValueCallback">
+            <summary>
+            The custom paramater binding callback.  This value may be null.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteTypeCallbacks.ReadValueCallback">
+            <summary>
+            The custom data reader value callback.  This value may be null.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteTypeCallbacks.BindValueUserData">
+            <summary>
+            The extra data to pass into the parameter binding callback.  This
+            value may be null.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteTypeCallbacks.ReadValueUserData">
+            <summary>
+            The extra data to pass into the data reader value callback.  This
+            value may be null.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteTypeCallbacksMap">
+            <summary>
+            This class represents the mappings between database type names
+            and their associated custom data type handling callbacks.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteTypeCallbacksMap.#ctor">
+            <summary>
+            Constructs an (empty) instance of this class.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.ConnectionEventArgs">
+            <summary>
+            Event data for connection event handlers.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.ConnectionEventArgs.EventType">
+            <summary>
+            The type of event being raised.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.ConnectionEventArgs.EventArgs">
+            <summary>
+            The <see cref="T:System.Data.StateChangeEventArgs"/> associated with this event, if any.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.ConnectionEventArgs.Transaction">
+            <summary>
+            The transaction associated with this event, if any.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.ConnectionEventArgs.Command">
+            <summary>
+            The command associated with this event, if any.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.ConnectionEventArgs.DataReader">
+            <summary>
+            The data reader associated with this event, if any.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.ConnectionEventArgs.CriticalHandle">
+            <summary>
+            The critical handle associated with this event, if any.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.ConnectionEventArgs.Text">
+            <summary>
+            Command or message text associated with this event, if any.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.ConnectionEventArgs.Data">
+            <summary>
+            Extra data associated with this event, if any.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.ConnectionEventArgs.#ctor(System.Data.SQLite.SQLiteConnectionEventType,System.Data.StateChangeEventArgs,System.Data.IDbTransaction,System.Data.IDbCommand,System.Data.IDataReader,System.Runtime.InteropServices.CriticalHandle,System.String,System.Object)">
+            <summary>
+            Constructs the object.
+            </summary>
+            <param name="eventType">The type of event being raised.</param>
+            <param name="eventArgs">The base <see cref="F:System.Data.SQLite.ConnectionEventArgs.EventArgs"/> associated
+            with this event, if any.</param>
+            <param name="transaction">The transaction associated with this event, if any.</param>
+            <param name="command">The command associated with this event, if any.</param>
+            <param name="dataReader">The data reader associated with this event, if any.</param>
+            <param name="criticalHandle">The critical handle associated with this event, if any.</param>
+            <param name="text">The command or message text, if any.</param>
+            <param name="data">The extra data, if any.</param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteConnectionEventHandler">
+            <summary>
+            Raised when an event pertaining to a connection occurs.
+            </summary>
+            <param name="sender">The connection involved.</param>
+            <param name="e">Extra information about the event.</param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteConnection">
+            <summary>
+            SQLite implentation of DbConnection.
+            </summary>
+            <remarks>
+            The <see cref="P:System.Data.SQLite.SQLiteConnection.ConnectionString"/> property can contain the following parameter(s), delimited with a semi-colon:
+            <list type="table">
+            <listheader>
+            <term>Parameter</term>
+            <term>Values</term>
+            <term>Required</term>
+            <term>Default</term>
+            </listheader>
+            <item>
+            <description>Data Source</description>
+            <description>
+            This may be a file name, the string ":memory:", or any supported URI (starting with SQLite 3.7.7).
+            Starting with release 1.0.86.0, in order to use more than one consecutive backslash (e.g. for a
+            UNC path), each of the adjoining backslash characters must be doubled (e.g. "\\Network\Share\test.db"
+            would become "\\\\Network\Share\test.db").
+            </description>
+            <description>Y</description>
+            <description></description>
+            </item>
+            <item>
+            <description>Uri</description>
+            <description>
+            If specified, this must be a file name that starts with "file://", "file:", or "/".  Any leading
+            "file://" or "file:" prefix will be stripped off and the resulting file name will be used to open
+            the database.
+            </description>
+            <description>N</description>
+            <description>null</description>
+            </item>
+            <item>
+            <description>FullUri</description>
+            <description>
+            If specified, this must be a URI in a format recognized by the SQLite core library (starting with
+            SQLite 3.7.7).  It will be passed verbatim to the SQLite core library.
+            </description>
+            <description>N</description>
+            <description>null</description>
+            </item>
+            <item>
+            <description>Version</description>
+            <description>3</description>
+            <description>N</description>
+            <description>3</description>
+            </item>
+            <item>
+            <description>UseUTF16Encoding</description>
+            <description>
+            <b>True</b> - The UTF-16 encoding should be used.
+            <br/>
+            <b>False</b> - The UTF-8 encoding should be used.
+            </description>
+            <description>N</description>
+            <description>False</description>
+            </item>
+            <item>
+            <description>DefaultDbType</description>
+            <description>
+            This is the default <see cref="T:System.Data.DbType"/> to use when one cannot be determined based on the
+            column metadata and the configured type mappings.
+            </description>
+            <description>N</description>
+            <description>null</description>
+            </item>
+            <item>
+            <description>DefaultTypeName</description>
+            <description>
+            This is the default type name to use when one cannot be determined based on the column metadata
+            and the configured type mappings.
+            </description>
+            <description>N</description>
+            <description>null</description>
+            </item>
+            <item>
+            <description>NoDefaultFlags</description>
+            <description>
+            <b>True</b> - Do not combine the specified (or existing) connection flags with the value of the
+            <see cref="P:System.Data.SQLite.SQLiteConnection.DefaultFlags"/> property.
+            <br/>
+            <b>False</b> - Combine the specified (or existing) connection flags with the value of the
+            <see cref="P:System.Data.SQLite.SQLiteConnection.DefaultFlags"/> property.
+            </description>
+            <description>N</description>
+            <description>False</description>
+            </item>
+            <item>
+            <description>NoSharedFlags</description>
+            <description>
+            <b>True</b> - Do not combine the specified (or existing) connection flags with the value of the
+            <see cref="P:System.Data.SQLite.SQLiteConnection.SharedFlags"/> property.
+            <br/>
+            <b>False</b> - Combine the specified (or existing) connection flags with the value of the
+            <see cref="P:System.Data.SQLite.SQLiteConnection.SharedFlags"/> property.
+            </description>
+            <description>N</description>
+            <description>False</description>
+            </item>
+            <item>
+            <description>VfsName</description>
+            <description>
+            The name of the VFS to use when opening the database connection.
+            If this is not specified, the default VFS will be used.
+            </description>
+            <description>N</description>
+            <description>null</description>
+            </item>
+            <item>
+            <description>ZipVfsVersion</description>
+            <description>
+            If non-null, this is the "version" of ZipVFS to use.  This requires
+            the System.Data.SQLite interop assembly -AND- primary managed assembly
+            to be compiled with the INTEROP_INCLUDE_ZIPVFS option; otherwise, this
+            property does nothing.  The valid values are "v2" and "v3".  Using
+            anyother value will cause an exception to be thrown.  Please see the
+            ZipVFS documentation for more information on how to use this parameter.
+            </description>
+            <description>N</description>
+            <description>null</description>
+            </item>
+            <item>
+            <description>DateTimeFormat</description>
+            <description>
+            <b>Ticks</b> - Use the value of DateTime.Ticks.<br/>
+            <b>ISO8601</b> - Use the ISO-8601 format.  Uses the "yyyy-MM-dd HH:mm:ss.FFFFFFFK" format for UTC
+            DateTime values and "yyyy-MM-dd HH:mm:ss.FFFFFFF" format for local DateTime values).<br/>
+            <b>JulianDay</b> - The interval of time in days and fractions of a day since January 1, 4713 BC.<br/>
+            <b>UnixEpoch</b> - The whole number of seconds since the Unix epoch (January 1, 1970).<br/>
+            <b>InvariantCulture</b> - Any culture-independent string value that the .NET Framework can interpret as a valid DateTime.<br/>
+            <b>CurrentCulture</b> - Any string value that the .NET Framework can interpret as a valid DateTime using the current culture.</description>
+            <description>N</description>
+            <description>ISO8601</description>
+            </item>
+            <item>
+            <description>DateTimeKind</description>
+            <description>
+            <b>Unspecified</b> - Not specified as either UTC or local time.
+            <br/>
+            <b>Utc</b> - The time represented is UTC.
+            <br/>
+            <b>Local</b> - The time represented is local time.
+            </description>
+            <description>N</description>
+            <description>Unspecified</description>
+            </item>
+            <item>
+            <description>DateTimeFormatString</description>
+            <description>
+            The exact DateTime format string to use for all formatting and parsing of all DateTime
+            values for this connection.
+            </description>
+            <description>N</description>
+            <description>null</description>
+            </item>
+            <item>
+            <description>BaseSchemaName</description>
+            <description>
+            Some base data classes in the framework (e.g. those that build SQL queries dynamically)
+            assume that an ADO.NET provider cannot support an alternate catalog (i.e. database) without supporting
+            alternate schemas as well; however, SQLite does not fit into this model.  Therefore, this value is used
+            as a placeholder and removed prior to preparing any SQL statements that may contain it.
+            </description>
+            <description>N</description>
+            <description>sqlite_default_schema</description>
+            </item>
+            <item>
+            <description>BinaryGUID</description>
+            <description>
+            <b>True</b> - Store GUID columns in binary form
+            <br/>
+            <b>False</b> - Store GUID columns as text
+            </description>
+            <description>N</description>
+            <description>True</description>
+            </item>
+            <item>
+            <description>Cache Size</description>
+            <description>
+            If the argument N is positive then the suggested cache size is set to N.
+            If the argument N is negative, then the number of cache pages is adjusted
+            to use approximately abs(N*4096) bytes of memory. Backwards compatibility
+            note: The behavior of cache_size with a negative N was different in SQLite
+            versions prior to 3.7.10. In version 3.7.9 and earlier, the number of
+            pages in the cache was set to the absolute value of N.
+            </description>
+            <description>N</description>
+            <description>-2000</description>
+            </item>
+            <item>
+            <description>Synchronous</description>
+            <description>
+            <b>Normal</b> - Normal file flushing behavior
+            <br/>
+            <b>Full</b> - Full flushing after all writes
+            <br/>
+            <b>Off</b> - Underlying OS flushes I/O's
+            </description>
+            <description>N</description>
+            <description>Full</description>
+            </item>
+            <item>
+            <description>Page Size</description>
+            <description>{size in bytes}</description>
+            <description>N</description>
+            <description>4096</description>
+            </item>
+            <item>
+            <description>Password</description>
+            <description>
+            {password} - Using this parameter requires that the legacy CryptoAPI based
+            codec (or the SQLite Encryption Extension) be enabled at compile-time for
+            both the native interop assembly and the core managed assemblies; otherwise,
+            using this parameter may result in an exception being thrown when attempting
+            to open the connection.
+            </description>
+            <description>N</description>
+            <description></description>
+            </item>
+            <item>
+            <description>HexPassword</description>
+            <description>
+            {hexPassword} - Must contain a sequence of zero or more hexadecimal encoded
+            byte values without a leading "0x" prefix.  Using this parameter requires
+            that the legacy CryptoAPI based codec (or the SQLite Encryption Extension)
+            be enabled at compile-time for both the native interop assembly and the
+            core managed assemblies; otherwise, using this parameter may result in an
+            exception being thrown when attempting to open the connection.
+            </description>
+            <description>N</description>
+            <description></description>
+            </item>
+            <item>
+            <description>Enlist</description>
+            <description>
+            <b>Y</b> - Automatically enlist in distributed transactions
+            <br/>
+            <b>N</b> - No automatic enlistment
+            </description>
+            <description>N</description>
+            <description>Y</description>
+            </item>
+            <item>
+            <description>Pooling</description>
+            <description>
+            <b>True</b> - Use connection pooling.<br/>
+            <b>False</b> - Do not use connection pooling.<br/><br/>
+            <b>WARNING:</b> When using the default connection pool implementation,
+            setting this property to True should be avoided by applications that make
+            use of COM (either directly or indirectly) due to possible deadlocks that
+            can occur during the finalization of some COM objects.
+            </description>
+            <description>N</description>
+            <description>False</description>
+            </item>
+            <item>
+            <description>FailIfMissing</description>
+            <description>
+            <b>True</b> - Don't create the database if it does not exist, throw an error instead
+            <br/>
+            <b>False</b> - Automatically create the database if it does not exist
+            </description>
+            <description>N</description>
+            <description>False</description>
+            </item>
+            <item>
+            <description>Max Page Count</description>
+            <description>{size in pages} - Limits the maximum number of pages (limits the size) of the database</description>
+            <description>N</description>
+            <description>0</description>
+            </item>
+            <item>
+            <description>Legacy Format</description>
+            <description>
+            <b>True</b> - Use the more compatible legacy 3.x database format
+            <br/>
+            <b>False</b> - Use the newer 3.3x database format which compresses numbers more effectively
+            </description>
+            <description>N</description>
+            <description>False</description>
+            </item>
+            <item>
+            <description>Default Timeout</description>
+            <description>{time in seconds}<br/>The default command timeout</description>
+            <description>N</description>
+            <description>30</description>
+            </item>
+            <item>
+            <description>BusyTimeout</description>
+            <description>{time in milliseconds}<br/>Sets the busy timeout for the core library.</description>
+            <description>N</description>
+            <description>0</description>
+            </item>
+            <item>
+            <description>WaitTimeout</description>
+            <description>{time in milliseconds}<br/>
+            <b>EXPERIMENTAL</b> -- The wait timeout to use with
+            <see cref="M:System.Data.SQLite.SQLiteConnection.WaitForEnlistmentReset(System.Int32,System.Nullable{System.Boolean})"/> method.  This is only used when
+            waiting for the enlistment to be reset prior to enlisting in a transaction,
+            and then only when the appropriate connection flag is set.</description>
+            <description>N</description>
+            <description>30000</description>
+            </item>
+            <item>
+            <description>Journal Mode</description>
+            <description>
+            <b>Delete</b> - Delete the journal file after a commit.
+            <br/>
+            <b>Persist</b> - Zero out and leave the journal file on disk after a
+            commit.
+            <br/>
+            <b>Off</b> - Disable the rollback journal entirely.  This saves disk I/O
+            but at the expense of database safety and integrity.  If the application
+            using SQLite crashes in the middle of a transaction when this journaling
+            mode is set, then the database file will very likely go corrupt.
+            <br/>
+            <b>Truncate</b> - Truncate the journal file to zero-length instead of
+            deleting it.
+            <br/>
+            <b>Memory</b> - Store the journal in volatile RAM.  This saves disk I/O
+            but at the expense of database safety and integrity.  If the application
+            using SQLite crashes in the middle of a transaction when this journaling
+            mode is set, then the database file will very likely go corrupt.
+            <br/>
+            <b>Wal</b> - Use a write-ahead log instead of a rollback journal.
+            </description>
+            <description>N</description>
+            <description>Delete</description>
+            </item>
+            <item>
+            <description>Read Only</description>
+            <description>
+            <b>True</b> - Open the database for read only access
+            <br/>
+            <b>False</b> - Open the database for normal read/write access
+            </description>
+            <description>N</description>
+            <description>False</description>
+            </item>
+            <item>
+            <description>Max Pool Size</description>
+            <description>The maximum number of connections for the given connection string that can be in the connection pool</description>
+            <description>N</description>
+            <description>100</description>
+            </item>
+            <item>
+            <description>Default IsolationLevel</description>
+            <description>The default transaciton isolation level</description>
+            <description>N</description>
+            <description>Serializable</description>
+            </item>
+            <item>
+            <description>Foreign Keys</description>
+            <description>Enable foreign key constraints</description>
+            <description>N</description>
+            <description>False</description>
+            </item>
+            <item>
+            <description>Flags</description>
+            <description>Extra behavioral flags for the connection.  See the <see cref="T:System.Data.SQLite.SQLiteConnectionFlags"/> enumeration for possible values.</description>
+            <description>N</description>
+            <description>Default</description>
+            </item>
+            <item>
+            <description>SetDefaults</description>
+            <description>
+            <b>True</b> - Apply the default connection settings to the opened database.<br/>
+            <b>False</b> - Skip applying the default connection settings to the opened database.
+            </description>
+            <description>N</description>
+            <description>True</description>
+            </item>
+            <item>
+            <description>ToFullPath</description>
+            <description>
+            <b>True</b> - Attempt to expand the data source file name to a fully qualified path before opening.
+            <br/>
+            <b>False</b> - Skip attempting to expand the data source file name to a fully qualified path before opening.
+            </description>
+            <description>N</description>
+            <description>True</description>
+            </item>
+            <item>
+            <description>PrepareRetries</description>
+            <description>
+            The maximum number of retries when preparing SQL to be executed.  This
+            normally only applies to preparation errors resulting from the database
+            schema being changed.
+            </description>
+            <description>N</description>
+            <description>3</description>
+            </item>
+            <item>
+            <description>ProgressOps</description>
+            <description>
+            The approximate number of virtual machine instructions between progress
+            events.  In order for progress events to actually fire, the event handler
+            must be added to the <see cref="E:System.Data.SQLite.SQLiteConnection.Progress"/> event as well.
+            </description>
+            <description>N</description>
+            <description>0</description>
+            </item>
+            <item>
+            <description>Recursive Triggers</description>
+            <description>
+            <b>True</b> - Enable the recursive trigger capability.
+            <b>False</b> - Disable the recursive trigger capability.
+            </description>
+            <description>N</description>
+            <description>False</description>
+            </item>
+            </list>
+            </remarks>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection.BadDbType">
+            <summary>
+            The "invalid value" for the <see cref="T:System.Data.DbType"/> enumeration used
+            by the <see cref="P:System.Data.SQLite.SQLiteConnection.DefaultDbType"/> property.  This constant is shared
+            by this class and the SQLiteConnectionStringBuilder class.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection.DefaultBaseSchemaName">
+            <summary>
+            The default "stub" (i.e. placeholder) base schema name to use when
+            returning column schema information.  Used as the initial value of
+            the BaseSchemaName property.  This should start with "sqlite_*"
+            because those names are reserved for use by SQLite (i.e. they cannot
+            be confused with the names of user objects).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._assembly">
+            <summary>
+            The managed assembly containing this type.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._syncRoot">
+            <summary>
+            Object used to synchronize access to the static instance data
+            for this class.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._sharedFlags">
+            <summary>
+            The extra connection flags to be used for all opened connections.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._lastConnectionInOpen">
+            <summary>
+            The <see cref="T:System.Data.SQLite.SQLiteConnection"/> instance (for this thread) that
+            had the most recent call to <see cref="M:System.Data.SQLite.SQLiteConnection.Open"/>.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._connectionState">
+            <summary>
+            State of the current connection
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._connectionString">
+            <summary>
+            The connection string
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._transactionLevel">
+            <summary>
+            Nesting level of the transactions open on the connection
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._transactionSequence">
+            <summary>
+            Transaction counter for the connection.  Currently, this is only used
+            to build SAVEPOINT names.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._noDispose">
+            <summary>
+            If this flag is non-zero, the <see cref="M:System.Data.SQLite.SQLiteConnection.Dispose"/> method will have
+            no effect; however, the <see cref="M:System.Data.SQLite.SQLiteConnection.Close"/> method will continue to
+            behave as normal.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._disposing">
+            <summary>
+            If set, then the connection is currently being disposed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._defaultIsolation">
+            <summary>
+            The default isolation level for new transactions
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._enlistmentSyncRoot">
+            <summary>
+            This object is used with lock statements to synchronize access to the
+            <see cref="F:System.Data.SQLite.SQLiteConnection._enlistment"/> field, below.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._enlistment">
+            <summary>
+            Whether or not the connection is enlisted in a distrubuted transaction
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._typeNames">
+            <summary>
+            The per-connection mappings between type names and <see cref="T:System.Data.DbType"/>
+            values.  These mappings override the corresponding global mappings.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._typeCallbacks">
+            <summary>
+            The per-connection mappings between type names and optional callbacks
+            for parameter binding and value reading.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._sql">
+            <summary>
+            The base SQLite object to interop with
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._dataSource">
+            <summary>
+            The database filename minus path and extension
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._baseSchemaName">
+            <summary>
+            The "stub" (i.e. placeholder) base schema name to use when returning
+            column schema information.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._flags">
+            <summary>
+            The extra behavioral flags for this connection, if any.  See the
+            <see cref="T:System.Data.SQLite.SQLiteConnectionFlags"/> enumeration for a list of
+            possible values.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._cachedSettings">
+            <summary>
+            The cached values for all settings that have been fetched on behalf
+            of this connection.  This cache may be cleared by calling the
+            <see cref="M:System.Data.SQLite.SQLiteConnection.ClearCachedSettings"/> method.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._defaultDbType">
+            <summary>
+            The default databse type for this connection.  This value will only
+            be used if the <see cref="F:System.Data.SQLite.SQLiteConnectionFlags.UseConnectionTypes"/>
+            flag is set.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._defaultTypeName">
+            <summary>
+            The default databse type name for this connection.  This value will only
+            be used if the <see cref="F:System.Data.SQLite.SQLiteConnectionFlags.UseConnectionTypes"/>
+            flag is set.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._vfsName">
+            <summary>
+            The name of the VFS to be used when opening the database connection.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._defaultTimeout">
+            <summary>
+            Default command timeout
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._busyTimeout">
+            <summary>
+            The default busy timeout to use with the SQLite core library.  This is
+            only used when opening a connection.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._waitTimeout">
+            <summary>
+            The default wait timeout to use with <see cref="M:System.Data.SQLite.SQLiteConnection.WaitForEnlistmentReset(System.Int32,System.Nullable{System.Boolean})"/>
+            method.  This is only used when waiting for the enlistment to be reset
+            prior to enlisting in a transaction, and then only when the appropriate
+            connection flag is set.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._prepareRetries">
+            <summary>
+            The maximum number of retries when preparing SQL to be executed.  This
+            normally only applies to preparation errors resulting from the database
+            schema being changed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._progressOps">
+            <summary>
+            The approximate number of virtual machine instructions between progress
+            events.  In order for progress events to actually fire, the event handler
+            must be added to the <see cref="E:System.Data.SQLite.SQLiteConnection.Progress"/> event as
+            well.  This value will only be used when opening the database.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnection._parseViaFramework">
+            <summary>
+            Non-zero if the built-in (i.e. framework provided) connection string
+            parser should be used when opening the connection.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.#ctor">
+            <overloads>
+             Constructs a new SQLiteConnection object
+             </overloads>
+             <summary>
+             Default constructor
+             </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.#ctor(System.String)">
+            <summary>
+            Initializes the connection with the specified connection string.
+            </summary>
+            <param name="connectionString">The connection string to use.</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.#ctor(System.IntPtr,System.String,System.Boolean)">
+            <summary>
+            Initializes the connection with a pre-existing native connection handle.
+            This constructor overload is intended to be used only by the private
+            <see cref="M:System.Data.SQLite.SQLiteModule.CreateOrConnect(System.Boolean,System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </summary>
+            <param name="db">
+            The native connection handle to use.
+            </param>
+            <param name="fileName">
+            The file name corresponding to the native connection handle.
+            </param>
+            <param name="ownHandle">
+            Non-zero if this instance owns the native connection handle and
+            should dispose of it when it is no longer needed.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.#ctor(System.String,System.Boolean)">
+            <summary>
+            Initializes the connection with the specified connection string.
+            </summary>
+            <param name="connectionString">
+            The connection string to use.
+            </param>
+            <param name="parseViaFramework">
+            Non-zero to parse the connection string using the built-in (i.e.
+            framework provided) parser when opening the connection.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.#ctor(System.Data.SQLite.SQLiteConnection)">
+            <summary>
+            Clones the settings and connection string from an existing connection.  If the existing connection is already open, this
+            function will open its own connection, enumerate any attached databases of the original connection, and automatically
+            attach to them.
+            </summary>
+            <param name="connection">The connection to copy the settings from.</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.GetNativeHandle(System.Data.SQLite.SQLiteConnection)">
+            <summary>
+            Attempts to lookup the native handle associated with the connection.  An exception will
+            be thrown if this cannot be accomplished.
+            </summary>
+            <param name="connection">
+            The connection associated with the desired native handle.
+            </param>
+            <returns>
+            The native handle associated with the connection or <see cref="F:System.IntPtr.Zero"/> if it
+            cannot be determined.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.OnChanged(System.Data.SQLite.SQLiteConnection,System.Data.SQLite.ConnectionEventArgs)">
+            <summary>
+            Raises the <see cref="E:System.Data.SQLite.SQLiteConnection.Changed"/> event.
+            </summary>
+            <param name="connection">
+            The connection associated with this event.  If this parameter is not
+            null and the specified connection cannot raise events, then the
+            registered event handlers will not be invoked.
+            </param>
+            <param name="e">
+            A <see cref="T:System.Data.SQLite.ConnectionEventArgs"/> that contains the event data.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.CreateHandle(System.IntPtr)">
+            <summary>
+            Creates and returns a new managed database connection handle.  This
+            method is intended to be used by implementations of the
+            <see cref="T:System.Data.SQLite.ISQLiteConnectionPool"/> interface only.  In theory, it
+            could be used by other classes; however, that usage is not supported.
+            </summary>
+            <param name="nativeHandle">
+            This must be a native database connection handle returned by the
+            SQLite core library and it must remain valid and open during the
+            entire duration of the calling method.
+            </param>
+            <returns>
+            The new managed database connection handle or null if it cannot be
+            created.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.BackupDatabase(System.Data.SQLite.SQLiteConnection,System.String,System.String,System.Int32,System.Data.SQLite.SQLiteBackupCallback,System.Int32)">
+            <summary>
+            Backs up the database, using the specified database connection as the
+            destination.
+            </summary>
+            <param name="destination">The destination database connection.</param>
+            <param name="destinationName">The destination database name.</param>
+            <param name="sourceName">The source database name.</param>
+            <param name="pages">
+            The number of pages to copy at a time -OR- a negative value to copy all
+            pages.  When a negative value is used, the <paramref name="callback" />
+            may never be invoked.
+            </param>
+            <param name="callback">
+            The method to invoke between each step of the backup process.  This
+            parameter may be null (i.e. no callbacks will be performed).  If the
+            callback returns false -OR- throws an exception, the backup is canceled.
+            </param>
+            <param name="retryMilliseconds">
+            The number of milliseconds to sleep after encountering a locking error
+            during the backup process.  A value less than zero means that no sleep
+            should be performed.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.ClearCachedSettings">
+            <summary>
+            Clears the per-connection cached settings.
+            </summary>
+            <returns>
+            The total number of per-connection settings cleared.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.TryGetCachedSetting(System.String,System.Object,System.Object@)">
+            <summary>
+            Queries and returns the value of the specified setting, using the
+            cached setting names and values for this connection, when available.
+            </summary>
+            <param name="name">
+            The name of the setting.
+            </param>
+            <param name="default">
+            The value to be returned if the setting has not been set explicitly
+            or cannot be determined.
+            </param>
+            <param name="value">
+            The value of the cached setting is stored here if found; otherwise,
+            the value of <paramref name="default" /> is stored here.
+            </param>
+            <returns>
+            Non-zero if the cached setting was found; otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.SetCachedSetting(System.String,System.Object)">
+            <summary>
+            Adds or sets the cached setting specified by <paramref name="name" />
+            to the value specified by <paramref name="value" />.
+            </summary>
+            <param name="name">
+            The name of the cached setting to add or replace.
+            </param>
+            <param name="value">
+            The new value of the cached setting.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.ClearTypeMappings">
+            <summary>
+            Clears the per-connection type mappings.
+            </summary>
+            <returns>
+            The total number of per-connection type mappings cleared.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.GetTypeMappings">
+            <summary>
+            Returns the per-connection type mappings.
+            </summary>
+            <returns>
+            The per-connection type mappings -OR- null if they are unavailable.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.AddTypeMapping(System.String,System.Data.DbType,System.Boolean)">
+            <summary>
+            Adds a per-connection type mapping, possibly replacing one or more
+            that already exist.
+            </summary>
+            <param name="typeName">
+            The case-insensitive database type name (e.g. "MYDATE").  The value
+            of this parameter cannot be null.  Using an empty string value (or
+            a string value consisting entirely of whitespace) for this parameter
+            is not recommended.
+            </param>
+            <param name="dataType">
+            The <see cref="T:System.Data.DbType"/> value that should be associated with the
+            specified type name.
+            </param>
+            <param name="primary">
+            Non-zero if this mapping should be considered to be the primary one
+            for the specified <see cref="T:System.Data.DbType"/>.
+            </param>
+            <returns>
+            A negative value if nothing was done.  Zero if no per-connection type
+            mappings were replaced (i.e. it was a pure add operation).  More than
+            zero if some per-connection type mappings were replaced.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.ClearTypeCallbacks">
+            <summary>
+            Clears the per-connection type callbacks.
+            </summary>
+            <returns>
+            The total number of per-connection type callbacks cleared.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.TryGetTypeCallbacks(System.String,System.Data.SQLite.SQLiteTypeCallbacks@)">
+            <summary>
+            Attempts to get the per-connection type callbacks for the specified
+            database type name.
+            </summary>
+            <param name="typeName">
+            The database type name.
+            </param>
+            <param name="callbacks">
+            Upon success, this parameter will contain the object holding the
+            callbacks for the database type name.  Upon failure, this parameter
+            will be null.
+            </param>
+            <returns>
+            Non-zero upon success; otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.SetTypeCallbacks(System.String,System.Data.SQLite.SQLiteTypeCallbacks)">
+            <summary>
+            Sets, resets, or clears the per-connection type callbacks for the
+            specified database type name.
+            </summary>
+            <param name="typeName">
+            The database type name.
+            </param>
+            <param name="callbacks">
+            The object holding the callbacks for the database type name.  If
+            this parameter is null, any callbacks for the database type name
+            will be removed if they are present.
+            </param>
+            <returns>
+            Non-zero if callbacks were set or removed; otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.BindFunction(System.Data.SQLite.SQLiteFunctionAttribute,System.Data.SQLite.SQLiteFunction)">
+            <summary>
+            Attempts to bind the specified <see cref="T:System.Data.SQLite.SQLiteFunction"/> object
+            instance to this connection.
+            </summary>
+            <param name="functionAttribute">
+            The <see cref="T:System.Data.SQLite.SQLiteFunctionAttribute"/> object instance containing
+            the metadata for the function to be bound.
+            </param>
+            <param name="function">
+            The <see cref="T:System.Data.SQLite.SQLiteFunction"/> object instance that implements the
+            function to be bound.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.BindFunction(System.Data.SQLite.SQLiteFunctionAttribute,System.Delegate,System.Delegate)">
+            <summary>
+            Attempts to bind the specified <see cref="T:System.Data.SQLite.SQLiteFunction"/> object
+            instance to this connection.
+            </summary>
+            <param name="functionAttribute">
+            The <see cref="T:System.Data.SQLite.SQLiteFunctionAttribute"/> object instance containing
+            the metadata for the function to be bound.
+            </param>
+            <param name="callback1">
+            A <see cref="T:System.Delegate"/> object instance that helps implement the
+            function to be bound.  For scalar functions, this corresponds to the
+            <see cref="T:System.Data.SQLite.SQLiteInvokeDelegate"/> type.  For aggregate functions,
+            this corresponds to the <see cref="T:System.Data.SQLite.SQLiteStepDelegate"/> type.  For
+            collation functions, this corresponds to the
+            <see cref="T:System.Data.SQLite.SQLiteCompareDelegate"/> type.
+            </param>
+            <param name="callback2">
+            A <see cref="T:System.Delegate"/> object instance that helps implement the
+            function to be bound.  For aggregate functions, this corresponds to the
+            <see cref="T:System.Data.SQLite.SQLiteFinalDelegate"/> type.  For other callback types, it
+            is not used and must be null.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.UnbindFunction(System.Data.SQLite.SQLiteFunctionAttribute)">
+            <summary>
+            Attempts to unbind the specified <see cref="T:System.Data.SQLite.SQLiteFunction"/> object
+            instance to this connection.
+            </summary>
+            <param name="functionAttribute">
+            The <see cref="T:System.Data.SQLite.SQLiteFunctionAttribute"/> object instance containing
+            the metadata for the function to be unbound.
+            </param>
+            <returns>Non-zero if the function was unbound.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.UnbindAllFunctions(System.Boolean)">
+            <summary>
+            This method unbinds all registered (known) functions -OR- all previously
+            bound user-defined functions from this connection.
+            </summary>
+            <param name="registered">
+            Non-zero to unbind all registered (known) functions -OR- zero to unbind
+            all functions currently bound to the connection.
+            </param>
+            <returns>
+            Non-zero if all the specified user-defined functions were unbound.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.ParseConnectionString(System.String,System.Boolean,System.Boolean)">
+            <summary>
+            Parses a connection string into component parts using the custom
+            connection string parser.  An exception may be thrown if the syntax
+            of the connection string is incorrect.
+            </summary>
+            <param name="connectionString">
+            The connection string to parse.
+            </param>
+            <param name="parseViaFramework">
+            Non-zero to parse the connection string using the algorithm provided
+            by the framework itself.  This is not applicable when running on the
+            .NET Compact Framework.
+            </param>
+            <param name="allowNameOnly">
+            Non-zero if names are allowed without values.
+            </param>
+            <returns>
+            The list of key/value pairs corresponding to the parameters specified
+            within the connection string.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.ParseConnectionString(System.Data.SQLite.SQLiteConnection,System.String,System.Boolean,System.Boolean)">
+            <summary>
+            Parses a connection string into component parts using the custom
+            connection string parser.  An exception may be thrown if the syntax
+            of the connection string is incorrect.
+            </summary>
+            <param name="connection">
+            The connection that will be using the parsed connection string.
+            </param>
+            <param name="connectionString">
+            The connection string to parse.
+            </param>
+            <param name="parseViaFramework">
+            Non-zero to parse the connection string using the algorithm provided
+            by the framework itself.  This is not applicable when running on the
+            .NET Compact Framework.
+            </param>
+            <param name="allowNameOnly">
+            Non-zero if names are allowed without values.
+            </param>
+            <returns>
+            The list of key/value pairs corresponding to the parameters specified
+            within the connection string.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.Dispose">
+            <summary>
+            Disposes and finalizes the connection, if applicable.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.Dispose(System.Boolean)">
+            <summary>
+            Cleans up resources (native and managed) associated with the current instance.
+            </summary>
+            <param name="disposing">
+            Zero when being disposed via garbage collection; otherwise, non-zero.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.Clone">
+            <summary>
+            Creates a clone of the connection.  All attached databases and user-defined functions are cloned.  If the existing connection is open, the cloned connection
+            will also be opened.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.CreateFile(System.String)">
+            <summary>
+            Creates a database file.  This just creates a zero-byte file which SQLite
+            will turn into a database when the file is opened properly.
+            </summary>
+            <param name="databaseFileName">The file to create</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.OnStateChange(System.Data.ConnectionState,System.Data.StateChangeEventArgs@)">
+            <summary>
+            Raises the state change event when the state of the connection changes
+            </summary>
+            <param name="newState">The new connection state.  If this is different
+            from the previous state, the <see cref="E:System.Data.SQLite.SQLiteConnection.StateChange"/> event is
+            raised.</param>
+            <param name="eventArgs">The event data created for the raised event, if
+            it was actually raised.</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.GetFallbackDefaultIsolationLevel">
+            <summary>
+            Determines and returns the fallback default isolation level when one cannot be
+            obtained from an existing connection instance.
+            </summary>
+            <returns>
+            The fallback default isolation level for this connection instance -OR-
+            <see cref="F:System.Data.IsolationLevel.Unspecified"/> if it cannot be determined.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.GetDefaultIsolationLevel">
+            <summary>
+            Determines and returns the default isolation level for this connection instance.
+            </summary>
+            <returns>
+            The default isolation level for this connection instance -OR-
+            <see cref="F:System.Data.IsolationLevel.Unspecified"/> if it cannot be determined.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.BeginTransaction(System.Data.IsolationLevel,System.Boolean)">
+            <summary>
+            OBSOLETE.  Creates a new SQLiteTransaction if one isn't already active on the connection.
+            </summary>
+            <param name="isolationLevel">This parameter is ignored.</param>
+            <param name="deferredLock">When TRUE, SQLite defers obtaining a write lock until a write operation is requested.
+            When FALSE, a writelock is obtained immediately.  The default is TRUE, but in a multi-threaded multi-writer
+            environment, one may instead choose to lock the database immediately to avoid any possible writer deadlock.</param>
+            <returns>Returns a SQLiteTransaction object.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.BeginTransaction(System.Boolean)">
+            <summary>
+            OBSOLETE.  Creates a new SQLiteTransaction if one isn't already active on the connection.
+            </summary>
+            <param name="deferredLock">When TRUE, SQLite defers obtaining a write lock until a write operation is requested.
+            When FALSE, a writelock is obtained immediately.  The default is false, but in a multi-threaded multi-writer
+            environment, one may instead choose to lock the database immediately to avoid any possible writer deadlock.</param>
+            <returns>Returns a SQLiteTransaction object.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.BeginTransaction(System.Data.IsolationLevel)">
+            <summary>
+            Creates a new <see cref="T:System.Data.SQLite.SQLiteTransaction"/> if one isn't already active on the connection.
+            </summary>
+            <param name="isolationLevel">Supported isolation levels are Serializable, ReadCommitted and Unspecified.</param>
+            <remarks>
+            Unspecified will use the default isolation level specified in the connection string.  If no isolation level is specified in the
+            connection string, Serializable is used.
+            Serializable transactions are the default.  In this mode, the engine gets an immediate lock on the database, and no other threads
+            may begin a transaction.  Other threads may read from the database, but not write.
+            With a ReadCommitted isolation level, locks are deferred and elevated as needed.  It is possible for multiple threads to start
+            a transaction in ReadCommitted mode, but if a thread attempts to commit a transaction while another thread
+            has a ReadCommitted lock, it may timeout or cause a deadlock on both threads until both threads' CommandTimeout's are reached.
+            </remarks>
+            <returns>Returns a SQLiteTransaction object.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.BeginTransaction">
+            <summary>
+            Creates a new <see cref="T:System.Data.SQLite.SQLiteTransaction"/> if one isn't already
+            active on the connection.
+            </summary>
+            <returns>Returns the new transaction object.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.BeginDbTransaction(System.Data.IsolationLevel)">
+            <summary>
+            Forwards to the local <see cref="M:System.Data.SQLite.SQLiteConnection.BeginTransaction(System.Data.IsolationLevel)"/> function
+            </summary>
+            <param name="isolationLevel">Supported isolation levels are Unspecified, Serializable, and ReadCommitted</param>
+            <returns></returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.ChangeDatabase(System.String)">
+            <summary>
+            This method is not implemented; however, the <see cref="E:System.Data.SQLite.SQLiteConnection.Changed"/>
+            event will still be raised.
+            </summary>
+            <param name="databaseName"></param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.Close">
+            <summary>
+            When the database connection is closed, all commands linked to this connection are automatically reset.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.ClearPool(System.Data.SQLite.SQLiteConnection)">
+            <summary>
+            Clears the connection pool associated with the connection.  Any other active connections using the same database file
+            will be discarded instead of returned to the pool when they are closed.
+            </summary>
+            <param name="connection"></param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.ClearAllPools">
+            <summary>
+            Clears all connection pools.  Any active connections will be discarded instead of sent to the pool when they are closed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.CreateCommand">
+            <summary>
+            Create a new <see cref="T:System.Data.SQLite.SQLiteCommand"/> and associate it with this connection.
+            </summary>
+            <returns>Returns a new command object already assigned to this connection.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.CreateDbCommand">
+            <summary>
+            Forwards to the local <see cref="M:System.Data.SQLite.SQLiteConnection.CreateCommand"/> function.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.CreateSession(System.String)">
+            <summary>
+            Attempts to create a new <see cref="T:System.Data.SQLite.ISQLiteSession"/> object instance
+            using this connection and the specified database name.
+            </summary>
+            <param name="databaseName">
+            The name of the database for the newly created session.
+            </param>
+            <returns>
+            The newly created session -OR- null if it cannot be created.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.CreateChangeSet(System.Byte[])">
+            <summary>
+            Attempts to create a new <see cref="T:System.Data.SQLite.ISQLiteChangeSet"/> object instance
+            using this connection and the specified raw data.
+            </summary>
+            <param name="rawData">
+            The raw data that contains a change set (or patch set).
+            </param>
+            <returns>
+            The newly created change set -OR- null if it cannot be created.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.CreateChangeSet(System.Byte[],System.Data.SQLite.SQLiteChangeSetStartFlags)">
+            <summary>
+            Attempts to create a new <see cref="T:System.Data.SQLite.ISQLiteChangeSet"/> object instance
+            using this connection and the specified raw data.
+            </summary>
+            <param name="rawData">
+            The raw data that contains a change set (or patch set).
+            </param>
+            <param name="flags">
+            The flags used to create the change set iterator.
+            </param>
+            <returns>
+            The newly created change set -OR- null if it cannot be created.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.CreateChangeSet(System.IO.Stream,System.IO.Stream)">
+            <summary>
+            Attempts to create a new <see cref="T:System.Data.SQLite.ISQLiteChangeSet"/> object instance
+            using this connection and the specified stream.
+            </summary>
+            <param name="inputStream">
+            The stream where the raw data that contains a change set (or patch set)
+            may be read.
+            </param>
+            <param name="outputStream">
+            The stream where the raw data that contains a change set (or patch set)
+            may be written.
+            </param>
+            <returns>
+            The newly created change set -OR- null if it cannot be created.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.CreateChangeSet(System.IO.Stream,System.IO.Stream,System.Data.SQLite.SQLiteChangeSetStartFlags)">
+            <summary>
+            Attempts to create a new <see cref="T:System.Data.SQLite.ISQLiteChangeSet"/> object instance
+            using this connection and the specified stream.
+            </summary>
+            <param name="inputStream">
+            The stream where the raw data that contains a change set (or patch set)
+            may be read.
+            </param>
+            <param name="outputStream">
+            The stream where the raw data that contains a change set (or patch set)
+            may be written.
+            </param>
+            <param name="flags">
+            The flags used to create the change set iterator.
+            </param>
+            <returns>
+            The newly created change set -OR- null if it cannot be created.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.CreateChangeGroup">
+            <summary>
+            Attempts to create a new <see cref="T:System.Data.SQLite.ISQLiteChangeGroup"/> object
+            instance using this connection.
+            </summary>
+            <returns>
+            The newly created change group -OR- null if it cannot be created.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.ShouldUseLegacyConnectionStringParser(System.Data.SQLite.SQLiteConnection)">
+            <summary>
+            Determines if the legacy connection string parser should be used.
+            </summary>
+            <param name="connection">
+            The connection that will be using the parsed connection string.
+            </param>
+            <returns>
+            Non-zero if the legacy connection string parser should be used.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.ParseConnectionString(System.String,System.Boolean)">
+            <summary>
+            Parses a connection string into component parts using the custom
+            connection string parser.  An exception may be thrown if the syntax
+            of the connection string is incorrect.
+            </summary>
+            <param name="connectionString">
+            The connection string to parse.
+            </param>
+            <param name="allowNameOnly">
+            Non-zero if names are allowed without values.
+            </param>
+            <returns>
+            The list of key/value pairs corresponding to the parameters specified
+            within the connection string.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.ParseConnectionString(System.Data.SQLite.SQLiteConnection,System.String,System.Boolean)">
+            <summary>
+            Parses a connection string into component parts using the custom
+            connection string parser.  An exception may be thrown if the syntax
+            of the connection string is incorrect.
+            </summary>
+            <param name="connection">
+            The connection that will be using the parsed connection string.
+            </param>
+            <param name="connectionString">
+            The connection string to parse.
+            </param>
+            <param name="allowNameOnly">
+            Non-zero if names are allowed without values.
+            </param>
+            <returns>
+            The list of key/value pairs corresponding to the parameters specified
+            within the connection string.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.ParseConnectionStringViaFramework(System.Data.SQLite.SQLiteConnection,System.String,System.Boolean)">
+            <summary>
+            Parses a connection string using the built-in (i.e. framework provided)
+            connection string parser class and returns the key/value pairs.  An
+            exception may be thrown if the connection string is invalid or cannot be
+            parsed.  When compiled for the .NET Compact Framework, the custom
+            connection string parser is always used instead because the framework
+            provided one is unavailable there.
+            </summary>
+            <param name="connection">
+            The connection that will be using the parsed connection string.
+            </param>
+            <param name="connectionString">
+            The connection string to parse.
+            </param>
+            <param name="strict">
+            Non-zero to throw an exception if any connection string values are not of
+            the <see cref="T:System.String"/> type.  This is not applicable when running on
+            the .NET Compact Framework.
+            </param>
+            <returns>The list of key/value pairs.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.EnlistTransaction(System.Transactions.Transaction)">
+            <summary>
+            Manual distributed transaction enlistment support
+            </summary>
+            <param name="transaction">The distributed transaction to enlist in</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.WaitForEnlistmentReset(System.Int32,System.Nullable{System.Boolean})">
+            <summary>
+            <b>EXPERIMENTAL</b> --
+            Waits for the enlistment associated with this connection to be reset.
+            This method always throws <see cref="T:System.NotImplementedException"/> when
+            running on the .NET Compact Framework.
+            </summary>
+            <param name="timeoutMilliseconds">
+            The approximate maximum number of milliseconds to wait before timing
+            out the wait operation.
+            </param>
+            <param name="returnOnDisposed">
+            The return value to use if the connection has been disposed; if this
+            value is null, <see cref="T:System.ObjectDisposedException"/> will be raised
+            if the connection has been disposed.
+            </param>
+            <returns>
+            Non-zero if the enlistment assciated with this connection was reset;
+            otherwise, zero.  It should be noted that this method returning a
+            non-zero value does not necessarily guarantee that the connection
+            can enlist in a new transaction (i.e. due to potentical race with
+            other threads); therefore, callers should generally use try/catch
+            when calling the <see cref="M:System.Data.SQLite.SQLiteConnection.EnlistTransaction(System.Transactions.Transaction)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.FindKey(System.Collections.Generic.SortedList{System.String,System.String},System.String,System.String)">
+            <summary>
+            Looks for a key in the array of key/values of the parameter string.  If not found, return the specified default value
+            </summary>
+            <param name="items">The list to look in</param>
+            <param name="key">The key to find</param>
+            <param name="defValue">The default value to return if the key is not found</param>
+            <returns>The value corresponding to the specified key, or the default value if not found.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.TryParseEnum(System.Type,System.String,System.Boolean)">
+            <summary>
+            Attempts to convert the string value to an enumerated value of the specified type.
+            </summary>
+            <param name="type">The enumerated type to convert the string value to.</param>
+            <param name="value">The string value to be converted.</param>
+            <param name="ignoreCase">Non-zero to make the conversion case-insensitive.</param>
+            <returns>The enumerated value upon success or null upon error.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.TryParseByte(System.String,System.Globalization.NumberStyles,System.Byte@)">
+            <summary>
+            Attempts to convert an input string into a byte value.
+            </summary>
+            <param name="value">
+            The string value to be converted.
+            </param>
+            <param name="style">
+            The number styles to use for the conversion.
+            </param>
+            <param name="result">
+            Upon sucess, this will contain the parsed byte value.
+            Upon failure, the value of this parameter is undefined.
+            </param>
+            <returns>
+            Non-zero upon success; zero on failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.SetLimitOption(System.Data.SQLite.SQLiteLimitOpsEnum,System.Int32)">
+            <summary>
+            Change a limit value for the database.
+            </summary>
+            <param name="option">
+            The database limit to change.
+            </param>
+            <param name="value">
+            The new value for the specified limit.
+            </param>
+            <returns>
+            The old value for the specified limit -OR- negative one if an error
+            occurs.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.SetConfigurationOption(System.Data.SQLite.SQLiteConfigDbOpsEnum,System.Object)">
+            <summary>
+            Change a configuration option value for the database.
+            </summary>
+            <param name="option">
+            The database configuration option to change.
+            </param>
+            <param name="value">
+            The new value for the specified configuration option.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.EnableExtensions(System.Boolean)">
+            <summary>
+            Enables or disables extension loading.
+            </summary>
+            <param name="enable">
+            True to enable loading of extensions, false to disable.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.LoadExtension(System.String)">
+            <summary>
+            Loads a SQLite extension library from the named dynamic link library file.
+            </summary>
+            <param name="fileName">
+            The name of the dynamic link library file containing the extension.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.LoadExtension(System.String,System.String)">
+            <summary>
+            Loads a SQLite extension library from the named dynamic link library file.
+            </summary>
+            <param name="fileName">
+            The name of the dynamic link library file containing the extension.
+            </param>
+            <param name="procName">
+            The name of the exported function used to initialize the extension.
+            If null, the default "sqlite3_extension_init" will be used.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.CreateModule(System.Data.SQLite.SQLiteModule)">
+            <summary>
+            Creates a disposable module containing the implementation of a virtual
+            table.
+            </summary>
+            <param name="module">
+            The module object to be used when creating the disposable module.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.FromHexString(System.String)">
+            <summary>
+            Parses a string containing a sequence of zero or more hexadecimal
+            encoded byte values and returns the resulting byte array.  The
+            "0x" prefix is not allowed on the input string.
+            </summary>
+            <param name="text">
+            The input string containing zero or more hexadecimal encoded byte
+            values.
+            </param>
+            <returns>
+            A byte array containing the parsed byte values or null if an error
+            was encountered.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.ToHexString(System.Byte[])">
+            <summary>
+            Creates and returns a string containing the hexadecimal encoded byte
+            values from the input array.
+            </summary>
+            <param name="array">
+            The input array of bytes.
+            </param>
+            <returns>
+            The resulting string or null upon failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.FromHexString(System.String,System.String@)">
+            <summary>
+            Parses a string containing a sequence of zero or more hexadecimal
+            encoded byte values and returns the resulting byte array.  The
+            "0x" prefix is not allowed on the input string.
+            </summary>
+            <param name="text">
+            The input string containing zero or more hexadecimal encoded byte
+            values.
+            </param>
+            <param name="error">
+            Upon failure, this will contain an appropriate error message.
+            </param>
+            <returns>
+            A byte array containing the parsed byte values or null if an error
+            was encountered.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.GetDefaultPooling">
+            <summary>
+            This method figures out what the default connection pool setting should
+            be based on the connection flags.  When present, the "Pooling" connection
+            string property value always overrides the value returned by this method.
+            </summary>
+            <returns>
+            Non-zero if the connection pool should be enabled by default; otherwise,
+            zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.GetEffectiveIsolationLevel(System.Data.IsolationLevel)">
+            <summary>
+            Determines the transaction isolation level that should be used by
+            the caller, primarily based upon the one specified by the caller.
+            If mapping of transaction isolation levels is enabled, the returned
+            transaction isolation level may be significantly different than the
+            originally specified one.
+            </summary>
+            <param name="isolationLevel">
+            The originally specified transaction isolation level.
+            </param>
+            <returns>
+            The transaction isolation level that should be used.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.Open">
+            <summary>
+            Opens the connection using the parameters found in the <see cref="P:System.Data.SQLite.SQLiteConnection.ConnectionString"/>.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.OpenAndReturn">
+            <summary>
+            Opens the connection using the parameters found in the <see cref="P:System.Data.SQLite.SQLiteConnection.ConnectionString"/> and then returns it.
+            </summary>
+            <returns>The current connection object.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.Cancel">
+            <summary>
+            This method causes any pending database operation to abort and return at
+            its earliest opportunity.  This routine is typically called in response
+            to a user action such as pressing "Cancel" or Ctrl-C where the user wants
+            a long query operation to halt immediately.  It is safe to call this
+            routine from any thread.  However, it is not safe to call this routine
+            with a database connection that is closed or might close before this method
+            returns.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.IsReadOnly(System.String)">
+            <summary>
+            Checks if this connection to the specified database should be considered
+            read-only.  An exception will be thrown if the database name specified
+            via <paramref name="name" /> cannot be found.
+            </summary>
+            <param name="name">
+            The name of a database associated with this connection -OR- null for the
+            main database.
+            </param>
+            <returns>
+            Non-zero if this connection to the specified database should be considered
+            read-only.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.GetMemoryStatistics(System.Collections.Generic.IDictionary{System.String,System.Int64}@)">
+            <summary>
+            Returns various global memory statistics for the SQLite core library via
+            a dictionary of key/value pairs.  Currently, only the "MemoryUsed" and
+            "MemoryHighwater" keys are returned and they have values that correspond
+            to the values that could be obtained via the <see cref="P:System.Data.SQLite.SQLiteConnection.MemoryUsed"/>
+            and <see cref="P:System.Data.SQLite.SQLiteConnection.MemoryHighwater"/> connection properties.
+            </summary>
+            <param name="statistics">
+            This dictionary will be populated with the global memory statistics.  It
+            will be created if necessary.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.ReleaseMemory">
+            <summary>
+            Attempts to free as much heap memory as possible for this database connection.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.ReleaseMemory(System.Int32,System.Boolean,System.Boolean,System.Int32@,System.Boolean@,System.UInt32@)">
+            <summary>
+            Attempts to free N bytes of heap memory by deallocating non-essential memory
+            allocations held by the database library. Memory used to cache database pages
+            to improve performance is an example of non-essential memory.  This is a no-op
+            returning zero if the SQLite core library was not compiled with the compile-time
+            option SQLITE_ENABLE_MEMORY_MANAGEMENT.  Optionally, attempts to reset and/or
+            compact the Win32 native heap, if applicable.
+            </summary>
+            <param name="nBytes">
+            The requested number of bytes to free.
+            </param>
+            <param name="reset">
+            Non-zero to attempt a heap reset.
+            </param>
+            <param name="compact">
+            Non-zero to attempt heap compaction.
+            </param>
+            <param name="nFree">
+            The number of bytes actually freed.  This value may be zero.
+            </param>
+            <param name="resetOk">
+            This value will be non-zero if the heap reset was successful.
+            </param>
+            <param name="nLargest">
+            The size of the largest committed free block in the heap, in bytes.
+            This value will be zero unless heap compaction is enabled.
+            </param>
+            <returns>
+            A standard SQLite return code (i.e. zero for success and non-zero
+            for failure).
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.SetMemoryStatus(System.Boolean)">
+            <summary>
+            Sets the status of the memory usage tracking subsystem in the SQLite core library.  By default, this is enabled.
+            If this is disabled, memory usage tracking will not be performed.  This is not really a per-connection value, it is
+            global to the process.
+            </summary>
+            <param name="value">Non-zero to enable memory usage tracking, zero otherwise.</param>
+            <returns>A standard SQLite return code (i.e. zero for success and non-zero for failure).</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.TryGetLastCachedSetting(System.String,System.Object,System.Object@)">
+            <summary>
+            Queries and returns the value of the specified setting, using the
+            cached setting names and values for the last connection that used
+            the <see cref="M:System.Data.SQLite.SQLiteConnection.Open"/> method, when available.
+            </summary>
+            <param name="name">
+            The name of the setting.
+            </param>
+            <param name="default">
+            The value to be returned if the setting has not been set explicitly
+            or cannot be determined.
+            </param>
+            <param name="value">
+            The value of the cached setting is stored here if found; otherwise,
+            the value of <paramref name="default"/> is stored here.
+            </param>
+            <returns>
+            Non-zero if the cached setting was found; otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.SetLastCachedSetting(System.String,System.Object)">
+            <summary>
+            Adds or sets the cached setting specified by <paramref name="name"/>
+            to the value specified by <paramref name="value"/> using the cached
+            setting names and values for the last connection that used the
+            <see cref="M:System.Data.SQLite.SQLiteConnection.Open"/> method, when available.
+            </summary>
+            <param name="name">
+            The name of the cached setting to add or replace.
+            </param>
+            <param name="value">
+            The new value of the cached setting.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.Shutdown">
+            <summary>
+            Passes a shutdown request to the SQLite core library.  Does not throw
+            an exception if the shutdown request fails.
+            </summary>
+            <returns>
+            A standard SQLite return code (i.e. zero for success and non-zero for
+            failure).
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.Shutdown(System.Boolean,System.Boolean)">
+            <summary>
+            Passes a shutdown request to the SQLite core library.  Throws an
+            exception if the shutdown request fails and the no-throw parameter
+            is non-zero.
+            </summary>
+            <param name="directories">
+            Non-zero to reset the database and temporary directories to their
+            default values, which should be null for both.
+            </param>
+            <param name="noThrow">
+            When non-zero, throw an exception if the shutdown request fails.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.SetExtendedResultCodes(System.Boolean)">
+            Enables or disables extended result codes returned by SQLite
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.ResultCode">
+            Enables or disables extended result codes returned by SQLite
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.ExtendedResultCode">
+            Enables or disables extended result codes returned by SQLite
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.LogMessage(System.Data.SQLite.SQLiteErrorCode,System.String)">
+            Add a log message via the SQLite sqlite3_log interface.
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.LogMessage(System.Int32,System.String)">
+            Add a log message via the SQLite sqlite3_log interface.
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.SetAvRetry(System.Int32@,System.Int32@)">
+            <summary>
+            Queries or modifies the number of retries or the retry interval (in milliseconds) for
+            certain I/O operations that may fail due to anti-virus software.
+            </summary>
+            <param name="count">The number of times to retry the I/O operation.  A negative value
+            will cause the current count to be queried and replace that negative value.</param>
+            <param name="interval">The number of milliseconds to wait before retrying the I/O
+            operation.  This number is multiplied by the number of retry attempts so far to come
+            up with the final number of milliseconds to wait.  A negative value will cause the
+            current interval to be queried and replace that negative value.</param>
+            <returns>Zero for success, non-zero for error.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.SetChunkSize(System.Int32)">
+            <summary>
+            Sets the chunk size for the primary file associated with this database
+            connection.
+            </summary>
+            <param name="size">
+            The new chunk size for the main database, in bytes.
+            </param>
+            <returns>
+            Zero for success, non-zero for error.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.UnwrapString(System.String)">
+            <summary>
+            Removes one set of surrounding single -OR- double quotes from the string
+            value and returns the resulting string value.  If the string is null, empty,
+            or contains quotes that are not balanced, nothing is done and the original
+            string value will be returned.
+            </summary>
+            <param name="value">The string value to process.</param>
+            <returns>
+            The string value, modified to remove one set of surrounding single -OR-
+            double quotes, if applicable.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.GetDataDirectory">
+            <summary>
+            Determines the directory to be used when dealing with the "|DataDirectory|"
+            macro in a database file name.
+            </summary>
+            <returns>
+            The directory to use in place of the "|DataDirectory|" macro -OR- null if it
+            cannot be determined.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.ExpandFileName(System.String,System.Boolean)">
+            <summary>
+            Expand the filename of the data source, resolving the |DataDirectory|
+            macro as appropriate.
+            </summary>
+            <param name="sourceFile">The database filename to expand</param>
+            <param name="toFullPath">
+            Non-zero if the returned file name should be converted to a full path
+            (except when using the .NET Compact Framework).
+            </param>
+            <returns>The expanded path and filename of the filename</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.GetSchema">
+            <overloads>
+             The following commands are used to extract schema information out of the database.  Valid schema types are:
+             <list type="bullet">
+             <item>
+             <description>MetaDataCollections</description>
+             </item>
+             <item>
+             <description>DataSourceInformation</description>
+             </item>
+             <item>
+             <description>Catalogs</description>
+             </item>
+             <item>
+             <description>Columns</description>
+             </item>
+             <item>
+             <description>ForeignKeys</description>
+             </item>
+             <item>
+             <description>Indexes</description>
+             </item>
+             <item>
+             <description>IndexColumns</description>
+             </item>
+             <item>
+             <description>Tables</description>
+             </item>
+             <item>
+             <description>Views</description>
+             </item>
+             <item>
+             <description>ViewColumns</description>
+             </item>
+             </list>
+             </overloads>
+             <summary>
+             Returns the MetaDataCollections schema
+             </summary>
+             <returns>A DataTable of the MetaDataCollections schema</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.GetSchema(System.String)">
+            <summary>
+            Returns schema information of the specified collection
+            </summary>
+            <param name="collectionName">The schema collection to retrieve</param>
+            <returns>A DataTable of the specified collection</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.GetSchema(System.String,System.String[])">
+            <summary>
+            Retrieves schema information using the specified constraint(s) for the specified collection
+            </summary>
+            <param name="collectionName">The collection to retrieve.</param>
+            <param name="restrictionValues">
+            The restrictions to impose.  Typically, this may include:
+            <list type="table">
+            <listheader>
+            <term>restrictionValues element index</term>
+            <term>usage</term>
+            </listheader>
+            <item>
+            <description>0</description>
+            <description>The database (or catalog) name, if applicable.</description>
+            </item>
+            <item>
+            <description>1</description>
+            <description>The schema name.  This is not used by this provider.</description>
+            </item>
+            <item>
+            <description>2</description>
+            <description>The table name, if applicable.</description>
+            </item>
+            <item>
+            <description>3</description>
+            <description>
+            Depends on <paramref name="collectionName" />.
+            When "IndexColumns", it is the index name; otherwise, it is the column name.
+            </description>
+            </item>
+            <item>
+            <description>4</description>
+            <description>
+            Depends on <paramref name="collectionName" />.
+            When "IndexColumns", it is the column name; otherwise, it is not used.
+            </description>
+            </item>
+            </list>
+            </param>
+            <returns>A DataTable of the specified collection</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.Schema_MetaDataCollections">
+            <summary>
+            Builds a MetaDataCollections schema datatable
+            </summary>
+            <returns>DataTable</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.Schema_DataSourceInformation">
+            <summary>
+            Builds a DataSourceInformation datatable
+            </summary>
+            <returns>DataTable</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.Schema_Columns(System.String,System.String,System.String)">
+            <summary>
+            Build a Columns schema
+            </summary>
+            <param name="strCatalog">The catalog (attached database) to query, can be null</param>
+            <param name="strTable">The table to retrieve schema information for, can be null</param>
+            <param name="strColumn">The column to retrieve schema information for, can be null</param>
+            <returns>DataTable</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.Schema_Indexes(System.String,System.String,System.String)">
+            <summary>
+            Returns index information for the given database and catalog
+            </summary>
+            <param name="strCatalog">The catalog (attached database) to query, can be null</param>
+            <param name="strIndex">The name of the index to retrieve information for, can be null</param>
+            <param name="strTable">The table to retrieve index information for, can be null</param>
+            <returns>DataTable</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.Schema_Tables(System.String,System.String,System.String)">
+            <summary>
+            Retrieves table schema information for the database and catalog
+            </summary>
+            <param name="strCatalog">The catalog (attached database) to retrieve tables on</param>
+            <param name="strTable">The table to retrieve, can be null</param>
+            <param name="strType">The table type, can be null</param>
+            <returns>DataTable</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.Schema_Views(System.String,System.String)">
+            <summary>
+            Retrieves view schema information for the database
+            </summary>
+            <param name="strCatalog">The catalog (attached database) to retrieve views on</param>
+            <param name="strView">The view name, can be null</param>
+            <returns>DataTable</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.Schema_Catalogs(System.String)">
+            <summary>
+            Retrieves catalog (attached databases) schema information for the database
+            </summary>
+            <param name="strCatalog">The catalog to retrieve, can be null</param>
+            <returns>DataTable</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.Schema_IndexColumns(System.String,System.String,System.String,System.String)">
+            <summary>
+            Returns the base column information for indexes in a database
+            </summary>
+            <param name="strCatalog">The catalog to retrieve indexes for (can be null)</param>
+            <param name="strTable">The table to restrict index information by (can be null)</param>
+            <param name="strIndex">The index to restrict index information by (can be null)</param>
+            <param name="strColumn">The source column to restrict index information by (can be null)</param>
+            <returns>A DataTable containing the results</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.Schema_ViewColumns(System.String,System.String,System.String)">
+            <summary>
+            Returns detailed column information for a specified view
+            </summary>
+            <param name="strCatalog">The catalog to retrieve columns for (can be null)</param>
+            <param name="strView">The view to restrict column information by (can be null)</param>
+            <param name="strColumn">The source column to restrict column information by (can be null)</param>
+            <returns>A DataTable containing the results</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnection.Schema_ForeignKeys(System.String,System.String,System.String)">
+            <summary>
+            Retrieves foreign key information from the specified set of filters
+            </summary>
+            <param name="strCatalog">An optional catalog to restrict results on</param>
+            <param name="strTable">An optional table to restrict results on</param>
+            <param name="strKeyName">An optional foreign key name to restrict results on</param>
+            <returns>A DataTable with the results of the query</returns>
+        </member>
+        <member name="E:System.Data.SQLite.SQLiteConnection._handlers">
+            <summary>
+            Static variable to store the connection event handlers to call.
+            </summary>
+        </member>
+        <member name="E:System.Data.SQLite.SQLiteConnection.StateChange">
+            <summary>
+            This event is raised whenever the database is opened or closed.
+            </summary>
+        </member>
+        <member name="E:System.Data.SQLite.SQLiteConnection.Changed">
+            <summary>
+            This event is raised when events related to the lifecycle of a
+            SQLiteConnection object occur.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.ConnectionPool">
+            <summary>
+            This property is used to obtain or set the custom connection pool
+            implementation to use, if any.  Setting this property to null will
+            cause the default connection pool implementation to be used.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.PoolCount">
+            <summary>
+            Returns the number of pool entries for the file name associated with this connection.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.ConnectionString">
+            <summary>
+            The connection string containing the parameters for the connection
+            </summary>
+            <remarks>
+            For the complete list of supported connection string properties,
+            please see <see cref="T:System.Data.SQLite.SQLiteConnection"/>.
+            </remarks>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.DataSource">
+            <summary>
+            Returns the data source file name without extension or path.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.FileName">
+            <summary>
+            Returns the fully qualified path and file name for the currently open
+            database, if any.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.Database">
+            <summary>
+            Returns the string "main".
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.DefaultTimeout">
+            <summary>
+            Gets/sets the default command timeout for newly-created commands.  This is especially useful for
+            commands used internally such as inside a SQLiteTransaction, where setting the timeout is not possible.
+            This can also be set in the ConnectionString with "Default Timeout"
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.BusyTimeout">
+            <summary>
+            Gets/sets the default busy timeout to use with the SQLite core library.  This is only used when
+            opening a connection.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.WaitTimeout">
+            <summary>
+            <b>EXPERIMENTAL</b> --
+            The wait timeout to use with <see cref="M:System.Data.SQLite.SQLiteConnection.WaitForEnlistmentReset(System.Int32,System.Nullable{System.Boolean})"/> method.
+            This is only used when waiting for the enlistment to be reset prior to
+            enlisting in a transaction, and then only when the appropriate connection
+            flag is set.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.PrepareRetries">
+            <summary>
+            The maximum number of retries when preparing SQL to be executed.  This
+            normally only applies to preparation errors resulting from the database
+            schema being changed.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.ProgressOps">
+            <summary>
+            The approximate number of virtual machine instructions between progress
+            events.  In order for progress events to actually fire, the event handler
+            must be added to the <see cref="E:System.Data.SQLite.SQLiteConnection.Progress"/> event as
+            well.  This value will only be used when the underlying native progress
+            callback needs to be changed.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.ParseViaFramework">
+            <summary>
+            Non-zero if the built-in (i.e. framework provided) connection string
+            parser should be used when opening the connection.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.Flags">
+            <summary>
+            Gets/sets the extra behavioral flags for this connection.  See the
+            <see cref="T:System.Data.SQLite.SQLiteConnectionFlags"/> enumeration for a list of
+            possible values.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.DefaultDbType">
+            <summary>
+            Gets/sets the default database type for this connection.  This value
+            will only be used when not null.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.DefaultTypeName">
+            <summary>
+            Gets/sets the default database type name for this connection.  This
+            value will only be used when not null.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.VfsName">
+            <summary>
+            Gets/sets the VFS name for this connection.  This value will only be
+            used when opening the database.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.OwnHandle">
+            <summary>
+            Returns non-zero if the underlying native connection handle is
+            owned by this instance.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.ServerVersion">
+            <summary>
+            Returns the version of the underlying SQLite database engine
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.LastInsertRowId">
+            <summary>
+            Returns the rowid of the most recent successful INSERT into the database from this connection.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.Changes">
+            <summary>
+            Returns the number of rows changed by the last INSERT, UPDATE, or DELETE statement executed on
+            this connection.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.AutoCommit">
+            <summary>
+            Returns non-zero if the given database connection is in autocommit mode.
+            Autocommit mode is on by default.  Autocommit mode is disabled by a BEGIN
+            statement.  Autocommit mode is re-enabled by a COMMIT or ROLLBACK.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.MemoryUsed">
+            <summary>
+            Returns the amount of memory (in bytes) currently in use by the SQLite core library.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.MemoryHighwater">
+            <summary>
+            Returns the maximum amount of memory (in bytes) used by the SQLite core library since the high-water mark was last reset.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.DefineConstants">
+            <summary>
+            Returns a string containing the define constants (i.e. compile-time
+            options) used to compile the core managed assembly, delimited with
+            spaces.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.SQLiteVersion">
+            <summary>
+            Returns the version of the underlying SQLite core library.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.SQLiteSourceId">
+            <summary>
+            This method returns the string whose value is the same as the
+            SQLITE_SOURCE_ID C preprocessor macro used when compiling the
+            SQLite core library.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.SQLiteCompileOptions">
+            <summary>
+            Returns a string containing the compile-time options used to
+            compile the SQLite core native library, delimited with spaces.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.InteropVersion">
+            <summary>
+            This method returns the version of the interop SQLite assembly
+            used.  If the SQLite interop assembly is not in use or the
+            necessary information cannot be obtained for any reason, a null
+            value may be returned.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.InteropSourceId">
+            <summary>
+            This method returns the string whose value contains the unique
+            identifier for the source checkout used to build the interop
+            assembly.  If the SQLite interop assembly is not in use or the
+            necessary information cannot be obtained for any reason, a null
+            value may be returned.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.InteropCompileOptions">
+            <summary>
+            Returns a string containing the compile-time options used to
+            compile the SQLite interop assembly, delimited with spaces.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.ProviderVersion">
+            <summary>
+            This method returns the version of the managed components used
+            to interact with the SQLite core library.  If the necessary
+            information cannot be obtained for any reason, a null value may
+            be returned.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.ProviderSourceId">
+            <summary>
+            This method returns the string whose value contains the unique
+            identifier for the source checkout used to build the managed
+            components currently executing.  If the necessary information
+            cannot be obtained for any reason, a null value may be returned.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.DefaultFlags">
+            <summary>
+            The default connection flags to be used for all opened connections
+            when they are not present in the connection string.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.SharedFlags">
+            <summary>
+            The extra connection flags to be used for all opened connections.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.State">
+            <summary>
+            Returns the state of the connection.
+            </summary>
+        </member>
+        <member name="E:System.Data.SQLite.SQLiteConnection.Progress">
+            <summary>
+            This event is raised periodically during long running queries.  Changing
+            the value of the <see cref="F:System.Data.SQLite.ProgressEventArgs.ReturnCode"/> property will
+            determine if the operation in progress will continue or be interrupted.
+            For the entire duration of the event, the associated connection and
+            statement objects must not be modified, either directly or indirectly, by
+            the called code.
+            </summary>
+        </member>
+        <member name="E:System.Data.SQLite.SQLiteConnection.Authorize">
+            <summary>
+            This event is raised whenever SQLite encounters an action covered by the
+            authorizer during query preparation.  Changing the value of the
+            <see cref="F:System.Data.SQLite.AuthorizerEventArgs.ReturnCode"/> property will determine if
+            the specific action will be allowed, ignored, or denied.  For the entire
+            duration of the event, the associated connection and statement objects
+            must not be modified, either directly or indirectly, by the called code.
+            </summary>
+        </member>
+        <member name="E:System.Data.SQLite.SQLiteConnection.Update">
+            <summary>
+            This event is raised whenever SQLite makes an update/delete/insert into the database on
+            this connection.  It only applies to the given connection.
+            </summary>
+        </member>
+        <member name="E:System.Data.SQLite.SQLiteConnection.Commit">
+            <summary>
+            This event is raised whenever SQLite is committing a transaction.
+            Return non-zero to trigger a rollback.
+            </summary>
+        </member>
+        <member name="E:System.Data.SQLite.SQLiteConnection.Trace">
+            <summary>
+            This event is raised whenever SQLite statement first begins executing on
+            this connection.  It only applies to the given connection.
+            </summary>
+        </member>
+        <member name="E:System.Data.SQLite.SQLiteConnection.RollBack">
+            <summary>
+            This event is raised whenever SQLite is rolling back a transaction.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnection.DbProviderFactory">
+            <summary>
+            Returns the <see cref="T:System.Data.SQLite.SQLiteFactory"/> instance.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SynchronizationModes">
+            <summary>
+            The I/O file cache flushing behavior for the connection
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SynchronizationModes.Normal">
+            <summary>
+            Normal file flushing at critical sections of the code
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SynchronizationModes.Full">
+            <summary>
+            Full file flushing after every write operation
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SynchronizationModes.Off">
+            <summary>
+            Use the default operating system's file flushing, SQLite does not explicitly flush the file buffers after writing
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteProgressEventHandler">
+            <summary>
+            Raised each time the number of virtual machine instructions is
+            approximately equal to the value of the
+            <see cref="P:System.Data.SQLite.SQLiteConnection.ProgressOps"/> property.
+            </summary>
+            <param name="sender">The connection performing the operation.</param>
+            <param name="e">A <see cref="T:System.Data.SQLite.ProgressEventArgs"/> that contains the
+            event data.</param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteAuthorizerEventHandler">
+            <summary>
+            Raised when authorization is required to perform an action contained
+            within a SQL query.
+            </summary>
+            <param name="sender">The connection performing the action.</param>
+            <param name="e">A <see cref="T:System.Data.SQLite.AuthorizerEventArgs"/> that contains the
+            event data.</param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteCommitHandler">
+            <summary>
+            Raised when a transaction is about to be committed.  To roll back a transaction, set the
+            rollbackTrans boolean value to true.
+            </summary>
+            <param name="sender">The connection committing the transaction</param>
+            <param name="e">Event arguments on the transaction</param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteUpdateEventHandler">
+            <summary>
+            Raised when data is inserted, updated and deleted on a given connection
+            </summary>
+            <param name="sender">The connection committing the transaction</param>
+            <param name="e">The event parameters which triggered the event</param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteTraceEventHandler">
+            <summary>
+            Raised when a statement first begins executing on a given connection
+            </summary>
+            <param name="sender">The connection executing the statement</param>
+            <param name="e">Event arguments of the trace</param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteBackupCallback">
+            <summary>
+            Raised between each backup step.
+            </summary>
+            <param name="source">
+            The source database connection.
+            </param>
+            <param name="sourceName">
+            The source database name.
+            </param>
+            <param name="destination">
+            The destination database connection.
+            </param>
+            <param name="destinationName">
+            The destination database name.
+            </param>
+            <param name="pages">
+            The number of pages copied with each step.
+            </param>
+            <param name="remainingPages">
+            The number of pages remaining to be copied.
+            </param>
+            <param name="totalPages">
+            The total number of pages in the source database.
+            </param>
+            <param name="retry">
+            Set to true if the operation needs to be retried due to database
+            locking issues; otherwise, set to false.
+            </param>
+            <returns>
+            True to continue with the backup process or false to halt the backup
+            process, rolling back any changes that have been made so far.
+            </returns>
+        </member>
+        <member name="T:System.Data.SQLite.ProgressEventArgs">
+            <summary>
+            The event data associated with progress reporting events.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.ProgressEventArgs.UserData">
+            <summary>
+            The user-defined native data associated with this event.  Currently,
+            this will always contain the value of <see cref="F:System.IntPtr.Zero"/>.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.ProgressEventArgs.ReturnCode">
+            <summary>
+            The return code for the current call into the progress callback.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.ProgressEventArgs.#ctor">
+            <summary>
+            Constructs an instance of this class with default property values.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.ProgressEventArgs.#ctor(System.IntPtr,System.Data.SQLite.SQLiteProgressReturnCode)">
+            <summary>
+            Constructs an instance of this class with specific property values.
+            </summary>
+            <param name="pUserData">
+            The user-defined native data associated with this event.
+            </param>
+            <param name="returnCode">
+            The progress return code.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.AuthorizerEventArgs">
+            <summary>
+            The data associated with a call into the authorizer.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.AuthorizerEventArgs.UserData">
+            <summary>
+            The user-defined native data associated with this event.  Currently,
+            this will always contain the value of <see cref="F:System.IntPtr.Zero"/>.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.AuthorizerEventArgs.ActionCode">
+            <summary>
+            The action code responsible for the current call into the authorizer.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.AuthorizerEventArgs.Argument1">
+            <summary>
+            The first string argument for the current call into the authorizer.
+            The exact value will vary based on the action code, see the
+            <see cref="T:System.Data.SQLite.SQLiteAuthorizerActionCode"/> enumeration for possible
+            values.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.AuthorizerEventArgs.Argument2">
+            <summary>
+            The second string argument for the current call into the authorizer.
+            The exact value will vary based on the action code, see the
+            <see cref="T:System.Data.SQLite.SQLiteAuthorizerActionCode"/> enumeration for possible
+            values.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.AuthorizerEventArgs.Database">
+            <summary>
+            The database name for the current call into the authorizer, if
+            applicable.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.AuthorizerEventArgs.Context">
+            <summary>
+            The name of the inner-most trigger or view that is responsible for
+            the access attempt or a null value if this access attempt is directly
+            from top-level SQL code.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.AuthorizerEventArgs.ReturnCode">
+            <summary>
+            The return code for the current call into the authorizer.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.AuthorizerEventArgs.#ctor">
+            <summary>
+            Constructs an instance of this class with default property values.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.AuthorizerEventArgs.#ctor(System.IntPtr,System.Data.SQLite.SQLiteAuthorizerActionCode,System.String,System.String,System.String,System.String,System.Data.SQLite.SQLiteAuthorizerReturnCode)">
+            <summary>
+            Constructs an instance of this class with specific property values.
+            </summary>
+            <param name="pUserData">
+            The user-defined native data associated with this event.
+            </param>
+            <param name="actionCode">
+            The authorizer action code.
+            </param>
+            <param name="argument1">
+            The first authorizer argument.
+            </param>
+            <param name="argument2">
+            The second authorizer argument.
+            </param>
+            <param name="database">
+            The database name, if applicable.
+            </param>
+            <param name="context">
+            The name of the inner-most trigger or view that is responsible for
+            the access attempt or a null value if this access attempt is directly
+            from top-level SQL code.
+            </param>
+            <param name="returnCode">
+            The authorizer return code.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.UpdateEventType">
+            <summary>
+            Whenever an update event is triggered on a connection, this enum will indicate
+            exactly what type of operation is being performed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UpdateEventType.Delete">
+            <summary>
+            A row is being deleted from the given database and table
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UpdateEventType.Insert">
+            <summary>
+            A row is being inserted into the table.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UpdateEventType.Update">
+            <summary>
+            A row is being updated in the table.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.UpdateEventArgs">
+            <summary>
+            Passed during an Update callback, these event arguments detail the type of update operation being performed
+            on the given connection.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UpdateEventArgs.Database">
+            <summary>
+            The name of the database being updated (usually "main" but can be any attached or temporary database)
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UpdateEventArgs.Table">
+            <summary>
+            The name of the table being updated
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UpdateEventArgs.Event">
+            <summary>
+            The type of update being performed (insert/update/delete)
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UpdateEventArgs.RowId">
+            <summary>
+            The RowId affected by this update.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.CommitEventArgs">
+            <summary>
+            Event arguments raised when a transaction is being committed
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.CommitEventArgs.AbortTransaction">
+            <summary>
+            Set to true to abort the transaction and trigger a rollback
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.TraceEventArgs">
+            <summary>
+            Passed during an Trace callback, these event arguments contain the UTF-8 rendering of the SQL statement text
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.TraceEventArgs.Statement">
+            <summary>
+            SQL statement text as the statement first begins executing
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.ISQLiteConnectionPool">
+            <summary>
+            This interface represents a custom connection pool implementation
+            usable by System.Data.SQLite.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteConnectionPool.GetCounts(System.String,System.Collections.Generic.Dictionary{System.String,System.Int32}@,System.Int32@,System.Int32@,System.Int32@)">
+            <summary>
+            Counts the number of pool entries matching the specified file name.
+            </summary>
+            <param name="fileName">
+            The file name to match or null to match all files.
+            </param>
+            <param name="counts">
+            The pool entry counts for each matching file.
+            </param>
+            <param name="openCount">
+            The total number of connections successfully opened from any pool.
+            </param>
+            <param name="closeCount">
+            The total number of connections successfully closed from any pool.
+            </param>
+            <param name="totalCount">
+            The total number of pool entries for all matching files.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteConnectionPool.ClearPool(System.String)">
+            <summary>
+            Disposes of all pooled connections associated with the specified
+            database file name.
+            </summary>
+            <param name="fileName">
+            The database file name.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteConnectionPool.ClearAllPools">
+            <summary>
+            Disposes of all pooled connections.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteConnectionPool.Add(System.String,System.Object,System.Int32)">
+            <summary>
+            Adds a connection to the pool of those associated with the
+            specified database file name.
+            </summary>
+            <param name="fileName">
+            The database file name.
+            </param>
+            <param name="handle">
+            The database connection handle.
+            </param>
+            <param name="version">
+            The connection pool version at the point the database connection
+            handle was received from the connection pool.  This is also the
+            connection pool version that the database connection handle was
+            created under.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteConnectionPool.Remove(System.String,System.Int32,System.Int32@)">
+            <summary>
+            Removes a connection from the pool of those associated with the
+            specified database file name with the intent of using it to
+            interact with the database.
+            </summary>
+            <param name="fileName">
+            The database file name.
+            </param>
+            <param name="maxPoolSize">
+            The new maximum size of the connection pool for the specified
+            database file name.
+            </param>
+            <param name="version">
+            The connection pool version associated with the returned database
+            connection handle, if any.
+            </param>
+            <returns>
+            The database connection handle associated with the specified
+            database file name or null if it cannot be obtained.
+            </returns>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteConnectionPool">
+            <summary>
+            This default method implementations in this class should not be used by
+            applications that make use of COM (either directly or indirectly) due
+            to possible deadlocks that can occur during finalization of some COM
+            objects.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionPool._syncRoot">
+            <summary>
+            This field is used to synchronize access to the private static data
+            in this class.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionPool._connectionPool">
+            <summary>
+            When this field is non-null, it will be used to provide the
+            implementation of all the connection pool methods; otherwise,
+            the default method implementations will be used.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionPool._queueList">
+            <summary>
+            The dictionary of connection pools, based on the normalized file
+            name of the SQLite database.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionPool._poolVersion">
+            <summary>
+            The default version number new pools will get.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionPool._poolOpened">
+            <summary>
+            The number of connections successfully opened from any pool.
+            This value is incremented by the Remove method.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionPool._poolClosed">
+            <summary>
+            The number of connections successfully closed from any pool.
+            This value is incremented by the Add method.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionPool.GetCounts(System.String,System.Collections.Generic.Dictionary{System.String,System.Int32}@,System.Int32@,System.Int32@,System.Int32@)">
+            <summary>
+            Counts the number of pool entries matching the specified file name.
+            </summary>
+            <param name="fileName">
+            The file name to match or null to match all files.
+            </param>
+            <param name="counts">
+            The pool entry counts for each matching file.
+            </param>
+            <param name="openCount">
+            The total number of connections successfully opened from any pool.
+            </param>
+            <param name="closeCount">
+            The total number of connections successfully closed from any pool.
+            </param>
+            <param name="totalCount">
+            The total number of pool entries for all matching files.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionPool.ClearPool(System.String)">
+            <summary>
+            Disposes of all pooled connections associated with the specified
+            database file name.
+            </summary>
+            <param name="fileName">
+            The database file name.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionPool.ClearAllPools">
+            <summary>
+            Disposes of all pooled connections.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionPool.Add(System.String,System.Data.SQLite.SQLiteConnectionHandle,System.Int32)">
+            <summary>
+            Adds a connection to the pool of those associated with the
+            specified database file name.
+            </summary>
+            <param name="fileName">
+            The database file name.
+            </param>
+            <param name="handle">
+            The database connection handle.
+            </param>
+            <param name="version">
+            The connection pool version at the point the database connection
+            handle was received from the connection pool.  This is also the
+            connection pool version that the database connection handle was
+            created under.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionPool.Remove(System.String,System.Int32,System.Int32@)">
+            <summary>
+            Removes a connection from the pool of those associated with the
+            specified database file name with the intent of using it to
+            interact with the database.
+            </summary>
+            <param name="fileName">
+            The database file name.
+            </param>
+            <param name="maxPoolSize">
+            The new maximum size of the connection pool for the specified
+            database file name.
+            </param>
+            <param name="version">
+            The connection pool version associated with the returned database
+            connection handle, if any.
+            </param>
+            <returns>
+            The database connection handle associated with the specified
+            database file name or null if it cannot be obtained.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionPool.GetConnectionPool">
+            <summary>
+            This method is used to obtain a reference to the custom connection
+            pool implementation currently in use, if any.
+            </summary>
+            <returns>
+            The custom connection pool implementation or null if the default
+            connection pool implementation should be used.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionPool.SetConnectionPool(System.Data.SQLite.ISQLiteConnectionPool)">
+            <summary>
+            This method is used to set the reference to the custom connection
+            pool implementation to use, if any.
+            </summary>
+            <param name="connectionPool">
+            The custom connection pool implementation to use or null if the
+            default connection pool implementation should be used.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionPool.ResizePool(System.Data.SQLite.SQLiteConnectionPool.PoolQueue,System.Boolean)">
+            <summary>
+            We do not have to thread-lock anything in this function, because it
+            is only called by other functions above which already take the lock.
+            </summary>
+            <param name="queue">
+            The pool queue to resize.
+            </param>
+            <param name="add">
+            If a function intends to add to the pool, this is true, which
+            forces the resize to take one more than it needs from the pool.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteConnectionPool.PoolQueue">
+            <summary>
+            Keeps track of connections made on a specified file.  The PoolVersion
+            dictates whether old objects get returned to the pool or discarded
+            when no longer in use.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionPool.PoolQueue.Queue">
+            <summary>
+            The queue of weak references to the actual database connection
+            handles.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionPool.PoolQueue.PoolVersion">
+            <summary>
+            This pool version associated with the database connection
+            handles in this pool queue.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionPool.PoolQueue.MaxPoolSize">
+            <summary>
+            The maximum size of this pool queue.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionPool.PoolQueue.#ctor(System.Int32,System.Int32)">
+            <summary>
+            Constructs a connection pool queue using the specified version
+            and maximum size.  Normally, all the database connection
+            handles in this pool are associated with a single database file
+            name.
+            </summary>
+            <param name="version">
+            The initial pool version for this connection pool queue.
+            </param>
+            <param name="maxSize">
+            The initial maximum size for this connection pool queue.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteConnectionStringBuilder">
+            <summary>
+            SQLite implementation of DbConnectionStringBuilder.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionStringBuilder._properties">
+            <summary>
+            Properties of this class
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionStringBuilder.#ctor">
+            <overloads>
+            Constructs a new instance of the class
+            </overloads>
+            <summary>
+            Default constructor
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionStringBuilder.#ctor(System.String)">
+            <summary>
+            Constructs a new instance of the class using the specified connection string.
+            </summary>
+            <param name="connectionString">The connection string to parse</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionStringBuilder.Initialize(System.String)">
+            <summary>
+            Private initializer, which assigns the connection string and resets the builder
+            </summary>
+            <param name="cnnString">The connection string to assign</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionStringBuilder.TryGetValue(System.String,System.Object@)">
+            <summary>
+            Helper function for retrieving values from the connectionstring
+            </summary>
+            <param name="keyword">The keyword to retrieve settings for</param>
+            <param name="value">The resulting parameter value</param>
+            <returns>Returns true if the value was found and returned</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionStringBuilder.FallbackGetProperties(System.Collections.Hashtable)">
+            <summary>
+            Fallback method for MONO, which doesn't implement DbConnectionStringBuilder.GetProperties()
+            </summary>
+            <param name="propertyList">The hashtable to fill with property descriptors</param>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.Version">
+            <summary>
+            Gets/Sets the default version of the SQLite engine to instantiate.  Currently the only valid value is 3, indicating version 3 of the sqlite library.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.SyncMode">
+            <summary>
+            Gets/Sets the synchronization mode (file flushing) of the connection string.  Default is "Normal".
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.UseUTF16Encoding">
+            <summary>
+            Gets/Sets the encoding for the connection string.  The default is "False" which indicates UTF-8 encoding.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.Pooling">
+            <summary>
+            Gets/Sets whether or not to use connection pooling.  The default is "False"
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.BinaryGUID">
+            <summary>
+            Gets/Sets whethor not to store GUID's in binary format.  The default is True
+            which saves space in the database.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.DataSource">
+            <summary>
+            Gets/Sets the filename to open on the connection string.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.Uri">
+            <summary>
+            An alternate to the data source property
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.FullUri">
+            <summary>
+            An alternate to the data source property that uses the SQLite URI syntax.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.DefaultTimeout">
+            <summary>
+            Gets/sets the default command timeout for newly-created commands.  This is especially useful for
+            commands used internally such as inside a SQLiteTransaction, where setting the timeout is not possible.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.BusyTimeout">
+            <summary>
+            Gets/sets the busy timeout to use with the SQLite core library.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.WaitTimeout">
+            <summary>
+            <b>EXPERIMENTAL</b> --
+            The wait timeout to use with
+            <see cref="M:System.Data.SQLite.SQLiteConnection.WaitForEnlistmentReset(System.Int32,System.Nullable{System.Boolean})"/> method.
+            This is only used when waiting for the enlistment to be reset
+            prior to enlisting in a transaction, and then only when the
+            appropriate connection flag is set.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.PrepareRetries">
+            <summary>
+            Gets/sets the maximum number of retries when preparing SQL to be executed.
+            This normally only applies to preparation errors resulting from the database
+            schema being changed.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.ProgressOps">
+            <summary>
+            Gets/sets the approximate number of virtual machine instructions between
+            progress events.  In order for progress events to actually fire, the event
+            handler must be added to the <see cref="E:System.Data.SQLite.SQLiteConnection.Progress"/> event
+            as well.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.Enlist">
+            <summary>
+            Determines whether or not the connection will automatically participate
+            in the current distributed transaction (if one exists)
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.FailIfMissing">
+            <summary>
+            If set to true, will throw an exception if the database specified in the connection
+            string does not exist.  If false, the database will be created automatically.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.LegacyFormat">
+            <summary>
+            If enabled, uses the legacy 3.xx format for maximum compatibility, but results in larger
+            database sizes.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.ReadOnly">
+            <summary>
+            When enabled, the database will be opened for read-only access and writing will be disabled.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.Password">
+            <summary>
+            Gets/sets the database encryption password
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.HexPassword">
+            <summary>
+            Gets/sets the database encryption hexadecimal password
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.PageSize">
+            <summary>
+            Gets/Sets the page size for the connection.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.MaxPageCount">
+            <summary>
+            Gets/Sets the maximum number of pages the database may hold
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.CacheSize">
+            <summary>
+            Gets/Sets the cache size for the connection.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.DateTimeFormat">
+            <summary>
+            Gets/Sets the DateTime format for the connection.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.DateTimeKind">
+            <summary>
+            Gets/Sets the DateTime kind for the connection.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.DateTimeFormatString">
+            <summary>
+            Gets/sets the DateTime format string used for formatting
+            and parsing purposes.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.BaseSchemaName">
+            <summary>
+            Gets/Sets the placeholder base schema name used for
+            .NET Framework compatibility purposes.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.JournalMode">
+            <summary>
+            Determines how SQLite handles the transaction journal file.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.DefaultIsolationLevel">
+            <summary>
+            Sets the default isolation level for transactions on the connection.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.DefaultDbType">
+            <summary>
+            Gets/sets the default database type for the connection.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.DefaultTypeName">
+            <summary>
+            Gets/sets the default type name for the connection.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.VfsName">
+            <summary>
+            Gets/sets the VFS name for the connection.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.ForeignKeys">
+            <summary>
+            If enabled, use foreign key constraints
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.RecursiveTriggers">
+            <summary>
+            Enable or disable the recursive trigger capability.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.ZipVfsVersion">
+            <summary>
+            If non-null, this is the version of ZipVFS to use.  This requires the
+            System.Data.SQLite interop assembly -AND- primary managed assembly to
+            be compiled with the INTEROP_INCLUDE_ZIPVFS option; otherwise, this
+            property does nothing.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.Flags">
+            <summary>
+            Gets/Sets the extra behavioral flags.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.SetDefaults">
+            <summary>
+            If enabled, apply the default connection settings to opened databases.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.ToFullPath">
+            <summary>
+            If enabled, attempt to resolve the provided data source file name to a
+            full path before opening.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.NoDefaultFlags">
+            <summary>
+            If enabled, skip using the configured default connection flags.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteConnectionStringBuilder.NoSharedFlags">
+            <summary>
+            If enabled, skip using the configured shared connection flags.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.TypeAffinity">
+            <summary>
+            SQLite has very limited types, and is inherently text-based.  The first 5 types below represent the sum of all types SQLite
+            understands.  The DateTime extension to the spec is for internal use only.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.TypeAffinity.Uninitialized">
+            <summary>
+            Not used
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.TypeAffinity.Int64">
+            <summary>
+            All integers in SQLite default to Int64
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.TypeAffinity.Double">
+            <summary>
+            All floating point numbers in SQLite default to double
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.TypeAffinity.Text">
+            <summary>
+            The default data type of SQLite is text
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.TypeAffinity.Blob">
+            <summary>
+            Typically blob types are only seen when returned from a function
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.TypeAffinity.Null">
+            <summary>
+            Null types can be returned from functions
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.TypeAffinity.DateTime">
+            <summary>
+            Used internally by this provider
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.TypeAffinity.None">
+            <summary>
+            Used internally by this provider
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteConnectionEventType">
+            <summary>
+            These are the event types associated with the
+            <see cref="T:System.Data.SQLite.SQLiteConnectionEventHandler"/>
+            delegate (and its corresponding event) and the
+            <see cref="T:System.Data.SQLite.ConnectionEventArgs"/> class.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionEventType.Invalid">
+            <summary>
+            Not used.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionEventType.Unknown">
+            <summary>
+            Not used.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionEventType.Opening">
+            <summary>
+            The connection is being opened.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionEventType.ConnectionString">
+            <summary>
+            The connection string has been parsed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionEventType.Opened">
+            <summary>
+            The connection was opened.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionEventType.ChangeDatabase">
+            <summary>
+            The <see cref="F:System.Data.SQLite.SQLiteConnectionEventType.ChangeDatabase"/> method was called on the
+            connection.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionEventType.NewTransaction">
+            <summary>
+            A transaction was created using the connection.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionEventType.EnlistTransaction">
+            <summary>
+            The connection was enlisted into a transaction.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionEventType.NewCommand">
+            <summary>
+            A command was created using the connection.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionEventType.NewDataReader">
+            <summary>
+            A data reader was created using the connection.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionEventType.NewCriticalHandle">
+            <summary>
+            An instance of a <see cref="T:System.Runtime.InteropServices.CriticalHandle"/> derived class has
+            been created to wrap a native resource.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionEventType.Closing">
+            <summary>
+            The connection is being closed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionEventType.Closed">
+            <summary>
+            The connection was closed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionEventType.DisposingCommand">
+            <summary>
+            A command is being disposed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionEventType.DisposingDataReader">
+            <summary>
+            A data reader is being disposed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionEventType.ClosingDataReader">
+            <summary>
+            A data reader is being closed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionEventType.OpenedFromPool">
+            <summary>
+            A native resource was opened (i.e. obtained) from the pool.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionEventType.ClosedToPool">
+            <summary>
+            A native resource was closed (i.e. released) to the pool.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteDateFormats">
+             <summary>
+             This implementation of SQLite for ADO.NET can process date/time fields in
+             databases in one of six formats.
+             </summary>
+             <remarks>
+             ISO8601 format is more compatible, readable, fully-processable, but less
+             accurate as it does not provide time down to fractions of a second.
+             JulianDay is the numeric format the SQLite uses internally and is arguably
+             the most compatible with 3rd party tools.  It is not readable as text
+             without post-processing.  Ticks less compatible with 3rd party tools that
+             query the database, and renders the DateTime field unreadable as text
+             without post-processing.  UnixEpoch is more compatible with Unix systems.
+             InvariantCulture allows the configured format for the invariant culture
+             format to be used and is human readable.  CurrentCulture allows the
+             configured format for the current culture to be used and is also human
+             readable.
+            
+             The preferred order of choosing a DateTime format is JulianDay, ISO8601,
+             and then Ticks.  Ticks is mainly present for legacy code support.
+             </remarks>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDateFormats.Ticks">
+            <summary>
+            Use the value of DateTime.Ticks.  This value is not recommended and is not well supported with LINQ.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDateFormats.ISO8601">
+            <summary>
+            Use the ISO-8601 format.  Uses the "yyyy-MM-dd HH:mm:ss.FFFFFFFK" format for UTC DateTime values and
+            "yyyy-MM-dd HH:mm:ss.FFFFFFF" format for local DateTime values).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDateFormats.JulianDay">
+            <summary>
+            The interval of time in days and fractions of a day since January 1, 4713 BC.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDateFormats.UnixEpoch">
+            <summary>
+            The whole number of seconds since the Unix epoch (January 1, 1970).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDateFormats.InvariantCulture">
+            <summary>
+            Any culture-independent string value that the .NET Framework can interpret as a valid DateTime.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDateFormats.CurrentCulture">
+            <summary>
+            Any string value that the .NET Framework can interpret as a valid DateTime using the current culture.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDateFormats.Default">
+            <summary>
+            The default format for this provider.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteJournalModeEnum">
+             <summary>
+             This enum determines how SQLite treats its journal file.
+             </summary>
+             <remarks>
+             By default SQLite will create and delete the journal file when needed during a transaction.
+             However, for some computers running certain filesystem monitoring tools, the rapid
+             creation and deletion of the journal file can cause those programs to fail, or to interfere with SQLite.
+            
+             If a program or virus scanner is interfering with SQLite's journal file, you may receive errors like "unable to open database file"
+             when starting a transaction.  If this is happening, you may want to change the default journal mode to Persist.
+             </remarks>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteJournalModeEnum.Default">
+            <summary>
+            The default mode, this causes SQLite to use the existing journaling mode for the database.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteJournalModeEnum.Delete">
+            <summary>
+            SQLite will create and destroy the journal file as-needed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteJournalModeEnum.Persist">
+            <summary>
+            When this is set, SQLite will keep the journal file even after a transaction has completed.  It's contents will be erased,
+            and the journal re-used as often as needed.  If it is deleted, it will be recreated the next time it is needed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteJournalModeEnum.Off">
+            <summary>
+            This option disables the rollback journal entirely.  Interrupted transactions or a program crash can cause database
+            corruption in this mode!
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteJournalModeEnum.Truncate">
+            <summary>
+            SQLite will truncate the journal file to zero-length instead of deleting it.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteJournalModeEnum.Memory">
+            <summary>
+            SQLite will store the journal in volatile RAM.  This saves disk I/O but at the expense of database safety and integrity.
+            If the application using SQLite crashes in the middle of a transaction when the MEMORY journaling mode is set, then the
+            database file will very likely go corrupt.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteJournalModeEnum.Wal">
+            <summary>
+            SQLite uses a write-ahead log instead of a rollback journal to implement transactions.  The WAL journaling mode is persistent;
+            after being set it stays in effect across multiple database connections and after closing and reopening the database. A database
+            in WAL journaling mode can only be accessed by SQLite version 3.7.0 or later.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteSynchronousEnum">
+            <summary>
+            Possible values for the "synchronous" database setting.  This setting determines
+            how often the database engine calls the xSync method of the VFS.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteSynchronousEnum.Default">
+            <summary>
+            Use the default "synchronous" database setting.  Currently, this should be
+            the same as using the FULL mode.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteSynchronousEnum.Off">
+            <summary>
+            The database engine continues without syncing as soon as it has handed
+            data off to the operating system.  If the application running SQLite
+            crashes, the data will be safe, but the database might become corrupted
+            if the operating system crashes or the computer loses power before that
+            data has been written to the disk surface.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteSynchronousEnum.Normal">
+            <summary>
+            The database engine will still sync at the most critical moments, but
+            less often than in FULL mode.  There is a very small (though non-zero)
+            chance that a power failure at just the wrong time could corrupt the
+            database in NORMAL mode.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteSynchronousEnum.Full">
+            <summary>
+            The database engine will use the xSync method of the VFS to ensure that
+            all content is safely written to the disk surface prior to continuing.
+            This ensures that an operating system crash or power failure will not
+            corrupt the database.  FULL synchronous is very safe, but it is also
+            slower.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteExecuteType">
+            <summary>
+            The requested command execution type.  This controls which method of the
+            <see cref="T:System.Data.SQLite.SQLiteCommand"/> object will be called.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteExecuteType.None">
+            <summary>
+            Do nothing.  No method will be called.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteExecuteType.NonQuery">
+            <summary>
+            The command is not expected to return a result -OR- the result is not
+            needed.  The <see cref="M:System.Data.SQLite.SQLiteCommand.ExecuteNonQuery"/> or
+            <see cref="M:System.Data.SQLite.SQLiteCommand.ExecuteNonQuery(System.Data.CommandBehavior)"/>  method
+            will be called.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteExecuteType.Scalar">
+            <summary>
+            The command is expected to return a scalar result -OR- the result should
+            be limited to a scalar result.  The <see cref="M:System.Data.SQLite.SQLiteCommand.ExecuteScalar"/>
+            or <see cref="M:System.Data.SQLite.SQLiteCommand.ExecuteScalar(System.Data.CommandBehavior)"/> method will
+            be called.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteExecuteType.Reader">
+            <summary>
+            The command is expected to return <see cref="T:System.Data.SQLite.SQLiteDataReader"/> result.
+            The <see cref="M:System.Data.SQLite.SQLiteCommand.ExecuteReader"/> or
+            <see cref="M:System.Data.SQLite.SQLiteCommand.ExecuteReader(System.Data.CommandBehavior)"/> method will
+            be called.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteExecuteType.Default">
+            <summary>
+            Use the default command execution type.  Using this value is the same
+            as using the <see cref="F:System.Data.SQLite.SQLiteExecuteType.NonQuery"/> value.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteAuthorizerActionCode">
+            <summary>
+            The action code responsible for the current call into the authorizer.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.None">
+            <summary>
+            No action is being performed.  This value should not be used from
+            external code.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Copy">
+            <summary>
+            No longer used.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.CreateIndex">
+             <summary>
+             An index will be created.  The action-specific arguments are the
+             index name and the table name.
+            
+             </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.CreateTable">
+            <summary>
+            A table will be created.  The action-specific arguments are the
+            table name and a null value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.CreateTempIndex">
+            <summary>
+            A temporary index will be created.  The action-specific arguments
+            are the index name and the table name.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.CreateTempTable">
+            <summary>
+            A temporary table will be created.  The action-specific arguments
+            are the table name and a null value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.CreateTempTrigger">
+            <summary>
+            A temporary trigger will be created.  The action-specific arguments
+            are the trigger name and the table name.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.CreateTempView">
+            <summary>
+            A temporary view will be created.  The action-specific arguments are
+            the view name and a null value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.CreateTrigger">
+            <summary>
+            A trigger will be created.  The action-specific arguments are the
+            trigger name and the table name.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.CreateView">
+            <summary>
+            A view will be created.  The action-specific arguments are the view
+            name and a null value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Delete">
+            <summary>
+            A DELETE statement will be executed.  The action-specific arguments
+            are the table name and a null value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.DropIndex">
+            <summary>
+            An index will be dropped.  The action-specific arguments are the
+            index name and the table name.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.DropTable">
+            <summary>
+            A table will be dropped.  The action-specific arguments are the tables
+            name and a null value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.DropTempIndex">
+            <summary>
+            A temporary index will be dropped.  The action-specific arguments are
+            the index name and the table name.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.DropTempTable">
+            <summary>
+            A temporary table will be dropped.  The action-specific arguments are
+            the table name and a null value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.DropTempTrigger">
+            <summary>
+            A temporary trigger will be dropped.  The action-specific arguments
+            are the trigger name and the table name.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.DropTempView">
+            <summary>
+            A temporary view will be dropped.  The action-specific arguments are
+            the view name and a null value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.DropTrigger">
+            <summary>
+            A trigger will be dropped.  The action-specific arguments are the
+            trigger name and the table name.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.DropView">
+            <summary>
+            A view will be dropped.  The action-specific arguments are the view
+            name and a null value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Insert">
+            <summary>
+            An INSERT statement will be executed.  The action-specific arguments
+            are the table name and a null value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Pragma">
+            <summary>
+            A PRAGMA statement will be executed.  The action-specific arguments
+            are the name of the PRAGMA and the new value or a null value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Read">
+            <summary>
+            A table column will be read.  The action-specific arguments are the
+            table name and the column name.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Select">
+            <summary>
+            A SELECT statement will be executed.  The action-specific arguments
+            are both null values.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Transaction">
+            <summary>
+            A transaction will be started, committed, or rolled back.  The
+            action-specific arguments are the name of the operation (BEGIN,
+            COMMIT, or ROLLBACK) and a null value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Update">
+            <summary>
+            An UPDATE statement will be executed.  The action-specific arguments
+            are the table name and the column name.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Attach">
+            <summary>
+            A database will be attached to the connection.  The action-specific
+            arguments are the database file name and a null value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Detach">
+            <summary>
+            A database will be detached from the connection.  The action-specific
+            arguments are the database name and a null value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.AlterTable">
+            <summary>
+            The schema of a table will be altered.  The action-specific arguments
+            are the database name and the table name.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Reindex">
+            <summary>
+            An index will be deleted and then recreated.  The action-specific
+            arguments are the index name and a null value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Analyze">
+            <summary>
+            A table will be analyzed to gathers statistics about it.  The
+            action-specific arguments are the table name and a null value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.CreateVtable">
+            <summary>
+            A virtual table will be created.  The action-specific arguments are
+            the table name and the module name.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.DropVtable">
+            <summary>
+            A virtual table will be dropped.  The action-specific arguments are
+            the table name and the module name.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Function">
+            <summary>
+            A SQL function will be called.  The action-specific arguments are a
+            null value and the function name.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Savepoint">
+            <summary>
+            A savepoint will be created, released, or rolled back.  The
+            action-specific arguments are the name of the operation (BEGIN,
+            RELEASE, or ROLLBACK) and the savepoint name.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Recursive">
+            <summary>
+            A recursive query will be executed.  The action-specific arguments
+            are two null values.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteProgressReturnCode">
+            <summary>
+            The possible return codes for the progress callback.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteProgressReturnCode.Continue">
+            <summary>
+            The operation should continue.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteProgressReturnCode.Interrupt">
+            <summary>
+            The operation should be interrupted.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteAuthorizerReturnCode">
+            <summary>
+            The return code for the current call into the authorizer.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerReturnCode.Ok">
+            <summary>
+            The action will be allowed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerReturnCode.Deny">
+            <summary>
+            The overall action will be disallowed and an error message will be
+            returned from the query preparation method.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteAuthorizerReturnCode.Ignore">
+            <summary>
+            The specific action will be disallowed; however, the overall action
+            will continue.  The exact effects of this return code vary depending
+            on the specific action, please refer to the SQLite core library
+            documentation for futher details.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteType">
+            <summary>
+            Class used internally to determine the datatype of a column in a resultset
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteType.Type">
+            <summary>
+            The DbType of the column, or DbType.Object if it cannot be determined
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteType.Affinity">
+            <summary>
+            The affinity of a column, used for expressions or when Type is DbType.Object
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteType.#ctor">
+            <summary>
+            Constructs a default instance of this type.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteType.#ctor(System.Data.SQLite.TypeAffinity,System.Data.DbType)">
+            <summary>
+            Constructs an instance of this type with the specified field values.
+            </summary>
+            <param name="affinity">
+            The type affinity to use for the new instance.
+            </param>
+            <param name="type">
+            The database type to use for the new instance.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteDataAdapter">
+            <summary>
+            SQLite implementation of DbDataAdapter.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataAdapter.#ctor">
+            <overloads>
+            This class is just a shell around the DbDataAdapter.  Nothing from
+            DbDataAdapter is overridden here, just a few constructors are defined.
+            </overloads>
+            <summary>
+            Default constructor.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataAdapter.#ctor(System.Data.SQLite.SQLiteCommand)">
+            <summary>
+            Constructs a data adapter using the specified select command.
+            </summary>
+            <param name="cmd">
+            The select command to associate with the adapter.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataAdapter.#ctor(System.String,System.Data.SQLite.SQLiteConnection)">
+            <summary>
+            Constructs a data adapter with the supplied select command text and
+            associated with the specified connection.
+            </summary>
+            <param name="commandText">
+            The select command text to associate with the data adapter.
+            </param>
+            <param name="connection">
+            The connection to associate with the select command.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataAdapter.#ctor(System.String,System.String)">
+            <summary>
+            Constructs a data adapter with the specified select command text,
+            and using the specified database connection string.
+            </summary>
+            <param name="commandText">
+            The select command text to use to construct a select command.
+            </param>
+            <param name="connectionString">
+            A connection string suitable for passing to a new SQLiteConnection,
+            which is associated with the select command.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataAdapter.#ctor(System.String,System.String,System.Boolean)">
+            <summary>
+            Constructs a data adapter with the specified select command text,
+            and using the specified database connection string.
+            </summary>
+            <param name="commandText">
+            The select command text to use to construct a select command.
+            </param>
+            <param name="connectionString">
+            A connection string suitable for passing to a new SQLiteConnection,
+            which is associated with the select command.
+            </param>
+            <param name="parseViaFramework">
+            Non-zero to parse the connection string using the built-in (i.e.
+            framework provided) parser when opening the connection.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataAdapter.Dispose(System.Boolean)">
+            <summary>
+            Cleans up resources (native and managed) associated with the current instance.
+            </summary>
+            <param name="disposing">
+            Zero when being disposed via garbage collection; otherwise, non-zero.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataAdapter.OnRowUpdating(System.Data.Common.RowUpdatingEventArgs)">
+            <summary>
+            Raised by the underlying DbDataAdapter when a row is being updated
+            </summary>
+            <param name="value">The event's specifics</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataAdapter.OnRowUpdated(System.Data.Common.RowUpdatedEventArgs)">
+            <summary>
+            Raised by DbDataAdapter after a row is updated
+            </summary>
+            <param name="value">The event's specifics</param>
+        </member>
+        <member name="E:System.Data.SQLite.SQLiteDataAdapter.RowUpdating">
+            <summary>
+            Row updating event handler
+            </summary>
+        </member>
+        <member name="E:System.Data.SQLite.SQLiteDataAdapter.RowUpdated">
+            <summary>
+            Row updated event handler
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteDataAdapter.SelectCommand">
+            <summary>
+            Gets/sets the select command for this DataAdapter
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteDataAdapter.InsertCommand">
+            <summary>
+            Gets/sets the insert command for this DataAdapter
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteDataAdapter.UpdateCommand">
+            <summary>
+            Gets/sets the update command for this DataAdapter
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteDataAdapter.DeleteCommand">
+            <summary>
+            Gets/sets the delete command for this DataAdapter
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteDataReader">
+            <summary>
+            SQLite implementation of DbDataReader.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReader._command">
+            <summary>
+            Underlying command this reader is attached to
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReader._flags">
+            <summary>
+            The flags pertaining to the associated connection (via the command).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReader._activeStatementIndex">
+            <summary>
+            Index of the current statement in the command being processed
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReader._activeStatement">
+            <summary>
+            Current statement being Read()
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReader._readingState">
+            <summary>
+            State of the current statement being processed.
+            -1 = First Step() executed, so the first Read() will be ignored
+             0 = Actively reading
+             1 = Finished reading
+             2 = Non-row-returning statement, no records
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReader._rowsAffected">
+            <summary>
+            Number of records affected by the insert/update statements executed on the command
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReader._fieldCount">
+            <summary>
+            Count of fields (columns) in the row-returning statement currently being processed
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReader._stepCount">
+            <summary>
+            The number of calls to Step() that have returned true (i.e. the number of rows that
+            have been read in the current result set).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReader._fieldIndexes">
+            <summary>
+            Maps the field (column) names to their corresponding indexes within the results.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReader._fieldTypeArray">
+            <summary>
+            Datatypes of active fields (columns) in the current statement, used for type-restricting data
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReader._commandBehavior">
+            <summary>
+            The behavior of the datareader
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReader._disposeCommand">
+            <summary>
+            If set, then dispose of the command object when the reader is finished
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReader._throwOnDisposed">
+            <summary>
+            If set, then raise an exception when the object is accessed after being disposed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReader._keyInfo">
+            <summary>
+            An array of rowid's for the active statement if CommandBehavior.KeyInfo is specified
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReader._version">
+            <summary>
+            Matches the version of the connection.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDataReader._baseSchemaName">
+            <summary>
+            The "stub" (i.e. placeholder) base schema name to use when returning
+            column schema information.  Matches the base schema name used by the
+            associated connection.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.#ctor(System.Data.SQLite.SQLiteCommand,System.Data.CommandBehavior)">
+            <summary>
+            Internal constructor, initializes the datareader and sets up to begin executing statements
+            </summary>
+            <param name="cmd">The SQLiteCommand this data reader is for</param>
+            <param name="behave">The expected behavior of the data reader</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.Dispose(System.Boolean)">
+            <summary>
+            Dispose of all resources used by this datareader.
+            </summary>
+            <param name="disposing"></param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.Close">
+            <summary>
+            Closes the datareader, potentially closing the connection as well if CommandBehavior.CloseConnection was specified.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.CheckClosed">
+            <summary>
+            Throw an error if the datareader is closed
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.CheckValidRow">
+            <summary>
+            Throw an error if a row is not loaded
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetEnumerator">
+            <summary>
+            Enumerator support
+            </summary>
+            <returns>Returns a DbEnumerator object.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.RefreshFlags">
+            <summary>
+            Forces the connection flags cached by this data reader to be refreshed
+            from the underlying connection.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.VerifyForGet">
+            <summary>
+            This method is used to make sure the result set is open and a row is currently available.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.VerifyType(System.Int32,System.Data.DbType)">
+             <summary>
+             SQLite is inherently un-typed.  All datatypes in SQLite are natively strings.  The definition of the columns of a table
+             and the affinity of returned types are all we have to go on to type-restrict data in the reader.
+            
+             This function attempts to verify that the type of data being requested of a column matches the datatype of the column.  In
+             the case of columns that are not backed into a table definition, we attempt to match up the affinity of a column (int, double, string or blob)
+             to a set of known types that closely match that affinity.  It's not an exact science, but its the best we can do.
+             </summary>
+             <returns>
+             This function throws an InvalidTypeCast() exception if the requested type doesn't match the column's definition or affinity.
+             </returns>
+             <param name="i">The index of the column to type-check</param>
+             <param name="typ">The type we want to get out of the column</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.InvokeReadValueCallback(System.Int32,System.Data.SQLite.SQLiteReadEventArgs,System.Boolean@)">
+            <summary>
+            Invokes the data reader value callback configured for the database
+            type name associated with the specified column.  If no data reader
+            value callback is available for the database type name, do nothing.
+            </summary>
+            <param name="index">
+            The index of the column being read.
+            </param>
+            <param name="eventArgs">
+            The extra event data to pass into the callback.
+            </param>
+            <param name="complete">
+            Non-zero if the default handling for the data reader call should be
+            skipped.  If this is set to non-zero and the necessary return value
+            is unavailable or unsuitable, an exception will be thrown.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetRowId(System.Int32)">
+            <summary>
+            Attempts to query the integer identifier for the current row.  This
+            will not work for tables that were created WITHOUT ROWID -OR- if the
+            query does not include the "rowid" column or one of its aliases -OR-
+            if the <see cref="T:System.Data.SQLite.SQLiteDataReader"/> was not created with the
+            <see cref="F:System.Data.CommandBehavior.KeyInfo"/> flag.
+            </summary>
+            <param name="i">
+            The index of the BLOB column.
+            </param>
+            <returns>
+            The integer identifier for the current row -OR- null if it could not
+            be determined.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetBlob(System.Int32,System.Boolean)">
+            <summary>
+            Retrieves the column as a <see cref="T:System.Data.SQLite.SQLiteBlob"/> object.
+            This will not work for tables that were created WITHOUT ROWID
+            -OR- if the query does not include the "rowid" column or one
+            of its aliases -OR- if the <see cref="T:System.Data.SQLite.SQLiteDataReader"/> was
+            not created with the <see cref="F:System.Data.CommandBehavior.KeyInfo"/>
+            flag.
+            </summary>
+            <param name="i">The index of the column.</param>
+            <param name="readOnly">
+            Non-zero to open the blob object for read-only access.
+            </param>
+            <returns>A new <see cref="T:System.Data.SQLite.SQLiteBlob"/> object.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetBoolean(System.Int32)">
+            <summary>
+            Retrieves the column as a boolean value
+            </summary>
+            <param name="i">The index of the column.</param>
+            <returns>bool</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetByte(System.Int32)">
+            <summary>
+            Retrieves the column as a single byte value
+            </summary>
+            <param name="i">The index of the column.</param>
+            <returns>byte</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetBytes(System.Int32,System.Int64,System.Byte[],System.Int32,System.Int32)">
+            <summary>
+            Retrieves a column as an array of bytes (blob)
+            </summary>
+            <param name="i">The index of the column.</param>
+            <param name="fieldOffset">The zero-based index of where to begin reading the data</param>
+            <param name="buffer">The buffer to write the bytes into</param>
+            <param name="bufferoffset">The zero-based index of where to begin writing into the array</param>
+            <param name="length">The number of bytes to retrieve</param>
+            <returns>The actual number of bytes written into the array</returns>
+            <remarks>
+            To determine the number of bytes in the column, pass a null value for the buffer.  The total length will be returned.
+            </remarks>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetChar(System.Int32)">
+            <summary>
+            Returns the column as a single character
+            </summary>
+            <param name="i">The index of the column.</param>
+            <returns>char</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetChars(System.Int32,System.Int64,System.Char[],System.Int32,System.Int32)">
+            <summary>
+            Retrieves a column as an array of chars (blob)
+            </summary>
+            <param name="i">The index of the column.</param>
+            <param name="fieldoffset">The zero-based index of where to begin reading the data</param>
+            <param name="buffer">The buffer to write the characters into</param>
+            <param name="bufferoffset">The zero-based index of where to begin writing into the array</param>
+            <param name="length">The number of bytes to retrieve</param>
+            <returns>The actual number of characters written into the array</returns>
+            <remarks>
+            To determine the number of characters in the column, pass a null value for the buffer.  The total length will be returned.
+            </remarks>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetDataTypeName(System.Int32)">
+            <summary>
+            Retrieves the name of the back-end datatype of the column
+            </summary>
+            <param name="i">The index of the column.</param>
+            <returns>string</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetDateTime(System.Int32)">
+            <summary>
+            Retrieve the column as a date/time value
+            </summary>
+            <param name="i">The index of the column.</param>
+            <returns>DateTime</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetDecimal(System.Int32)">
+            <summary>
+            Retrieve the column as a decimal value
+            </summary>
+            <param name="i">The index of the column.</param>
+            <returns>decimal</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetDouble(System.Int32)">
+            <summary>
+            Returns the column as a double
+            </summary>
+            <param name="i">The index of the column.</param>
+            <returns>double</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetFieldAffinity(System.Int32)">
+            <summary>
+            Determines and returns the <see cref="T:System.Data.SQLite.TypeAffinity"/> of the
+            specified column.
+            </summary>
+            <param name="i">
+            The index of the column.
+            </param>
+            <returns>
+            The <see cref="T:System.Data.SQLite.TypeAffinity"/> associated with the specified
+            column, if any.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetFieldType(System.Int32)">
+            <summary>
+            Returns the .NET type of a given column
+            </summary>
+            <param name="i">The index of the column.</param>
+            <returns>Type</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetFloat(System.Int32)">
+            <summary>
+            Returns a column as a float value
+            </summary>
+            <param name="i">The index of the column.</param>
+            <returns>float</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetGuid(System.Int32)">
+            <summary>
+            Returns the column as a Guid
+            </summary>
+            <param name="i">The index of the column.</param>
+            <returns>Guid</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetInt16(System.Int32)">
+            <summary>
+            Returns the column as a short
+            </summary>
+            <param name="i">The index of the column.</param>
+            <returns>Int16</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetInt32(System.Int32)">
+            <summary>
+            Retrieves the column as an int
+            </summary>
+            <param name="i">The index of the column.</param>
+            <returns>Int32</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetInt64(System.Int32)">
+            <summary>
+            Retrieves the column as a long
+            </summary>
+            <param name="i">The index of the column.</param>
+            <returns>Int64</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetName(System.Int32)">
+            <summary>
+            Retrieves the name of the column
+            </summary>
+            <param name="i">The index of the column.</param>
+            <returns>string</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetDatabaseName(System.Int32)">
+            <summary>
+            Returns the name of the database associated with the specified column.
+            </summary>
+            <param name="i">The index of the column.</param>
+            <returns>string</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetTableName(System.Int32)">
+            <summary>
+            Returns the name of the table associated with the specified column.
+            </summary>
+            <param name="i">The index of the column.</param>
+            <returns>string</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetOriginalName(System.Int32)">
+            <summary>
+            Returns the original name of the specified column.
+            </summary>
+            <param name="i">The index of the column.</param>
+            <returns>string</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetOrdinal(System.String)">
+            <summary>
+            Retrieves the i of a column, given its name
+            </summary>
+            <param name="name">The name of the column to retrieve</param>
+            <returns>The int i of the column</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetSchemaTable">
+            <summary>
+            Schema information in SQLite is difficult to map into .NET conventions, so a lot of work must be done
+            to gather the necessary information so it can be represented in an ADO.NET manner.
+            </summary>
+            <returns>Returns a DataTable containing the schema information for the active SELECT statement being processed.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetString(System.Int32)">
+            <summary>
+            Retrieves the column as a string
+            </summary>
+            <param name="i">The index of the column.</param>
+            <returns>string</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetValue(System.Int32)">
+            <summary>
+            Retrieves the column as an object corresponding to the underlying datatype of the column
+            </summary>
+            <param name="i">The index of the column.</param>
+            <returns>object</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetValues(System.Object[])">
+            <summary>
+            Retreives the values of multiple columns, up to the size of the supplied array
+            </summary>
+            <param name="values">The array to fill with values from the columns in the current resultset</param>
+            <returns>The number of columns retrieved</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetValues">
+            <summary>
+            Returns a collection containing all the column names and values for the
+            current row of data in the current resultset, if any.  If there is no
+            current row or no current resultset, an exception may be thrown.
+            </summary>
+            <returns>
+            The collection containing the column name and value information for the
+            current row of data in the current resultset or null if this information
+            cannot be obtained.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.IsDBNull(System.Int32)">
+            <summary>
+            Returns True if the specified column is null
+            </summary>
+            <param name="i">The index of the column.</param>
+            <returns>True or False</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.NextResult">
+            <summary>
+            Moves to the next resultset in multiple row-returning SQL command.
+            </summary>
+            <returns>True if the command was successful and a new resultset is available, False otherwise.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetConnection(System.Data.SQLite.SQLiteDataReader)">
+            <summary>
+            This method attempts to query the database connection associated with
+            the data reader in use.  If the underlying command or connection is
+            unavailable, a null value will be returned.
+            </summary>
+            <returns>
+            The connection object -OR- null if it is unavailable.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetSQLiteType(System.Data.SQLite.SQLiteType,System.String)">
+            <summary>
+            Retrieves the SQLiteType for a given column and row value.
+            </summary>
+            <param name="oldType">
+            The original SQLiteType structure, based only on the column.
+            </param>
+            <param name="text">
+            The textual value of the column for a given row.
+            </param>
+            <returns>
+            The SQLiteType structure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.GetSQLiteType(System.Data.SQLite.SQLiteConnectionFlags,System.Int32)">
+            <summary>
+            Retrieves the SQLiteType for a given column, and caches it to avoid repetetive interop calls.
+            </summary>
+            <param name="flags">The flags associated with the parent connection object.</param>
+            <param name="i">The index of the column.</param>
+            <returns>A SQLiteType structure</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDataReader.Read">
+            <summary>
+            Reads the next row from the resultset
+            </summary>
+            <returns>True if a new row was successfully loaded and is ready for processing</returns>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteDataReader.Depth">
+            <summary>
+            Not implemented.  Returns 0
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteDataReader.FieldCount">
+            <summary>
+            Returns the number of columns in the current resultset
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteDataReader.StepCount">
+            <summary>
+            Returns the number of rows seen so far in the current result set.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteDataReader.VisibleFieldCount">
+            <summary>
+            Returns the number of visible fields in the current resultset
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteDataReader.HasRows">
+            <summary>
+            Returns True if the resultset has rows that can be fetched
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteDataReader.IsClosed">
+            <summary>
+            Returns True if the data reader is closed
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteDataReader.RecordsAffected">
+            <summary>
+            Returns the number of rows affected by the statement being executed.
+            The value returned may not be accurate for DDL statements.  Also, it
+            will be -1 for any statement that does not modify the database (e.g.
+            SELECT).  If an otherwise read-only statement modifies the database
+            indirectly (e.g. via a virtual table or user-defined function), the
+            value returned is undefined.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteDataReader.Item(System.String)">
+            <summary>
+            Indexer to retrieve data from a column given its name
+            </summary>
+            <param name="name">The name of the column to retrieve data for</param>
+            <returns>The value contained in the column</returns>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteDataReader.Item(System.Int32)">
+            <summary>
+            Indexer to retrieve data from a column given its i
+            </summary>
+            <param name="i">The index of the column.</param>
+            <returns>The value contained in the column</returns>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteException">
+            <summary>
+            SQLite exception class.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteException.FACILITY_SQLITE">
+            <summary>
+            This value was copied from the "WinError.h" file included with the
+            Platform SDK for Windows 10.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
+            <summary>
+            Private constructor for use with serialization.
+            </summary>
+            <param name="info">
+            Holds the serialized object data about the exception being thrown.
+            </param>
+            <param name="context">
+            Contains contextual information about the source or destination.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteException.#ctor(System.Data.SQLite.SQLiteErrorCode,System.String)">
+            <summary>
+            Public constructor for generating a SQLite exception given the error
+            code and message.
+            </summary>
+            <param name="errorCode">
+            The SQLite return code to report.
+            </param>
+            <param name="message">
+            Message text to go along with the return code message text.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteException.#ctor(System.String)">
+            <summary>
+            Public constructor that uses the base class constructor for the error
+            message.
+            </summary>
+            <param name="message">Error message text.</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteException.#ctor">
+            <summary>
+            Public constructor that uses the default base class constructor.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteException.#ctor(System.String,System.Exception)">
+            <summary>
+            Public constructor that uses the base class constructor for the error
+            message and inner exception.
+            </summary>
+            <param name="message">Error message text.</param>
+            <param name="innerException">The original (inner) exception.</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
+            <summary>
+            Adds extra information to the serialized object data specific to this
+            class type.  This is only used for serialization.
+            </summary>
+            <param name="info">
+            Holds the serialized object data about the exception being thrown.
+            </param>
+            <param name="context">
+            Contains contextual information about the source or destination.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteException.Initialize">
+            <summary>
+            This method performs extra initialization tasks.  It may be called by
+            any of the constructors of this class.  It must not throw exceptions.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteException.MakeHResult(System.Int32,System.Boolean)">
+            <summary>
+            Maps a Win32 error code to an HRESULT.
+            </summary>
+            <param name="errorCode">
+            The specified Win32 error code.  It must be within the range of zero
+            (0) to 0xFFFF (65535).
+            </param>
+            <param name="success">
+            Non-zero if the HRESULT should indicate success; otherwise, zero.
+            </param>
+            <returns>
+            The integer value of the HRESULT.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteException.GetHResultForErrorCode(System.Data.SQLite.SQLiteErrorCode)">
+            <summary>
+            Attempts to map the specified <see cref="T:System.Data.SQLite.SQLiteErrorCode"/> onto an
+            existing HRESULT -OR- a Win32 error code wrapped in an HRESULT.  The
+            mappings may not have perfectly matching semantics; however, they do
+            have the benefit of being unique within the context of this exception
+            type.
+            </summary>
+            <param name="errorCode">
+            The <see cref="T:System.Data.SQLite.SQLiteErrorCode"/> to map.
+            </param>
+            <returns>
+            The integer HRESULT value -OR- null if there is no known mapping.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteException.GetErrorString(System.Data.SQLite.SQLiteErrorCode)">
+            <summary>
+            Returns the error message for the specified SQLite return code.
+            </summary>
+            <param name="errorCode">The SQLite return code.</param>
+            <returns>The error message or null if it cannot be found.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteException.GetStockErrorMessage(System.Data.SQLite.SQLiteErrorCode,System.String)">
+            <summary>
+            Returns the composite error message based on the SQLite return code
+            and the optional detailed error message.
+            </summary>
+            <param name="errorCode">The SQLite return code.</param>
+            <param name="message">Optional detailed error message.</param>
+            <returns>Error message text for the return code.</returns>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteException.ResultCode">
+            <summary>
+            Gets the associated SQLite result code for this exception as a
+            <see cref="T:System.Data.SQLite.SQLiteErrorCode"/>.  This property returns the same
+            underlying value as the <see cref="P:System.Data.SQLite.SQLiteException.ErrorCode"/> property.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteException.ErrorCode">
+            <summary>
+            Gets the associated SQLite return code for this exception as an
+            <see cref="T:System.Int32"/>.  For desktop versions of the .NET Framework,
+            this property overrides the property of the same name within the
+            <see cref="T:System.Runtime.InteropServices.ExternalException"/>
+            class.  This property returns the same underlying value as the
+            <see cref="P:System.Data.SQLite.SQLiteException.ResultCode"/> property.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteErrorCode">
+            <summary>
+            SQLite error codes.  Actually, this enumeration represents a return code,
+            which may also indicate success in one of several ways (e.g. SQLITE_OK,
+            SQLITE_ROW, and SQLITE_DONE).  Therefore, the name of this enumeration is
+            something of a misnomer.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Unknown">
+            <summary>
+            The error code is unknown.  This error code
+            is only used by the managed wrapper itself.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Ok">
+            <summary>
+            Successful result
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Error">
+            <summary>
+            SQL error or missing database
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Internal">
+            <summary>
+            Internal logic error in SQLite
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Perm">
+            <summary>
+            Access permission denied
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Abort">
+            <summary>
+            Callback routine requested an abort
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Busy">
+            <summary>
+            The database file is locked
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Locked">
+            <summary>
+            A table in the database is locked
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.NoMem">
+            <summary>
+            A malloc() failed
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.ReadOnly">
+            <summary>
+            Attempt to write a readonly database
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Interrupt">
+            <summary>
+            Operation terminated by sqlite3_interrupt()
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr">
+            <summary>
+            Some kind of disk I/O error occurred
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Corrupt">
+            <summary>
+            The database disk image is malformed
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.NotFound">
+            <summary>
+            Unknown opcode in sqlite3_file_control()
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Full">
+            <summary>
+            Insertion failed because database is full
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.CantOpen">
+            <summary>
+            Unable to open the database file
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Protocol">
+            <summary>
+            Database lock protocol error
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Empty">
+            <summary>
+            Database is empty
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Schema">
+            <summary>
+            The database schema changed
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.TooBig">
+            <summary>
+            String or BLOB exceeds size limit
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Constraint">
+            <summary>
+            Abort due to constraint violation
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Mismatch">
+            <summary>
+            Data type mismatch
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Misuse">
+            <summary>
+            Library used incorrectly
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.NoLfs">
+            <summary>
+            Uses OS features not supported on host
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Auth">
+            <summary>
+            Authorization denied
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Format">
+            <summary>
+            Auxiliary database format error
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Range">
+            <summary>
+            2nd parameter to sqlite3_bind out of range
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.NotADb">
+            <summary>
+            File opened that is not a database file
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Notice">
+            <summary>
+            Notifications from sqlite3_log()
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Warning">
+            <summary>
+            Warnings from sqlite3_log()
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Row">
+            <summary>
+            sqlite3_step() has another row ready
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Done">
+            <summary>
+            sqlite3_step() has finished executing
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.NonExtendedMask">
+            <summary>
+            Used to mask off extended result codes
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Error_Missing_CollSeq">
+            <summary>
+            A collation sequence was referenced by a schema and it cannot be
+            found.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Error_Retry">
+            <summary>
+            An internal operation failed and it may succeed if retried.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Error_Snapshot">
+            <summary>
+            The specified snapshot has been overwritten by a checkpoint.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Read">
+            <summary>
+            A file read operation failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Short_Read">
+            <summary>
+            A file read operation returned less data than requested.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Write">
+            <summary>
+            A file write operation failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Fsync">
+            <summary>
+            A file synchronization operation failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Dir_Fsync">
+            <summary>
+            A directory synchronization operation failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Truncate">
+            <summary>
+            A file truncate operation failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Fstat">
+            <summary>
+            A file metadata operation failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Unlock">
+            <summary>
+            A file unlock operation failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_RdLock">
+            <summary>
+            A file lock operation failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Delete">
+            <summary>
+            A file delete operation failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Blocked">
+            <summary>
+            Not currently used.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_NoMem">
+            <summary>
+            Out-of-memory during a file operation.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Access">
+            <summary>
+            A file existence/status operation failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_CheckReservedLock">
+            <summary>
+            A check for a reserved lock failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Lock">
+            <summary>
+            A file lock operation failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Close">
+            <summary>
+            A file close operation failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Dir_Close">
+            <summary>
+            A directory close operation failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_ShmOpen">
+            <summary>
+            A shared memory open operation failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_ShmSize">
+            <summary>
+            A shared memory size operation failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_ShmLock">
+            <summary>
+            A shared memory lock operation failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_ShmMap">
+            <summary>
+            A shared memory map operation failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Seek">
+            <summary>
+            A file seek operation failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Delete_NoEnt">
+            <summary>
+            A file delete operation failed because it does not exist.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Mmap">
+            <summary>
+            A file memory mapping operation failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_GetTempPath">
+            <summary>
+            The temporary directory path could not be obtained.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_ConvPath">
+            <summary>
+            A path string conversion operation failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_VNode">
+            <summary>
+            Reserved.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Auth">
+            <summary>
+            An attempt to authenticate failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Begin_Atomic">
+            <summary>
+            An attempt to begin a file system transaction failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Commit_Atomic">
+            <summary>
+            An attempt to commit a file system transaction failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Rollback_Atomic">
+            <summary>
+            An attempt to rollback a file system transaction failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.IoErr_Data">
+            <summary>
+            Data read from the file system appears to be incorrect.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Locked_SharedCache">
+            <summary>
+            A database table is locked in shared-cache mode.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Locked_Vtab">
+            <summary>
+            A virtual table in the database is locked.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Busy_Recovery">
+            <summary>
+            A database file is locked due to a recovery operation.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Busy_Snapshot">
+            <summary>
+            A database file is locked due to snapshot semantics.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Busy_Timeout">
+            <summary>
+            An internal timeout was encountered while waiting for a database lock.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.CantOpen_NoTempDir">
+            <summary>
+            A database file cannot be opened because no temporary directory is available.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.CantOpen_IsDir">
+            <summary>
+            A database file cannot be opened because its path represents a directory.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.CantOpen_FullPath">
+            <summary>
+            A database file cannot be opened because its full path could not be obtained.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.CantOpen_ConvPath">
+            <summary>
+            A database file cannot be opened because a path string conversion operation failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.CantOpen_DirtyWal">
+            <summary>
+            No longer used.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.CantOpen_SymLink">
+            <summary>
+            A database file is a symbolic link and cannot be opened.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Corrupt_Vtab">
+            <summary>
+            A virtual table is malformed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Corrupt_Sequence">
+            <summary>
+            A required sequence table is missing or corrupt.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Corrupt_Index">
+            <summary>
+            An index entry that should be present is missing.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.ReadOnly_Recovery">
+            <summary>
+            A database file is read-only due to a recovery operation.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.ReadOnly_CantLock">
+            <summary>
+            A database file is read-only because a lock could not be obtained.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.ReadOnly_Rollback">
+            <summary>
+            A database file is read-only because it needs rollback processing.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.ReadOnly_DbMoved">
+            <summary>
+            A database file is read-only because it was moved while open.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.ReadOnly_CantInit">
+            <summary>
+            The shared-memory file is read-only and it should be read-write.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.ReadOnly_Directory">
+            <summary>
+            Unable to create journal file because the directory is read-only.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Abort_Rollback">
+            <summary>
+            An operation is being aborted due to rollback processing.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Constraint_Check">
+            <summary>
+            A CHECK constraint failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Constraint_CommitHook">
+            <summary>
+            A commit hook produced a unsuccessful return code.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Constraint_ForeignKey">
+            <summary>
+            A FOREIGN KEY constraint failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Constraint_Function">
+            <summary>
+            Not currently used.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Constraint_NotNull">
+            <summary>
+            A NOT NULL constraint failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Constraint_PrimaryKey">
+            <summary>
+            A PRIMARY KEY constraint failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Constraint_Trigger">
+            <summary>
+            The RAISE function was used by a trigger-program.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Constraint_Unique">
+            <summary>
+            A UNIQUE constraint failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Constraint_Vtab">
+            <summary>
+            Not currently used.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Constraint_RowId">
+            <summary>
+            A ROWID constraint failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Constraint_Pinned">
+            <summary>
+            A database cursor is busy and cannot be moved.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Notice_Recover_Wal">
+            <summary>
+            Frames were recovered from the WAL log file.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Notice_Recover_Rollback">
+            <summary>
+            Pages were recovered from the journal file.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Warning_AutoIndex">
+            <summary>
+            An automatic index was created to process a query.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Auth_User">
+            <summary>
+            User authentication failed.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Ok_Load_Permanently">
+            <summary>
+            Success.  Prevents the extension from unloading until the process
+            terminates.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteErrorCode.Ok_SymLink">
+            <summary>
+            Success.  The specified file name refers to a symbolic link.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteFactory">
+            <summary>
+            SQLite implementation of <see cref="T:System.Data.Common.DbProviderFactory"/>.
+            </summary>
+            <summary>
+            SQLite implementation of <see cref="T:System.IServiceProvider"/>.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFactory.#ctor">
+            <summary>
+            Constructs a new instance.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFactory.Dispose">
+            <summary>
+            Cleans up resources (native and managed) associated with the current instance.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFactory.Finalize">
+            <summary>
+            Cleans up resources associated with the current instance.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteFactory.Instance">
+            <summary>
+            Static instance member which returns an instanced <see cref="T:System.Data.SQLite.SQLiteFactory"/> class.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFactory.CreateCommand">
+            <summary>
+            Creates and returns a new <see cref="T:System.Data.SQLite.SQLiteCommand"/> object.
+            </summary>
+            <returns>The new object.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFactory.CreateCommandBuilder">
+            <summary>
+            Creates and returns a new <see cref="T:System.Data.SQLite.SQLiteCommandBuilder"/> object.
+            </summary>
+            <returns>The new object.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFactory.CreateConnection">
+            <summary>
+            Creates and returns a new <see cref="T:System.Data.SQLite.SQLiteConnection"/> object.
+            </summary>
+            <returns>The new object.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFactory.CreateConnectionStringBuilder">
+            <summary>
+            Creates and returns a new <see cref="T:System.Data.SQLite.SQLiteConnectionStringBuilder"/> object.
+            </summary>
+            <returns>The new object.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFactory.CreateDataAdapter">
+            <summary>
+            Creates and returns a new <see cref="T:System.Data.SQLite.SQLiteDataAdapter"/> object.
+            </summary>
+            <returns>The new object.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFactory.CreateParameter">
+            <summary>
+            Creates and returns a new <see cref="T:System.Data.SQLite.SQLiteParameter"/> object.
+            </summary>
+            <returns>The new object.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFactory.PreInitialize">
+            <summary>
+            This method is called to perform preliminary static initialization
+            necessary for this class.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFactory.InitializeDbProviderServices">
+            <summary>
+            This method is called to perform some of the static initialization
+            necessary for this class.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFactory.System#IServiceProvider#GetService(System.Type)">
+            <summary>
+            Will provide a <see cref="T:System.IServiceProvider"/> object in .NET 3.5.
+            </summary>
+            <param name="serviceType">The class or interface type to query for.</param>
+            <returns></returns>
+        </member>
+        <member name="E:System.Data.SQLite.SQLiteFactory.Log">
+            <summary>
+            This event is raised whenever SQLite raises a logging event.
+            Note that this should be set as one of the first things in the
+            application.  This event is provided for backward compatibility only.
+            New code should use the <see cref="T:System.Data.SQLite.SQLiteLog"/> class instead.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteFunction">
+             <summary>
+             This abstract class is designed to handle user-defined functions easily.  An instance of the derived class is made for each
+             connection to the database.
+             </summary>
+             <remarks>
+             Although there is one instance of a class derived from SQLiteFunction per database connection, the derived class has no access
+             to the underlying connection.  This is necessary to deter implementers from thinking it would be a good idea to make database
+             calls during processing.
+            
+             It is important to distinguish between a per-connection instance, and a per-SQL statement context.  One instance of this class
+             services all SQL statements being stepped through on that connection, and there can be many.  One should never store per-statement
+             information in member variables of user-defined function classes.
+            
+             For aggregate functions, always create and store your per-statement data in the contextData object on the 1st step.  This data will
+             be automatically freed for you (and Dispose() called if the item supports IDisposable) when the statement completes.
+             </remarks>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteFunction._base">
+            <summary>
+            The base connection this function is attached to
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteFunction._contextDataList">
+            <summary>
+            Internal array used to keep track of aggregate function context data
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteFunction._flags">
+            <summary>
+            The connection flags associated with this object (this should be the
+            same value as the flags associated with the parent connection object).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteFunction._InvokeFunc">
+            <summary>
+            Holds a reference to the callback function for user functions
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteFunction._StepFunc">
+            <summary>
+            Holds a reference to the callbakc function for stepping in an aggregate function
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteFunction._FinalFunc">
+            <summary>
+            Holds a reference to the callback function for finalizing an aggregate function
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteFunction._CompareFunc">
+            <summary>
+            Holds a reference to the callback function for collating sequences
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteFunction._context">
+            <summary>
+            Current context of the current callback.  Only valid during a callback
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteFunction._registeredFunctions">
+            <summary>
+            This static dictionary contains all the registered (known) user-defined
+            functions declared using the proper attributes.  The contained dictionary
+            values are always null and are not currently used.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.#ctor">
+            <summary>
+            Internal constructor, initializes the function's internal variables.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.#ctor(System.Data.SQLite.SQLiteDateFormats,System.DateTimeKind,System.String,System.Boolean)">
+            <summary>
+            Constructs an instance of this class using the specified data-type
+            conversion parameters.
+            </summary>
+            <param name="format">
+            The DateTime format to be used when converting string values to a
+            DateTime and binding DateTime parameters.
+            </param>
+            <param name="kind">
+            The <see cref="T:System.DateTimeKind"/> to be used when creating DateTime
+            values.
+            </param>
+            <param name="formatString">
+            The format string to be used when parsing and formatting DateTime
+            values.
+            </param>
+            <param name="utf16">
+            Non-zero to create a UTF-16 data-type conversion context; otherwise,
+            a UTF-8 data-type conversion context will be created.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.Dispose">
+            <summary>
+            Disposes of any active contextData variables that were not automatically cleaned up.  Sometimes this can happen if
+            someone closes the connection while a DataReader is open.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.Dispose(System.Boolean)">
+            <summary>
+            Placeholder for a user-defined disposal routine
+            </summary>
+            <param name="disposing">True if the object is being disposed explicitly</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.Finalize">
+            <summary>
+            Cleans up resources associated with the current instance.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.Invoke(System.Object[])">
+            <summary>
+            Scalar functions override this method to do their magic.
+            </summary>
+            <remarks>
+            Parameters passed to functions have only an affinity for a certain data type, there is no underlying schema available
+            to force them into a certain type.  Therefore the only types you will ever see as parameters are
+            DBNull.Value, Int64, Double, String or byte[] array.
+            </remarks>
+            <param name="args">The arguments for the command to process</param>
+            <returns>You may return most simple types as a return value, null or DBNull.Value to return null, DateTime, or
+            you may return an Exception-derived class if you wish to return an error to SQLite.  Do not actually throw the error,
+            just return it!</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.Step(System.Object[],System.Int32,System.Object@)">
+            <summary>
+            Aggregate functions override this method to do their magic.
+            </summary>
+            <remarks>
+            Typically you'll be updating whatever you've placed in the contextData field and returning as quickly as possible.
+            </remarks>
+            <param name="args">The arguments for the command to process</param>
+            <param name="stepNumber">The 1-based step number.  This is incrememted each time the step method is called.</param>
+            <param name="contextData">A placeholder for implementers to store contextual data pertaining to the current context.</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.Final(System.Object)">
+            <summary>
+            Aggregate functions override this method to finish their aggregate processing.
+            </summary>
+            <remarks>
+            If you implemented your aggregate function properly,
+            you've been recording and keeping track of your data in the contextData object provided, and now at this stage you should have
+            all the information you need in there to figure out what to return.
+            NOTE:  It is possible to arrive here without receiving a previous call to Step(), in which case the contextData will
+            be null.  This can happen when no rows were returned.  You can either return null, or 0 or some other custom return value
+            if that is the case.
+            </remarks>
+            <param name="contextData">Your own assigned contextData, provided for you so you can return your final results.</param>
+            <returns>You may return most simple types as a return value, null or DBNull.Value to return null, DateTime, or
+            you may return an Exception-derived class if you wish to return an error to SQLite.  Do not actually throw the error,
+            just return it!
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.Compare(System.String,System.String)">
+            <summary>
+            User-defined collating sequences override this method to provide a custom string sorting algorithm.
+            </summary>
+            <param name="param1">The first string to compare.</param>
+            <param name="param2">The second strnig to compare.</param>
+            <returns>1 if param1 is greater than param2, 0 if they are equal, or -1 if param1 is less than param2.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.ConvertParams(System.Int32,System.IntPtr)">
+            <summary>
+            Converts an IntPtr array of context arguments to an object array containing the resolved parameters the pointers point to.
+            </summary>
+            <remarks>
+            Parameters passed to functions have only an affinity for a certain data type, there is no underlying schema available
+            to force them into a certain type.  Therefore the only types you will ever see as parameters are
+            DBNull.Value, Int64, Double, String or byte[] array.
+            </remarks>
+            <param name="nArgs">The number of arguments</param>
+            <param name="argsptr">A pointer to the array of arguments</param>
+            <returns>An object array of the arguments once they've been converted to .NET values</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.SetReturnValue(System.IntPtr,System.Object)">
+            <summary>
+            Takes the return value from Invoke() and Final() and figures out how to return it to SQLite's context.
+            </summary>
+            <param name="context">The context the return value applies to</param>
+            <param name="returnValue">The parameter to return to SQLite</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.ScalarCallback(System.IntPtr,System.Int32,System.IntPtr)">
+            <summary>
+            Internal scalar callback function, which wraps the raw context pointer and calls the virtual Invoke() method.
+            WARNING: Must not throw exceptions.
+            </summary>
+            <param name="context">A raw context pointer</param>
+            <param name="nArgs">Number of arguments passed in</param>
+            <param name="argsptr">A pointer to the array of arguments</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.CompareCallback(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)">
+            <summary>
+            Internal collating sequence function, which wraps up the raw string pointers and executes the Compare() virtual function.
+            WARNING: Must not throw exceptions.
+            </summary>
+            <param name="ptr">Not used</param>
+            <param name="len1">Length of the string pv1</param>
+            <param name="ptr1">Pointer to the first string to compare</param>
+            <param name="len2">Length of the string pv2</param>
+            <param name="ptr2">Pointer to the second string to compare</param>
+            <returns>Returns -1 if the first string is less than the second.  0 if they are equal, or 1 if the first string is greater
+            than the second.  Returns 0 if an exception is caught.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.CompareCallback16(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)">
+            <summary>
+            Internal collating sequence function, which wraps up the raw string pointers and executes the Compare() virtual function.
+            WARNING: Must not throw exceptions.
+            </summary>
+            <param name="ptr">Not used</param>
+            <param name="len1">Length of the string pv1</param>
+            <param name="ptr1">Pointer to the first string to compare</param>
+            <param name="len2">Length of the string pv2</param>
+            <param name="ptr2">Pointer to the second string to compare</param>
+            <returns>Returns -1 if the first string is less than the second.  0 if they are equal, or 1 if the first string is greater
+            than the second.  Returns 0 if an exception is caught.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.StepCallback(System.IntPtr,System.Int32,System.IntPtr)">
+            <summary>
+            The internal aggregate Step function callback, which wraps the raw context pointer and calls the virtual Step() method.
+            WARNING: Must not throw exceptions.
+            </summary>
+            <remarks>
+            This function takes care of doing the lookups and getting the important information put together to call the Step() function.
+            That includes pulling out the user's contextData and updating it after the call is made.  We use a sorted list for this so
+            binary searches can be done to find the data.
+            </remarks>
+            <param name="context">A raw context pointer</param>
+            <param name="nArgs">Number of arguments passed in</param>
+            <param name="argsptr">A pointer to the array of arguments</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.FinalCallback(System.IntPtr)">
+            <summary>
+            An internal aggregate Final function callback, which wraps the context pointer and calls the virtual Final() method.
+            WARNING: Must not throw exceptions.
+            </summary>
+            <param name="context">A raw context pointer</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.#cctor">
+            <summary>
+            Using reflection, enumerate all assemblies in the current appdomain looking for classes that
+            have a SQLiteFunctionAttribute attribute, and registering them accordingly.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.RegisterFunction(System.Type)">
+            <summary>
+            Manual method of registering a function.  The type must still have the SQLiteFunctionAttributes in order to work
+            properly, but this is a workaround for the Compact Framework where enumerating assemblies is not currently supported.
+            </summary>
+            <param name="typ">The type of the function to register</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.RegisterFunction(System.String,System.Int32,System.Data.SQLite.FunctionType,System.Type,System.Delegate,System.Delegate)">
+            <summary>
+            Alternative method of registering a function.  This method
+            does not require the specified type to be annotated with
+            <see cref="T:System.Data.SQLite.SQLiteFunctionAttribute"/>.
+            </summary>
+            <param name="name">
+            The name of the function to register.
+            </param>
+            <param name="argumentCount">
+            The number of arguments accepted by the function.
+            </param>
+            <param name="functionType">
+            The type of SQLite function being resitered (e.g. scalar,
+            aggregate, or collating sequence).
+            </param>
+            <param name="instanceType">
+            The <see cref="T:System.Type"/> that actually implements the function.
+            This will only be used if the <paramref name="callback1"/>
+            and <paramref name="callback2"/> parameters are null.
+            </param>
+            <param name="callback1">
+            The <see cref="T:System.Delegate"/> to be used for all calls into the
+            <see cref="M:System.Data.SQLite.SQLiteFunction.Invoke(System.Object[])"/>,
+            <see cref="M:System.Data.SQLite.SQLiteFunction.Step(System.Object[],System.Int32,System.Object@)"/>,
+            and <see cref="M:System.Data.SQLite.SQLiteFunction.Compare(System.String,System.String)"/> virtual methods.
+            </param>
+            <param name="callback2">
+            The <see cref="T:System.Delegate"/> to be used for all calls into the
+            <see cref="M:System.Data.SQLite.SQLiteFunction.Final(System.Object)"/> virtual method.  This
+            parameter is only necessary for aggregate functions.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.ReplaceFunction(System.Data.SQLite.SQLiteFunctionAttribute,System.Object)">
+            <summary>
+            Replaces a registered function, disposing of the associated (old)
+            value if necessary.
+            </summary>
+            <param name="at">
+            The attribute that describes the function to replace.
+            </param>
+            <param name="newValue">
+            The new value to use.
+            </param>
+            <returns>
+            Non-zero if an existing registered function was replaced; otherwise,
+            zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.CreateFunction(System.Data.SQLite.SQLiteFunctionAttribute,System.Data.SQLite.SQLiteFunction@)">
+            <summary>
+            Creates a <see cref="T:System.Data.SQLite.SQLiteFunction"/> instance based on the specified
+            <see cref="T:System.Data.SQLite.SQLiteFunctionAttribute"/>.
+            </summary>
+            <param name="functionAttribute">
+            The <see cref="T:System.Data.SQLite.SQLiteFunctionAttribute"/> containing the metadata about
+            the function to create.
+            </param>
+            <param name="function">
+            The created function -OR- null if the function could not be created.
+            </param>
+            <returns>
+            Non-zero if the function was created; otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.BindFunctions(System.Data.SQLite.SQLiteBase,System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Called by the SQLiteBase derived classes, this method binds all registered (known) user-defined functions to a connection.
+            It is done this way so that all user-defined functions will access the database using the same encoding scheme
+            as the connection (UTF-8 or UTF-16).
+            </summary>
+            <remarks>
+            The wrapper functions that interop with SQLite will create a unique cookie value, which internally is a pointer to
+            all the wrapped callback functions.  The interop function uses it to map CDecl callbacks to StdCall callbacks.
+            </remarks>
+            <param name="sqlbase">The base object on which the functions are to bind.</param>
+            <param name="flags">The flags associated with the parent connection object.</param>
+            <returns>Returns a logical list of functions which the connection should retain until it is closed.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.UnbindAllFunctions(System.Data.SQLite.SQLiteBase,System.Data.SQLite.SQLiteConnectionFlags,System.Boolean)">
+            <summary>
+            Called by the SQLiteBase derived classes, this method unbinds all registered (known)
+            functions -OR- all previously bound user-defined functions from a connection.
+            </summary>
+            <param name="sqlbase">The base object from which the functions are to be unbound.</param>
+            <param name="flags">The flags associated with the parent connection object.</param>
+            <param name="registered">
+            Non-zero to unbind all registered (known) functions -OR- zero to unbind all functions
+            currently bound to the connection.
+            </param>
+            <returns>Non-zero if all the specified user-defined functions were unbound.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.BindFunction(System.Data.SQLite.SQLiteBase,System.Data.SQLite.SQLiteFunctionAttribute,System.Data.SQLite.SQLiteFunction,System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            This function binds a user-defined function to a connection.
+            </summary>
+            <param name="sqliteBase">
+            The <see cref="T:System.Data.SQLite.SQLiteBase"/> object instance associated with the
+            <see cref="T:System.Data.SQLite.SQLiteConnection"/> that the function should be bound to.
+            </param>
+            <param name="functionAttribute">
+            The <see cref="T:System.Data.SQLite.SQLiteFunctionAttribute"/> object instance containing
+            the metadata for the function to be bound.
+            </param>
+            <param name="function">
+            The <see cref="T:System.Data.SQLite.SQLiteFunction"/> object instance that implements the
+            function to be bound.
+            </param>
+            <param name="flags">
+            The flags associated with the parent connection object.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunction.UnbindFunction(System.Data.SQLite.SQLiteBase,System.Data.SQLite.SQLiteFunctionAttribute,System.Data.SQLite.SQLiteFunction,System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            This function unbinds a user-defined functions from a connection.
+            </summary>
+            <param name="sqliteBase">
+            The <see cref="T:System.Data.SQLite.SQLiteBase"/> object instance associated with the
+            <see cref="T:System.Data.SQLite.SQLiteConnection"/> that the function should be bound to.
+            </param>
+            <param name="functionAttribute">
+            The <see cref="T:System.Data.SQLite.SQLiteFunctionAttribute"/> object instance containing
+            the metadata for the function to be bound.
+            </param>
+            <param name="function">
+            The <see cref="T:System.Data.SQLite.SQLiteFunction"/> object instance that implements the
+            function to be bound.
+            </param>
+            <param name="flags">
+            The flags associated with the parent connection object.
+            </param>
+            <returns>Non-zero if the function was unbound.</returns>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteFunction.SQLiteConvert">
+            <summary>
+            Returns a reference to the underlying connection's SQLiteConvert class, which can be used to convert
+            strings and DateTime's into the current connection's encoding schema.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteInvokeDelegate">
+            <summary>
+            This <see cref="T:System.Delegate"/> type is used with the
+            <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Invoke(System.Object[])"/> method.
+            </summary>
+            <param name="param0">
+            This is always the string literal "Invoke".
+            </param>
+            <param name="args">
+            The arguments for the scalar function.
+            </param>
+            <returns>
+            The result of the scalar function.
+            </returns>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteStepDelegate">
+            <summary>
+            This <see cref="T:System.Delegate"/> type is used with the
+            <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Step(System.Object[],System.Int32,System.Object@)"/> method.
+            </summary>
+            <param name="param0">
+            This is always the string literal "Step".
+            </param>
+            <param name="args">
+            The arguments for the aggregate function.
+            </param>
+            <param name="stepNumber">
+            The step number (one based).  This is incrememted each time the
+            <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Step(System.Object[],System.Int32,System.Object@)"/> method is called.
+            </param>
+            <param name="contextData">
+            A placeholder for implementers to store contextual data pertaining
+            to the current context.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteFinalDelegate">
+            <summary>
+            This <see cref="T:System.Delegate"/> type is used with the
+            <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Final(System.Object)"/> method.
+            </summary>
+            <param name="param0">
+            This is always the string literal "Final".
+            </param>
+            <param name="contextData">
+            A placeholder for implementers to store contextual data pertaining
+            to the current context.
+            </param>
+            <returns>
+            The result of the aggregate function.
+            </returns>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteCompareDelegate">
+            <summary>
+            This <see cref="T:System.Delegate"/> type is used with the
+            <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Compare(System.String,System.String)"/> method.
+            </summary>
+            <param name="param0">
+            This is always the string literal "Compare".
+            </param>
+            <param name="param1">
+            The first string to compare.
+            </param>
+            <param name="param2">
+            The second strnig to compare.
+            </param>
+            <returns>
+            A positive integer if the <paramref name="param1"/> parameter is
+            greater than the <paramref name="param2"/> parameter, a negative
+            integer if the <paramref name="param1"/> parameter is less than
+            the <paramref name="param2"/> parameter, or zero if they are
+            equal.
+            </returns>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteDelegateFunction">
+            <summary>
+            This class implements a SQLite function using a <see cref="T:System.Delegate"/>.
+            All the virtual methods of the <see cref="T:System.Data.SQLite.SQLiteFunction"/> class are
+            implemented using calls to the <see cref="T:System.Data.SQLite.SQLiteInvokeDelegate"/>,
+            <see cref="T:System.Data.SQLite.SQLiteStepDelegate"/>, <see cref="T:System.Data.SQLite.SQLiteFinalDelegate"/>,
+            and <see cref="T:System.Data.SQLite.SQLiteCompareDelegate"/> strongly typed delegate types
+            or via the <see cref="M:System.Delegate.DynamicInvoke(System.Object[])"/> method.
+            The arguments are presented in the same order they appear in
+            the associated <see cref="T:System.Data.SQLite.SQLiteFunction"/> methods with one exception:
+            the first argument is the name of the virtual method being implemented.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDelegateFunction.NoCallbackError">
+            <summary>
+            This error message is used by the overridden virtual methods when
+            a required <see cref="T:System.Delegate"/> property (e.g.
+            <see cref="P:System.Data.SQLite.SQLiteDelegateFunction.Callback1"/> or <see cref="P:System.Data.SQLite.SQLiteDelegateFunction.Callback2"/>) has not been
+            set.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteDelegateFunction.ResultInt32Error">
+            <summary>
+            This error message is used by the overridden <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Compare(System.String,System.String)"/>
+            method when the result does not have a type of <see cref="T:System.Int32"/>.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDelegateFunction.#ctor">
+            <summary>
+            Constructs an empty instance of this class.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDelegateFunction.#ctor(System.Delegate,System.Delegate)">
+            <summary>
+            Constructs an instance of this class using the specified
+            <see cref="T:System.Delegate"/> as the <see cref="T:System.Data.SQLite.SQLiteFunction"/>
+            implementation.
+            </summary>
+            <param name="callback1">
+            The <see cref="T:System.Delegate"/> to be used for all calls into the
+            <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Invoke(System.Object[])"/>, <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Step(System.Object[],System.Int32,System.Object@)"/>, and
+            <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Compare(System.String,System.String)"/> virtual methods needed by the
+            <see cref="T:System.Data.SQLite.SQLiteFunction"/> base class.
+            </param>
+            <param name="callback2">
+            The <see cref="T:System.Delegate"/> to be used for all calls into the
+            <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Final(System.Object)"/> virtual methods needed by the
+            <see cref="T:System.Data.SQLite.SQLiteFunction"/> base class.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDelegateFunction.GetInvokeArgs(System.Object[],System.Boolean)">
+            <summary>
+            Returns the list of arguments for the <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Invoke(System.Object[])"/> method,
+            as an <see cref="T:System.Array"/> of <see cref="T:System.Object"/>.  The first
+            argument is always the literal string "Invoke".
+            </summary>
+            <param name="args">
+            The original arguments received by the <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Invoke(System.Object[])"/> method.
+            </param>
+            <param name="earlyBound">
+            Non-zero if the returned arguments are going to be used with the
+            <see cref="T:System.Data.SQLite.SQLiteInvokeDelegate"/> type; otherwise, zero.
+            </param>
+            <returns>
+            The arguments to pass to the configured <see cref="T:System.Delegate"/>.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDelegateFunction.GetStepArgs(System.Object[],System.Int32,System.Object,System.Boolean)">
+            <summary>
+            Returns the list of arguments for the <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Step(System.Object[],System.Int32,System.Object@)"/> method,
+            as an <see cref="T:System.Array"/> of <see cref="T:System.Object"/>.  The first
+            argument is always the literal string "Step".
+            </summary>
+            <param name="args">
+            The original arguments received by the <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Step(System.Object[],System.Int32,System.Object@)"/> method.
+            </param>
+            <param name="stepNumber">
+            The step number (one based).  This is incrememted each time the
+            <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Step(System.Object[],System.Int32,System.Object@)"/> method is called.
+            </param>
+            <param name="contextData">
+            A placeholder for implementers to store contextual data pertaining
+            to the current context.
+            </param>
+            <param name="earlyBound">
+            Non-zero if the returned arguments are going to be used with the
+            <see cref="T:System.Data.SQLite.SQLiteStepDelegate"/> type; otherwise, zero.
+            </param>
+            <returns>
+            The arguments to pass to the configured <see cref="T:System.Delegate"/>.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDelegateFunction.UpdateStepArgs(System.Object[],System.Object@,System.Boolean)">
+            <summary>
+            Updates the output arguments for the <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Step(System.Object[],System.Int32,System.Object@)"/> method,
+            using an <see cref="T:System.Array"/> of <see cref="T:System.Object"/>.  The first
+            argument is always the literal string "Step".  Currently, only the
+            <paramref name="contextData"/> parameter is updated.
+            </summary>
+            <param name="args">
+            The original arguments received by the <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Step(System.Object[],System.Int32,System.Object@)"/> method.
+            </param>
+            <param name="contextData">
+            A placeholder for implementers to store contextual data pertaining
+            to the current context.
+            </param>
+            <param name="earlyBound">
+            Non-zero if the returned arguments are going to be used with the
+            <see cref="T:System.Data.SQLite.SQLiteStepDelegate"/> type; otherwise, zero.
+            </param>
+            <returns>
+            The arguments to pass to the configured <see cref="T:System.Delegate"/>.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDelegateFunction.GetFinalArgs(System.Object,System.Boolean)">
+            <summary>
+            Returns the list of arguments for the <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Final(System.Object)"/> method,
+            as an <see cref="T:System.Array"/> of <see cref="T:System.Object"/>.  The first
+            argument is always the literal string "Final".
+            </summary>
+            <param name="contextData">
+            A placeholder for implementers to store contextual data pertaining
+            to the current context.
+            </param>
+            <param name="earlyBound">
+            Non-zero if the returned arguments are going to be used with the
+            <see cref="T:System.Data.SQLite.SQLiteFinalDelegate"/> type; otherwise, zero.
+            </param>
+            <returns>
+            The arguments to pass to the configured <see cref="T:System.Delegate"/>.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDelegateFunction.GetCompareArgs(System.String,System.String,System.Boolean)">
+            <summary>
+            Returns the list of arguments for the <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Compare(System.String,System.String)"/> method,
+            as an <see cref="T:System.Array"/> of <see cref="T:System.Object"/>.  The first
+            argument is always the literal string "Compare".
+            </summary>
+            <param name="param1">
+            The first string to compare.
+            </param>
+            <param name="param2">
+            The second strnig to compare.
+            </param>
+            <param name="earlyBound">
+            Non-zero if the returned arguments are going to be used with the
+            <see cref="T:System.Data.SQLite.SQLiteCompareDelegate"/> type; otherwise, zero.
+            </param>
+            <returns>
+            The arguments to pass to the configured <see cref="T:System.Delegate"/>.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDelegateFunction.Invoke(System.Object[])">
+            <summary>
+            This virtual method is the implementation for scalar functions.
+            See the <see cref="M:System.Data.SQLite.SQLiteFunction.Invoke(System.Object[])"/> method for more
+            details.
+            </summary>
+            <param name="args">
+            The arguments for the scalar function.
+            </param>
+            <returns>
+            The result of the scalar function.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDelegateFunction.Step(System.Object[],System.Int32,System.Object@)">
+            <summary>
+            This virtual method is part of the implementation for aggregate
+            functions.  See the <see cref="M:System.Data.SQLite.SQLiteFunction.Step(System.Object[],System.Int32,System.Object@)"/> method
+            for more details.
+            </summary>
+            <param name="args">
+            The arguments for the aggregate function.
+            </param>
+            <param name="stepNumber">
+            The step number (one based).  This is incrememted each time the
+            <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Step(System.Object[],System.Int32,System.Object@)"/> method is called.
+            </param>
+            <param name="contextData">
+            A placeholder for implementers to store contextual data pertaining
+            to the current context.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDelegateFunction.Final(System.Object)">
+            <summary>
+            This virtual method is part of the implementation for aggregate
+            functions.  See the <see cref="M:System.Data.SQLite.SQLiteFunction.Final(System.Object)"/> method
+            for more details.
+            </summary>
+            <param name="contextData">
+            A placeholder for implementers to store contextual data pertaining
+            to the current context.
+            </param>
+            <returns>
+            The result of the aggregate function.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteDelegateFunction.Compare(System.String,System.String)">
+            <summary>
+            This virtual method is part of the implementation for collating
+            sequences.  See the <see cref="M:System.Data.SQLite.SQLiteFunction.Compare(System.String,System.String)"/> method
+            for more details.
+            </summary>
+            <param name="param1">
+            The first string to compare.
+            </param>
+            <param name="param2">
+            The second strnig to compare.
+            </param>
+            <returns>
+            A positive integer if the <paramref name="param1"/> parameter is
+            greater than the <paramref name="param2"/> parameter, a negative
+            integer if the <paramref name="param1"/> parameter is less than
+            the <paramref name="param2"/> parameter, or zero if they are
+            equal.
+            </returns>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteDelegateFunction.Callback1">
+            <summary>
+            The <see cref="T:System.Delegate"/> to be used for all calls into the
+            <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Invoke(System.Object[])"/>, <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Step(System.Object[],System.Int32,System.Object@)"/>, and
+            <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Compare(System.String,System.String)"/> virtual methods needed by the
+            <see cref="T:System.Data.SQLite.SQLiteFunction"/> base class.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteDelegateFunction.Callback2">
+            <summary>
+            The <see cref="T:System.Delegate"/> to be used for all calls into the
+            <see cref="M:System.Data.SQLite.SQLiteDelegateFunction.Final(System.Object)"/> virtual methods needed by the
+            <see cref="T:System.Data.SQLite.SQLiteFunction"/> base class.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteFunctionEx">
+            <summary>
+            Extends SQLiteFunction and allows an inherited class to obtain the collating sequence associated with a function call.
+            </summary>
+            <remarks>
+            User-defined functions can call the GetCollationSequence() method in this class and use it to compare strings and char arrays.
+            </remarks>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunctionEx.GetCollationSequence">
+            <summary>
+            Obtains the collating sequence in effect for the given function.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunctionEx.Dispose(System.Boolean)">
+            <summary>
+            Cleans up resources (native and managed) associated with the current instance.
+            </summary>
+            <param name="disposing">
+            Zero when being disposed via garbage collection; otherwise, non-zero.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.FunctionType">
+            <summary>
+            The type of user-defined function to declare
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.FunctionType.Scalar">
+            <summary>
+            Scalar functions are designed to be called and return a result immediately.  Examples include ABS(), Upper(), Lower(), etc.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.FunctionType.Aggregate">
+            <summary>
+            Aggregate functions are designed to accumulate data until the end of a call and then return a result gleaned from the accumulated data.
+            Examples include SUM(), COUNT(), AVG(), etc.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.FunctionType.Collation">
+            <summary>
+            Collating sequences are used to sort textual data in a custom manner, and appear in an ORDER BY clause.  Typically text in an ORDER BY is
+            sorted using a straight case-insensitive comparison function.  Custom collating sequences can be used to alter the behavior of text sorting
+            in a user-defined manner.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteCallback">
+            <summary>
+            An internal callback delegate declaration.
+            </summary>
+            <param name="context">Raw native context pointer for the user function.</param>
+            <param name="argc">Total number of arguments to the user function.</param>
+            <param name="argv">Raw native pointer to the array of raw native argument pointers.</param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteFinalCallback">
+            <summary>
+            An internal final callback delegate declaration.
+            </summary>
+            <param name="context">Raw context pointer for the user function</param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteCollation">
+            <summary>
+            Internal callback delegate for implementing collating sequences
+            </summary>
+            <param name="puser">Not used</param>
+            <param name="len1">Length of the string pv1</param>
+            <param name="pv1">Pointer to the first string to compare</param>
+            <param name="len2">Length of the string pv2</param>
+            <param name="pv2">Pointer to the second string to compare</param>
+            <returns>Returns -1 if the first string is less than the second.  0 if they are equal, or 1 if the first string is greater
+            than the second.</returns>
+        </member>
+        <member name="T:System.Data.SQLite.CollationTypeEnum">
+            <summary>
+            The type of collating sequence
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.CollationTypeEnum.Binary">
+            <summary>
+            The built-in BINARY collating sequence
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.CollationTypeEnum.NoCase">
+            <summary>
+            The built-in NOCASE collating sequence
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.CollationTypeEnum.Reverse">
+            <summary>
+            The built-in REVERSE collating sequence
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.CollationTypeEnum.Custom">
+            <summary>
+            A custom user-defined collating sequence
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.CollationEncodingEnum">
+            <summary>
+            The encoding type the collation sequence uses
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.CollationEncodingEnum.UTF8">
+            <summary>
+            The collation sequence is UTF8
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.CollationEncodingEnum.UTF16LE">
+            <summary>
+            The collation sequence is UTF16 little-endian
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.CollationEncodingEnum.UTF16BE">
+            <summary>
+            The collation sequence is UTF16 big-endian
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.CollationSequence">
+            <summary>
+            A struct describing the collating sequence a function is executing in
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.CollationSequence.Name">
+            <summary>
+            The name of the collating sequence
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.CollationSequence.Type">
+            <summary>
+            The type of collating sequence
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.CollationSequence.Encoding">
+            <summary>
+            The text encoding of the collation sequence
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.CollationSequence._func">
+            <summary>
+            Context of the function that requested the collating sequence
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.CollationSequence.Compare(System.String,System.String)">
+            <summary>
+            Calls the base collating sequence to compare two strings
+            </summary>
+            <param name="s1">The first string to compare</param>
+            <param name="s2">The second string to compare</param>
+            <returns>-1 if s1 is less than s2, 0 if s1 is equal to s2, and 1 if s1 is greater than s2</returns>
+        </member>
+        <member name="M:System.Data.SQLite.CollationSequence.Compare(System.Char[],System.Char[])">
+            <summary>
+            Calls the base collating sequence to compare two character arrays
+            </summary>
+            <param name="c1">The first array to compare</param>
+            <param name="c2">The second array to compare</param>
+            <returns>-1 if c1 is less than c2, 0 if c1 is equal to c2, and 1 if c1 is greater than c2</returns>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteFunctionAttribute">
+            <summary>
+            A simple custom attribute to enable us to easily find user-defined functions in
+            the loaded assemblies and initialize them in SQLite as connections are made.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunctionAttribute.#ctor">
+            <summary>
+            Default constructor, initializes the internal variables for the function.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteFunctionAttribute.#ctor(System.String,System.Int32,System.Data.SQLite.FunctionType)">
+            <summary>
+            Constructs an instance of this class.  This sets the initial
+            <see cref="P:System.Data.SQLite.SQLiteFunctionAttribute.InstanceType"/>, <see cref="P:System.Data.SQLite.SQLiteFunctionAttribute.Callback1"/>, and
+            <see cref="P:System.Data.SQLite.SQLiteFunctionAttribute.Callback2"/> properties to null.
+            </summary>
+            <param name="name">
+            The name of the function, as seen by the SQLite core library.
+            </param>
+            <param name="argumentCount">
+            The number of arguments that the function will accept.
+            </param>
+            <param name="functionType">
+            The type of function being declared.  This will either be Scalar,
+            Aggregate, or Collation.
+            </param>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteFunctionAttribute.Name">
+            <summary>
+            The function's name as it will be used in SQLite command text.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteFunctionAttribute.Arguments">
+            <summary>
+            The number of arguments this function expects.  -1 if the number of arguments is variable.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteFunctionAttribute.FuncType">
+            <summary>
+            The type of function this implementation will be.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteFunctionAttribute.InstanceType">
+            <summary>
+            The <see cref="T:System.Type"/> object instance that describes the class
+            containing the implementation for the associated function.  The value of
+            this property will not be used if either the <see cref="P:System.Data.SQLite.SQLiteFunctionAttribute.Callback1"/> or
+            <see cref="P:System.Data.SQLite.SQLiteFunctionAttribute.Callback2"/> property values are set to non-null.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteFunctionAttribute.Callback1">
+            <summary>
+            The <see cref="T:System.Delegate"/> that refers to the implementation for the
+            associated function.  If this property value is set to non-null, it will
+            be used instead of the <see cref="P:System.Data.SQLite.SQLiteFunctionAttribute.InstanceType"/> property value.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteFunctionAttribute.Callback2">
+            <summary>
+            The <see cref="T:System.Delegate"/> that refers to the implementation for the
+            associated function.  If this property value is set to non-null, it will
+            be used instead of the <see cref="P:System.Data.SQLite.SQLiteFunctionAttribute.InstanceType"/> property value.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteKeyReader">
+            <summary>
+            This class provides key info for a given SQLite statement.
+            <remarks>
+            Providing key information for a given statement is non-trivial :(
+            </remarks>
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteKeyReader.#ctor(System.Data.SQLite.SQLiteConnection,System.Data.SQLite.SQLiteDataReader,System.Data.SQLite.SQLiteStatement)">
+            <summary>
+            This function does all the nasty work at determining what keys need to be returned for
+            a given statement.
+            </summary>
+            <param name="cnn"></param>
+            <param name="reader"></param>
+            <param name="stmt"></param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteKeyReader.Sync">
+            <summary>
+            Make sure all the subqueries are open and ready and sync'd with the current rowid
+            of the table they're supporting
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteKeyReader.Reset">
+            <summary>
+            Release any readers on any subqueries
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteKeyReader.AppendSchemaTable(System.Data.DataTable)">
+            <summary>
+            Append all the columns we've added to the original query to the schema
+            </summary>
+            <param name="tbl"></param>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteKeyReader.Count">
+            <summary>
+            How many additional columns of keyinfo we're holding
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteKeyReader.KeyInfo">
+            <summary>
+            Used to support CommandBehavior.KeyInfo
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteKeyReader.RowIdInfo">
+            <summary>
+            Used to keep track of the per-table RowId column metadata.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteKeyReader.KeyQuery">
+            <summary>
+            A single sub-query for a given table/database.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.LogEventArgs">
+            <summary>
+            Event data for logging event handlers.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.LogEventArgs.ErrorCode">
+            <summary>
+            The error code.  The type of this object value should be
+            <see cref="T:System.Int32"/> or <see cref="T:System.Data.SQLite.SQLiteErrorCode"/>.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.LogEventArgs.Message">
+            <summary>
+            SQL statement text as the statement first begins executing
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.LogEventArgs.Data">
+            <summary>
+            Extra data associated with this event, if any.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.LogEventArgs.#ctor(System.IntPtr,System.Object,System.String,System.Object)">
+            <summary>
+            Constructs the object.
+            </summary>
+            <param name="pUserData">Should be null.</param>
+            <param name="errorCode">
+            The error code.  The type of this object value should be
+            <see cref="T:System.Int32"/> or <see cref="T:System.Data.SQLite.SQLiteErrorCode"/>.
+            </param>
+            <param name="message">The error message, if any.</param>
+            <param name="data">The extra data, if any.</param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteLogEventHandler">
+            <summary>
+            Raised when a log event occurs.
+            </summary>
+            <param name="sender">The current connection</param>
+            <param name="e">Event arguments of the trace</param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteLog">
+            <summary>
+            Manages the SQLite custom logging functionality and the associated
+            callback for the whole process.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteLog.syncRoot">
+            <summary>
+            Object used to synchronize access to the static instance data
+            for this class.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteLog._domainUnload">
+            <summary>
+            Member variable to store the AppDomain.DomainUnload event handler.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteLog._defaultHandler">
+            <summary>
+            The default log event handler.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteLog._callback">
+            <summary>
+            The log callback passed to native SQLite engine.  This must live
+            as long as the SQLite library has a pointer to it.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteLog._sql">
+            <summary>
+            The base SQLite object to interop with.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteLog._initializeCallCount">
+            <summary>
+            The number of times that the <see cref="M:System.Data.SQLite.SQLiteLog.Initialize(System.String)"/>
+            has been called when the logging subystem was actually eligible
+            to be initialized (i.e. without the "No_SQLiteLog" environment
+            variable being set).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteLog._attemptedInitialize">
+            <summary>
+            This will be non-zero if an attempt was already made to initialize
+            the (managed) logging subsystem.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteLog._enabled">
+            <summary>
+            This will be non-zero if logging is currently enabled.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteLog.Initialize">
+            <summary>
+            Initializes the SQLite logging facilities.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteLog.Initialize(System.String)">
+            <summary>
+            Initializes the SQLite logging facilities.
+            </summary>
+            <param name="className">
+            The name of the managed class that called this method.  This
+            parameter may be null.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteLog.DomainUnload(System.Object,System.EventArgs)">
+            <summary>
+            Handles the AppDomain being unloaded.
+            </summary>
+            <param name="sender">Should be null.</param>
+            <param name="e">The data associated with this event.</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteLog.LogMessage(System.String)">
+            <summary>
+            Log a message to all the registered log event handlers without going
+            through the SQLite library.
+            </summary>
+            <param name="message">The message to be logged.</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteLog.LogMessage(System.Data.SQLite.SQLiteErrorCode,System.String)">
+            <summary>
+            Log a message to all the registered log event handlers without going
+            through the SQLite library.
+            </summary>
+            <param name="errorCode">The SQLite error code.</param>
+            <param name="message">The message to be logged.</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteLog.LogMessage(System.Int32,System.String)">
+            <summary>
+            Log a message to all the registered log event handlers without going
+            through the SQLite library.
+            </summary>
+            <param name="errorCode">The integer error code.</param>
+            <param name="message">The message to be logged.</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteLog.LogMessage(System.Object,System.String)">
+            <summary>
+            Log a message to all the registered log event handlers without going
+            through the SQLite library.
+            </summary>
+            <param name="errorCode">
+            The error code.  The type of this object value should be
+            System.Int32 or SQLiteErrorCode.
+            </param>
+            <param name="message">The message to be logged.</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteLog.InitializeDefaultHandler">
+            <summary>
+            Creates and initializes the default log event handler.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteLog.AddDefaultHandler">
+            <summary>
+            Adds the default log event handler to the list of handlers.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteLog.RemoveDefaultHandler">
+            <summary>
+            Removes the default log event handler from the list of handlers.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteLog.LogCallback(System.IntPtr,System.Int32,System.IntPtr)">
+             <summary>
+             Internal proxy function that calls any registered application log
+             event handlers.
+            
+             WARNING: This method is used more-or-less directly by native code,
+                      do not modify its type signature.
+             </summary>
+             <param name="pUserData">
+             The extra data associated with this message, if any.
+             </param>
+             <param name="errorCode">
+             The error code associated with this message.
+             </param>
+             <param name="pMessage">
+             The message string to be logged.
+             </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteLog.LogEventHandler(System.Object,System.Data.SQLite.LogEventArgs)">
+            <summary>
+            Default logger.  Currently, uses the Trace class (i.e. sends events
+            to the current trace listeners, if any).
+            </summary>
+            <param name="sender">Should be null.</param>
+            <param name="e">The data associated with this event.</param>
+        </member>
+        <member name="E:System.Data.SQLite.SQLiteLog._handlers">
+            <summary>
+            Member variable to store the application log handler to call.
+            </summary>
+        </member>
+        <member name="E:System.Data.SQLite.SQLiteLog.Log">
+            <summary>
+            This event is raised whenever SQLite raises a logging event.
+            Note that this should be set as one of the first things in the
+            application.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteLog.Enabled">
+            <summary>
+            If this property is true, logging is enabled; otherwise, logging is
+            disabled.  When logging is disabled, no logging events will fire.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteMetaDataCollectionNames">
+            <summary>
+            MetaDataCollections specific to SQLite
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteMetaDataCollectionNames.Catalogs">
+            <summary>
+            Returns a list of databases attached to the connection
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteMetaDataCollectionNames.Columns">
+            <summary>
+            Returns column information for the specified table
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteMetaDataCollectionNames.Indexes">
+            <summary>
+            Returns index information for the optionally-specified table
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteMetaDataCollectionNames.IndexColumns">
+            <summary>
+            Returns base columns for the given index
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteMetaDataCollectionNames.Tables">
+            <summary>
+            Returns the tables in the given catalog
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteMetaDataCollectionNames.Views">
+            <summary>
+            Returns user-defined views in the given catalog
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteMetaDataCollectionNames.ViewColumns">
+            <summary>
+            Returns underlying column information on the given view
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteMetaDataCollectionNames.ForeignKeys">
+            <summary>
+            Returns foreign key information for the given catalog
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteMetaDataCollectionNames.Triggers">
+            <summary>
+            Returns the triggers on the database
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteParameter">
+            <summary>
+            SQLite implementation of DbParameter.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteParameter.UnknownDbType">
+            <summary>
+            This value represents an "unknown" <see cref="P:System.Data.SQLite.SQLiteParameter.DbType"/>.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteParameter._command">
+            <summary>
+            The command associated with this parameter.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteParameter._dbType">
+            <summary>
+            The data type of the parameter
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteParameter._rowVersion">
+            <summary>
+            The version information for mapping the parameter
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteParameter._objValue">
+            <summary>
+            The value of the data in the parameter
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteParameter._sourceColumn">
+            <summary>
+            The source column for the parameter
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteParameter._parameterName">
+            <summary>
+            The column name
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteParameter._dataSize">
+            <summary>
+            The data size, unused by SQLite
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteParameter._typeName">
+            <summary>
+            The database type name associated with this parameter, if any.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameter.#ctor(System.Data.IDbCommand)">
+            <summary>
+            Constructor used when creating for use with a specific command.
+            </summary>
+            <param name="command">
+            The command associated with this parameter.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameter.#ctor">
+            <summary>
+            Default constructor
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameter.#ctor(System.String)">
+            <summary>
+            Constructs a named parameter given the specified parameter name
+            </summary>
+            <param name="parameterName">The parameter name</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameter.#ctor(System.String,System.Object)">
+            <summary>
+            Constructs a named parameter given the specified parameter name and initial value
+            </summary>
+            <param name="parameterName">The parameter name</param>
+            <param name="value">The initial value of the parameter</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameter.#ctor(System.String,System.Data.DbType)">
+            <summary>
+            Constructs a named parameter of the specified type
+            </summary>
+            <param name="parameterName">The parameter name</param>
+            <param name="dbType">The datatype of the parameter</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameter.#ctor(System.String,System.Data.DbType,System.String)">
+            <summary>
+            Constructs a named parameter of the specified type and source column reference
+            </summary>
+            <param name="parameterName">The parameter name</param>
+            <param name="dbType">The data type</param>
+            <param name="sourceColumn">The source column</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameter.#ctor(System.String,System.Data.DbType,System.String,System.Data.DataRowVersion)">
+            <summary>
+            Constructs a named parameter of the specified type, source column and row version
+            </summary>
+            <param name="parameterName">The parameter name</param>
+            <param name="dbType">The data type</param>
+            <param name="sourceColumn">The source column</param>
+            <param name="rowVersion">The row version information</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameter.#ctor(System.Data.DbType)">
+            <summary>
+            Constructs an unnamed parameter of the specified data type
+            </summary>
+            <param name="dbType">The datatype of the parameter</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameter.#ctor(System.Data.DbType,System.Object)">
+            <summary>
+            Constructs an unnamed parameter of the specified data type and sets the initial value
+            </summary>
+            <param name="dbType">The datatype of the parameter</param>
+            <param name="value">The initial value of the parameter</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameter.#ctor(System.Data.DbType,System.String)">
+            <summary>
+            Constructs an unnamed parameter of the specified data type and source column
+            </summary>
+            <param name="dbType">The datatype of the parameter</param>
+            <param name="sourceColumn">The source column</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameter.#ctor(System.Data.DbType,System.String,System.Data.DataRowVersion)">
+            <summary>
+            Constructs an unnamed parameter of the specified data type, source column and row version
+            </summary>
+            <param name="dbType">The data type</param>
+            <param name="sourceColumn">The source column</param>
+            <param name="rowVersion">The row version information</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameter.#ctor(System.String,System.Data.DbType,System.Int32)">
+            <summary>
+            Constructs a named parameter of the specified type and size
+            </summary>
+            <param name="parameterName">The parameter name</param>
+            <param name="parameterType">The data type</param>
+            <param name="parameterSize">The size of the parameter</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameter.#ctor(System.String,System.Data.DbType,System.Int32,System.String)">
+            <summary>
+            Constructs a named parameter of the specified type, size and source column
+            </summary>
+            <param name="parameterName">The name of the parameter</param>
+            <param name="parameterType">The data type</param>
+            <param name="parameterSize">The size of the parameter</param>
+            <param name="sourceColumn">The source column</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameter.#ctor(System.String,System.Data.DbType,System.Int32,System.String,System.Data.DataRowVersion)">
+            <summary>
+            Constructs a named parameter of the specified type, size, source column and row version
+            </summary>
+            <param name="parameterName">The name of the parameter</param>
+            <param name="parameterType">The data type</param>
+            <param name="parameterSize">The size of the parameter</param>
+            <param name="sourceColumn">The source column</param>
+            <param name="rowVersion">The row version information</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameter.#ctor(System.String,System.Data.DbType,System.Int32,System.Data.ParameterDirection,System.Boolean,System.Byte,System.Byte,System.String,System.Data.DataRowVersion,System.Object)">
+            <summary>
+            Constructs a named parameter of the specified type, size, source column and row version
+            </summary>
+            <param name="parameterName">The name of the parameter</param>
+            <param name="parameterType">The data type</param>
+            <param name="parameterSize">The size of the parameter</param>
+            <param name="direction">Only input parameters are supported in SQLite</param>
+            <param name="isNullable">Ignored</param>
+            <param name="precision">Ignored</param>
+            <param name="scale">Ignored</param>
+            <param name="sourceColumn">The source column</param>
+            <param name="rowVersion">The row version information</param>
+            <param name="value">The initial value to assign the parameter</param>   
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameter.#ctor(System.String,System.Data.DbType,System.Int32,System.Data.ParameterDirection,System.Byte,System.Byte,System.String,System.Data.DataRowVersion,System.Boolean,System.Object)">
+            <summary>
+            Constructs a named parameter, yet another flavor
+            </summary>
+            <param name="parameterName">The name of the parameter</param>
+            <param name="parameterType">The data type</param>
+            <param name="parameterSize">The size of the parameter</param>
+            <param name="direction">Only input parameters are supported in SQLite</param>
+            <param name="precision">Ignored</param>
+            <param name="scale">Ignored</param>
+            <param name="sourceColumn">The source column</param>
+            <param name="rowVersion">The row version information</param>
+            <param name="sourceColumnNullMapping">Whether or not this parameter is for comparing NULL's</param>
+            <param name="value">The intial value to assign the parameter</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameter.#ctor(System.Data.DbType,System.Int32)">
+            <summary>
+            Constructs an unnamed parameter of the specified type and size
+            </summary>
+            <param name="parameterType">The data type</param>
+            <param name="parameterSize">The size of the parameter</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameter.#ctor(System.Data.DbType,System.Int32,System.String)">
+            <summary>
+            Constructs an unnamed parameter of the specified type, size, and source column
+            </summary>
+            <param name="parameterType">The data type</param>
+            <param name="parameterSize">The size of the parameter</param>
+            <param name="sourceColumn">The source column</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameter.#ctor(System.Data.DbType,System.Int32,System.String,System.Data.DataRowVersion)">
+            <summary>
+            Constructs an unnamed parameter of the specified type, size, source column and row version
+            </summary>
+            <param name="parameterType">The data type</param>
+            <param name="parameterSize">The size of the parameter</param>
+            <param name="sourceColumn">The source column</param>
+            <param name="rowVersion">The row version information</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameter.ResetDbType">
+            <summary>
+            Resets the DbType of the parameter so it can be inferred from the value
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameter.Clone">
+            <summary>
+            Clones a parameter
+            </summary>
+            <returns>A new, unassociated SQLiteParameter</returns>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteParameter.Command">
+            <summary>
+            The command associated with this parameter.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteParameter.IsNullable">
+            <summary>
+            Whether or not the parameter can contain a null value
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteParameter.DbType">
+            <summary>
+            Returns the datatype of the parameter
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteParameter.Direction">
+            <summary>
+            Supports only input parameters
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteParameter.ParameterName">
+            <summary>
+            Returns the parameter name
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteParameter.Size">
+            <summary>
+            Returns the size of the parameter
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteParameter.SourceColumn">
+            <summary>
+            Gets/sets the source column
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteParameter.SourceColumnNullMapping">
+            <summary>
+            Used by DbCommandBuilder to determine the mapping for nullable fields
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteParameter.SourceVersion">
+            <summary>
+            Gets and sets the row version
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteParameter.Value">
+            <summary>
+            Gets and sets the parameter value.  If no datatype was specified, the datatype will assume the type from the value given.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteParameter.TypeName">
+            <summary>
+            The database type name associated with this parameter, if any.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteParameterCollection">
+            <summary>
+            SQLite implementation of DbParameterCollection.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteParameterCollection._command">
+            <summary>
+            The underlying command to which this collection belongs
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteParameterCollection._parameterList">
+            <summary>
+            The internal array of parameters in this collection
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteParameterCollection._unboundFlag">
+            <summary>
+            Determines whether or not all parameters have been bound to their statement(s)
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.#ctor(System.Data.SQLite.SQLiteCommand)">
+            <summary>
+            Initializes the collection
+            </summary>
+            <param name="cmd">The command to which the collection belongs</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.GetEnumerator">
+            <summary>
+            Retrieves an enumerator for the collection
+            </summary>
+            <returns>An enumerator for the underlying array</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.Add(System.String,System.Data.DbType,System.Int32,System.String)">
+            <summary>
+            Adds a parameter to the collection
+            </summary>
+            <param name="parameterName">The parameter name</param>
+            <param name="parameterType">The data type</param>
+            <param name="parameterSize">The size of the value</param>
+            <param name="sourceColumn">The source column</param>
+            <returns>A SQLiteParameter object</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.Add(System.String,System.Data.DbType,System.Int32)">
+            <summary>
+            Adds a parameter to the collection
+            </summary>
+            <param name="parameterName">The parameter name</param>
+            <param name="parameterType">The data type</param>
+            <param name="parameterSize">The size of the value</param>
+            <returns>A SQLiteParameter object</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.Add(System.String,System.Data.DbType)">
+            <summary>
+            Adds a parameter to the collection
+            </summary>
+            <param name="parameterName">The parameter name</param>
+            <param name="parameterType">The data type</param>
+            <returns>A SQLiteParameter object</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.Add(System.Data.SQLite.SQLiteParameter)">
+            <summary>
+            Adds a parameter to the collection
+            </summary>
+            <param name="parameter">The parameter to add</param>
+            <returns>A zero-based index of where the parameter is located in the array</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.Add(System.Object)">
+            <summary>
+            Adds a parameter to the collection
+            </summary>
+            <param name="value">The parameter to add</param>
+            <returns>A zero-based index of where the parameter is located in the array</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.AddWithValue(System.String,System.Object)">
+            <summary>
+            Adds a named/unnamed parameter and its value to the parameter collection.
+            </summary>
+            <param name="parameterName">Name of the parameter, or null to indicate an unnamed parameter</param>
+            <param name="value">The initial value of the parameter</param>
+            <returns>Returns the SQLiteParameter object created during the call.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.AddRange(System.Data.SQLite.SQLiteParameter[])">
+            <summary>
+            Adds an array of parameters to the collection
+            </summary>
+            <param name="values">The array of parameters to add</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.AddRange(System.Array)">
+            <summary>
+            Adds an array of parameters to the collection
+            </summary>
+            <param name="values">The array of parameters to add</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.Clear">
+            <summary>
+            Clears the array and resets the collection
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.Contains(System.String)">
+            <summary>
+            Determines if the named parameter exists in the collection
+            </summary>
+            <param name="parameterName">The name of the parameter to check</param>
+            <returns>True if the parameter is in the collection</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.Contains(System.Object)">
+            <summary>
+            Determines if the parameter exists in the collection
+            </summary>
+            <param name="value">The SQLiteParameter to check</param>
+            <returns>True if the parameter is in the collection</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.CopyTo(System.Array,System.Int32)">
+            <summary>
+            Not implemented
+            </summary>
+            <param name="array"></param>
+            <param name="index"></param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.GetParameter(System.String)">
+            <summary>
+            Retrieve a parameter by name from the collection
+            </summary>
+            <param name="parameterName">The name of the parameter to fetch</param>
+            <returns>A DbParameter object</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.GetParameter(System.Int32)">
+            <summary>
+            Retrieves a parameter by its index in the collection
+            </summary>
+            <param name="index">The index of the parameter to retrieve</param>
+            <returns>A DbParameter object</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.IndexOf(System.String)">
+            <summary>
+            Returns the index of a parameter given its name
+            </summary>
+            <param name="parameterName">The name of the parameter to find</param>
+            <returns>-1 if not found, otherwise a zero-based index of the parameter</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.IndexOf(System.Object)">
+            <summary>
+            Returns the index of a parameter
+            </summary>
+            <param name="value">The parameter to find</param>
+            <returns>-1 if not found, otherwise a zero-based index of the parameter</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.Insert(System.Int32,System.Object)">
+            <summary>
+            Inserts a parameter into the array at the specified location
+            </summary>
+            <param name="index">The zero-based index to insert the parameter at</param>
+            <param name="value">The parameter to insert</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.Remove(System.Object)">
+            <summary>
+            Removes a parameter from the collection
+            </summary>
+            <param name="value">The parameter to remove</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.RemoveAt(System.String)">
+            <summary>
+            Removes a parameter from the collection given its name
+            </summary>
+            <param name="parameterName">The name of the parameter to remove</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.RemoveAt(System.Int32)">
+            <summary>
+            Removes a parameter from the collection given its index
+            </summary>
+            <param name="index">The zero-based parameter index to remove</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.SetParameter(System.String,System.Data.Common.DbParameter)">
+            <summary>
+            Re-assign the named parameter to a new parameter object
+            </summary>
+            <param name="parameterName">The name of the parameter to replace</param>
+            <param name="value">The new parameter</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.SetParameter(System.Int32,System.Data.Common.DbParameter)">
+            <summary>
+            Re-assign a parameter at the specified index
+            </summary>
+            <param name="index">The zero-based index of the parameter to replace</param>
+            <param name="value">The new parameter</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.Unbind">
+            <summary>
+            Un-binds all parameters from their statements
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteParameterCollection.MapParameters(System.Data.SQLite.SQLiteStatement)">
+            <summary>
+            This function attempts to map all parameters in the collection to all statements in a Command.
+            Since named parameters may span multiple statements, this function makes sure all statements are bound
+            to the same named parameter.  Unnamed parameters are bound in sequence.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteParameterCollection.IsSynchronized">
+            <summary>
+            Returns false
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteParameterCollection.IsFixedSize">
+            <summary>
+            Returns false
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteParameterCollection.IsReadOnly">
+            <summary>
+            Returns false
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteParameterCollection.SyncRoot">
+            <summary>
+            Returns null
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteParameterCollection.Count">
+            <summary>
+            Returns a count of parameters in the collection
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteParameterCollection.Item(System.String)">
+            <summary>
+            Overloaded to specialize the return value of the default indexer
+            </summary>
+            <param name="parameterName">Name of the parameter to get/set</param>
+            <returns>The specified named SQLite parameter</returns>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteParameterCollection.Item(System.Int32)">
+            <summary>
+            Overloaded to specialize the return value of the default indexer
+            </summary>
+            <param name="index">The index of the parameter to get/set</param>
+            <returns>The specified SQLite parameter</returns>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteStatement">
+            <summary>
+            Represents a single SQL statement in SQLite.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStatement._sql">
+            <summary>
+            The underlying SQLite object this statement is bound to
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStatement._sqlStatement">
+            <summary>
+            The command text of this SQL statement
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStatement._sqlite_stmt">
+            <summary>
+            The actual statement pointer
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStatement._unnamedParameters">
+            <summary>
+            An index from which unnamed parameters begin
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStatement._paramNames">
+            <summary>
+            Names of the parameters as SQLite understands them to be
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStatement._paramValues">
+            <summary>
+            Parameters for this statement
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStatement._command">
+            <summary>
+            Command this statement belongs to (if any)
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStatement._flags">
+            <summary>
+            The flags associated with the parent connection object.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStatement.#ctor(System.Data.SQLite.SQLiteBase,System.Data.SQLite.SQLiteConnectionFlags,System.Data.SQLite.SQLiteStatementHandle,System.String,System.Data.SQLite.SQLiteStatement)">
+            <summary>
+            Initializes the statement and attempts to get all information about parameters in the statement
+            </summary>
+            <param name="sqlbase">The base SQLite object</param>
+            <param name="flags">The flags associated with the parent connection object</param>
+            <param name="stmt">The statement</param>
+            <param name="strCommand">The command text for this statement</param>
+            <param name="previous">The previous command in a multi-statement command</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStatement.Dispose">
+            <summary>
+            Disposes and finalizes the statement
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStatement.TryGetChanges(System.Int32@,System.Boolean@)">
+            <summary>
+            If the underlying database connection is open, fetches the number of changed rows
+            resulting from the most recent query; otherwise, does nothing.
+            </summary>
+            <param name="changes">
+            The number of changes when true is returned.
+            Undefined if false is returned.
+            </param>
+            <param name="readOnly">
+            The read-only flag when true is returned.
+            Undefined if false is returned.
+            </param>
+            <returns>Non-zero if the number of changed rows was fetched.</returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStatement.MapParameter(System.String,System.Data.SQLite.SQLiteParameter)">
+            <summary>
+            Called by SQLiteParameterCollection, this function determines if the specified parameter name belongs to
+            this statement, and if so, keeps a reference to the parameter so it can be bound later.
+            </summary>
+            <param name="s">The parameter name to map</param>
+            <param name="p">The parameter to assign it</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStatement.BindParameters">
+            <summary>
+             Bind all parameters, making sure the caller didn't miss any
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStatement.GetConnection(System.Data.SQLite.SQLiteStatement)">
+            <summary>
+            This method attempts to query the database connection associated with
+            the statement in use.  If the underlying command or connection is
+            unavailable, a null value will be returned.
+            </summary>
+            <returns>
+            The connection object -OR- null if it is unavailable.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStatement.InvokeBindValueCallback(System.Int32,System.Data.SQLite.SQLiteParameter,System.Boolean@)">
+            <summary>
+            Invokes the parameter binding callback configured for the database
+            type name associated with the specified column.  If no parameter
+            binding callback is available for the database type name, do
+            nothing.
+            </summary>
+            <param name="index">
+            The index of the column being read.
+            </param>
+            <param name="parameter">
+            The <see cref="T:System.Data.SQLite.SQLiteParameter"/> instance being bound to the
+            command.
+            </param>
+            <param name="complete">
+            Non-zero if the default handling for the parameter binding call
+            should be skipped (i.e. the parameter should not be bound at all).
+            Great care should be used when setting this to non-zero.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStatement.BindParameter(System.Int32,System.Data.SQLite.SQLiteParameter)">
+            <summary>
+            Perform the bind operation for an individual parameter
+            </summary>
+            <param name="index">The index of the parameter to bind</param>
+            <param name="param">The parameter we're binding</param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteTransaction">
+            <summary>
+            SQLite implementation of DbTransaction that does not support nested transactions.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteTransactionBase">
+            <summary>
+            Base class used by to implement DbTransaction for SQLite.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteTransactionBase._cnn">
+            <summary>
+            The connection to which this transaction is bound.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteTransactionBase._version">
+            <summary>
+            Matches the version of the connection.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteTransactionBase._level">
+            <summary>
+            The isolation level for this transaction.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteTransactionBase.#ctor(System.Data.SQLite.SQLiteConnection,System.Boolean)">
+            <summary>
+            Constructs the transaction object, binding it to the supplied connection
+            </summary>
+            <param name="connection">The connection to open a transaction on</param>
+            <param name="deferredLock">TRUE to defer the writelock, or FALSE to lock immediately</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteTransactionBase.Dispose(System.Boolean)">
+            <summary>
+            Disposes the transaction.  If it is currently active, any changes are rolled back.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteTransactionBase.Rollback">
+            <summary>
+            Rolls back the active transaction.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteTransactionBase.Begin(System.Boolean)">
+            <summary>
+            Attempts to start a transaction.  An exception will be thrown if the transaction cannot
+            be started for any reason.
+            </summary>
+            <param name="deferredLock">TRUE to defer the writelock, or FALSE to lock immediately</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteTransactionBase.IssueRollback(System.Boolean)">
+            <summary>
+            Issue a ROLLBACK command against the database connection,
+            optionally re-throwing any caught exception.
+            </summary>
+            <param name="throwError">
+            Non-zero to re-throw caught exceptions.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteTransactionBase.IsValid(System.Boolean)">
+            <summary>
+            Checks the state of this transaction, optionally throwing an exception if a state
+            inconsistency is found.
+            </summary>
+            <param name="throwError">
+            Non-zero to throw an exception if a state inconsistency is found.
+            </param>
+            <returns>
+            Non-zero if this transaction is valid; otherwise, false.
+            </returns>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteTransactionBase.IsolationLevel">
+            <summary>
+            Gets the isolation level of the transaction.  SQLite only supports Serializable transactions.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteTransactionBase.Connection">
+            <summary>
+            Returns the underlying connection to which this transaction applies.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteTransactionBase.DbConnection">
+            <summary>
+            Forwards to the local Connection property
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteTransaction.#ctor(System.Data.SQLite.SQLiteConnection,System.Boolean)">
+            <summary>
+            Constructs the transaction object, binding it to the supplied connection
+            </summary>
+            <param name="connection">The connection to open a transaction on</param>
+            <param name="deferredLock">TRUE to defer the writelock, or FALSE to lock immediately</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteTransaction.Dispose(System.Boolean)">
+            <summary>
+            Disposes the transaction.  If it is currently active, any changes are rolled back.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteTransaction.Commit">
+            <summary>
+            Commits the current transaction.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteTransaction.Begin(System.Boolean)">
+            <summary>
+            Attempts to start a transaction.  An exception will be thrown if the transaction cannot
+            be started for any reason.
+            </summary>
+            <param name="deferredLock">TRUE to defer the writelock, or FALSE to lock immediately</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteTransaction.IssueRollback(System.Boolean)">
+            <summary>
+            Issue a ROLLBACK command against the database connection,
+            optionally re-throwing any caught exception.
+            </summary>
+            <param name="throwError">
+            Non-zero to re-throw caught exceptions.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteTransaction2">
+            <summary>
+            SQLite implementation of DbTransaction that does support nested transactions.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteTransaction2._beginLevel">
+            <summary>
+            The original transaction level for the associated connection
+            when this transaction was created (i.e. begun).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteTransaction2._savePointName">
+            <summary>
+            The SAVEPOINT name for this transaction, if any.  This will
+            only be non-null if this transaction is a nested one.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteTransaction2.#ctor(System.Data.SQLite.SQLiteConnection,System.Boolean)">
+            <summary>
+            Constructs the transaction object, binding it to the supplied connection
+            </summary>
+            <param name="connection">The connection to open a transaction on</param>
+            <param name="deferredLock">TRUE to defer the writelock, or FALSE to lock immediately</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteTransaction2.Dispose(System.Boolean)">
+            <summary>
+            Disposes the transaction.  If it is currently active, any changes are rolled back.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteTransaction2.Commit">
+            <summary>
+            Commits the current transaction.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteTransaction2.Begin(System.Boolean)">
+            <summary>
+            Attempts to start a transaction.  An exception will be thrown if the transaction cannot
+            be started for any reason.
+            </summary>
+            <param name="deferredLock">TRUE to defer the writelock, or FALSE to lock immediately</param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteTransaction2.IssueRollback(System.Boolean)">
+            <summary>
+            Issue a ROLLBACK command against the database connection,
+            optionally re-throwing any caught exception.
+            </summary>
+            <param name="throwError">
+            Non-zero to re-throw caught exceptions.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteTransaction2.GetSavePointName">
+            <summary>
+            Constructs the name of a new savepoint for this transaction.  It
+            should only be called from the constructor of this class.
+            </summary>
+            <returns>
+            The name of the new savepoint -OR- null if it cannot be constructed.
+            </returns>
+        </member>
+        <member name="T:System.Data.SQLite.HelperMethods">
+            <summary>
+            This static class provides some methods that are shared between the
+            native library pre-loader and other classes.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.HelperMethods.staticSyncRoot">
+            <summary>
+            This lock is used to protect the static <see cref="F:System.Data.SQLite.HelperMethods.isMono"/> and
+            <see cref="F:System.Data.SQLite.HelperMethods.isDotNetCore"/> fields.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.HelperMethods.MonoRuntimeType">
+            <summary>
+            This type is only present when running on Mono.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.HelperMethods.DotNetCoreLibType">
+            <summary>
+            This type is only present when running on .NET Core.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.HelperMethods.isMono">
+            <summary>
+            Keeps track of whether we are running on Mono.  Initially null, it is
+            set by the <see cref="M:System.Data.SQLite.HelperMethods.IsMono"/> method on its first call.  Later, it
+            is returned verbatim by the <see cref="M:System.Data.SQLite.HelperMethods.IsMono"/> method.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.HelperMethods.isDotNetCore">
+            <summary>
+            Keeps track of whether we are running on .NET Core.  Initially null,
+            it is set by the <see cref="M:System.Data.SQLite.HelperMethods.IsDotNetCore"/> method on its first
+            call.  Later, it is returned verbatim by the
+            <see cref="M:System.Data.SQLite.HelperMethods.IsDotNetCore"/> method.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.HelperMethods.debuggerBreak">
+            <summary>
+            Keeps track of whether we successfully invoked the
+            <see cref="M:System.Diagnostics.Debugger.Break"/> method.  Initially null, it is set by
+            the <see cref="M:System.Data.SQLite.HelperMethods.MaybeBreakIntoDebugger"/> method on its first call.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.HelperMethods.GetProcessId">
+            <summary>
+            Determines the ID of the current process.  Only used for debugging.
+            </summary>
+            <returns>
+            The ID of the current process -OR- zero if it cannot be determined.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.HelperMethods.IsMono">
+            <summary>
+            Determines whether or not this assembly is running on Mono.
+            </summary>
+            <returns>
+            Non-zero if this assembly is running on Mono.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.HelperMethods.IsDotNetCore">
+            <summary>
+            Determines whether or not this assembly is running on .NET Core.
+            </summary>
+            <returns>
+            Non-zero if this assembly is running on .NET Core.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.HelperMethods.ResetBreakIntoDebugger">
+            <summary>
+            Resets the cached value for the "PreLoadSQLite_BreakIntoDebugger"
+            configuration setting.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.HelperMethods.MaybeBreakIntoDebugger">
+            <summary>
+            If the "PreLoadSQLite_BreakIntoDebugger" configuration setting is
+            present (e.g. via the environment), give the interactive user an
+            opportunity to attach a debugger to the current process; otherwise,
+            do nothing.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.HelperMethods.GetThreadId">
+            <summary>
+            Determines the ID of the current thread.  Only used for debugging.
+            </summary>
+            <returns>
+            The ID of the current thread -OR- zero if it cannot be determined.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.HelperMethods.HasFlags(System.Data.SQLite.SQLiteConnectionFlags,System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Determines if the specified flags are present within the flags
+            associated with the parent connection object.
+            </summary>
+            <param name="flags">
+            The flags associated with the parent connection object.
+            </param>
+            <param name="hasFlags">
+            The flags to check for.
+            </param>
+            <returns>
+            Non-zero if the specified flag or flags were present; otherwise,
+            zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.HelperMethods.LogPrepare(System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Determines if preparing a query should be logged.
+            </summary>
+            <param name="flags">
+            The flags associated with the parent connection object.
+            </param>
+            <returns>
+            Non-zero if the query preparation should be logged; otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.HelperMethods.LogPreBind(System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Determines if pre-parameter binding should be logged.
+            </summary>
+            <param name="flags">
+            The flags associated with the parent connection object.
+            </param>
+            <returns>
+            Non-zero if the pre-parameter binding should be logged; otherwise,
+            zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.HelperMethods.LogBind(System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Determines if parameter binding should be logged.
+            </summary>
+            <param name="flags">
+            The flags associated with the parent connection object.
+            </param>
+            <returns>
+            Non-zero if the parameter binding should be logged; otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.HelperMethods.LogCallbackExceptions(System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Determines if an exception in a native callback should be logged.
+            </summary>
+            <param name="flags">
+            The flags associated with the parent connection object.
+            </param>
+            <returns>
+            Non-zero if the exception should be logged; otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.HelperMethods.LogBackup(System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Determines if backup API errors should be logged.
+            </summary>
+            <param name="flags">
+            The flags associated with the parent connection object.
+            </param>
+            <returns>
+            Non-zero if the backup API error should be logged; otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.HelperMethods.NoLogModule(System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Determines if logging for the <see cref="T:System.Data.SQLite.SQLiteModule"/> class is
+            disabled.
+            </summary>
+            <param name="flags">
+            The flags associated with the parent connection object.
+            </param>
+            <returns>
+            Non-zero if logging for the <see cref="T:System.Data.SQLite.SQLiteModule"/> class is
+            disabled; otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.HelperMethods.LogModuleError(System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Determines if <see cref="T:System.Data.SQLite.SQLiteModule"/> errors should be logged.
+            </summary>
+            <param name="flags">
+            The flags associated with the parent connection object.
+            </param>
+            <returns>
+            Non-zero if the <see cref="T:System.Data.SQLite.SQLiteModule"/> error should be logged;
+            otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.HelperMethods.LogModuleException(System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Determines if <see cref="T:System.Data.SQLite.SQLiteModule"/> exceptions should be
+            logged.
+            </summary>
+            <param name="flags">
+            The flags associated with the parent connection object.
+            </param>
+            <returns>
+            Non-zero if the <see cref="T:System.Data.SQLite.SQLiteModule"/> exception should be
+            logged; otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.HelperMethods.IsWindows">
+            <summary>
+            Determines if the current process is running on one of the Windows
+            [sub-]platforms.
+            </summary>
+            <returns>
+            Non-zero when running on Windows; otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.HelperMethods.StringFormat(System.IFormatProvider,System.String,System.Object[])">
+            <summary>
+            This is a wrapper around the
+            <see cref="M:System.String.Format(System.IFormatProvider,System.String,System.Object[])"/> method.
+            On Mono, it has to call the method overload without the
+            <see cref="T:System.IFormatProvider"/> parameter, due to a bug in Mono.
+            </summary>
+            <param name="provider">
+            This is used for culture-specific formatting.
+            </param>
+            <param name="format">
+            The format string.
+            </param>
+            <param name="args">
+            An array the objects to format.
+            </param>
+            <returns>
+            The resulting string.
+            </returns>
+        </member>
+        <member name="T:System.Data.SQLite.NativeLibraryHelper">
+            <summary>
+            This static class provides a thin wrapper around the native library
+            loading features of the underlying platform.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.NativeLibraryHelper.LoadLibraryWin32(System.String)">
+            <summary>
+            Attempts to load the specified native library file using the Win32
+            API.
+            </summary>
+            <param name="fileName">
+            The file name of the native library to load.
+            </param>
+            <returns>
+            The native module handle upon success -OR- IntPtr.Zero on failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.NativeLibraryHelper.GetMachineWin32">
+            <summary>
+            Attempts to determine the machine name of the current process using
+            the Win32 API.
+            </summary>
+            <returns>
+            The machine name for the current process -OR- null on failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.NativeLibraryHelper.LoadLibraryPosix(System.String)">
+            <summary>
+            Attempts to load the specified native library file using the POSIX
+            API.
+            </summary>
+            <param name="fileName">
+            The file name of the native library to load.
+            </param>
+            <returns>
+            The native module handle upon success -OR- IntPtr.Zero on failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.NativeLibraryHelper.GetMachinePosix">
+            <summary>
+            Attempts to determine the machine name of the current process using
+            the POSIX API.
+            </summary>
+            <returns>
+            The machine name for the current process -OR- null on failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.NativeLibraryHelper.LoadLibrary(System.String)">
+            <summary>
+            Attempts to load the specified native library file.
+            </summary>
+            <param name="fileName">
+            The file name of the native library to load.
+            </param>
+            <returns>
+            The native module handle upon success -OR- IntPtr.Zero on failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.NativeLibraryHelper.GetMachine">
+            <summary>
+            Attempts to determine the machine name of the current process.
+            </summary>
+            <returns>
+            The machine name for the current process -OR- null on failure.
+            </returns>
+        </member>
+        <member name="T:System.Data.SQLite.NativeLibraryHelper.LoadLibraryCallback">
+            <summary>
+            This delegate is used to wrap the concept of loading a native
+            library, based on a file name, and returning the loaded module
+            handle.
+            </summary>
+            <param name="fileName">
+            The file name of the native library to load.
+            </param>
+            <returns>
+            The native module handle upon success -OR- IntPtr.Zero on failure.
+            </returns>
+        </member>
+        <member name="T:System.Data.SQLite.NativeLibraryHelper.GetMachineCallback">
+            <summary>
+            This delegate is used to wrap the concept of querying the machine
+            name of the current process.
+            </summary>
+            <returns>
+            The machine name for the current process -OR- null on failure.
+            </returns>
+        </member>
+        <member name="T:System.Data.SQLite.UnsafeNativeMethodsPosix">
+            <summary>
+            This class declares P/Invoke methods to call native POSIX APIs.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethodsPosix.RTLD_LAZY">
+            <summary>
+            For use with dlopen(), bind function calls lazily.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethodsPosix.RTLD_NOW">
+            <summary>
+            For use with dlopen(), bind function calls immediately.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethodsPosix.RTLD_GLOBAL">
+            <summary>
+            For use with dlopen(), make symbols globally available.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethodsPosix.RTLD_LOCAL">
+            <summary>
+            For use with dlopen(), opposite of RTLD_GLOBAL, and the default.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethodsPosix.RTLD_DEFAULT">
+            <summary>
+            For use with dlopen(), the defaults used by this class.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethodsPosix.uname(System.Data.SQLite.UnsafeNativeMethodsPosix.utsname_interop@)">
+            <summary>
+            This is the P/Invoke method that wraps the native Unix uname
+            function.  See the POSIX documentation for full details on what it
+            does.
+            </summary>
+            <param name="name">
+            Structure containing a preallocated byte buffer to fill with the
+            requested information.
+            </param>
+            <returns>
+            Zero for success and less than zero upon failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethodsPosix.dlopen(System.String,System.Int32)">
+            <summary>
+            This is the P/Invoke method that wraps the native Unix dlopen
+            function.  See the POSIX documentation for full details on what it
+            does.
+            </summary>
+            <param name="fileName">
+            The name of the executable library.
+            </param>
+            <param name="mode">
+            This must be a combination of the individual bit flags RTLD_LAZY,
+            RTLD_NOW, RTLD_GLOBAL, and/or RTLD_LOCAL.
+            </param>
+            <returns>
+            The native module handle upon success -OR- IntPtr.Zero on failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethodsPosix.dlclose(System.IntPtr)">
+            <summary>
+            This is the P/Invoke method that wraps the native Unix dlclose
+            function.  See the POSIX documentation for full details on what it
+            does.
+            </summary>
+            <param name="module">
+            The handle to the loaded native library.
+            </param>
+            <returns>
+            Zero upon success -OR- non-zero on failure.
+            </returns>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethodsPosix.utsNameSeparators">
+            <summary>
+            These are the characters used to separate the string fields within
+            the raw buffer returned by the <see cref="M:System.Data.SQLite.UnsafeNativeMethodsPosix.uname(System.Data.SQLite.UnsafeNativeMethodsPosix.utsname_interop@)"/> P/Invoke method.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethodsPosix.GetOsVersionInfo(System.Data.SQLite.UnsafeNativeMethodsPosix.utsname@)">
+            <summary>
+            This method is a wrapper around the <see cref="M:System.Data.SQLite.UnsafeNativeMethodsPosix.uname(System.Data.SQLite.UnsafeNativeMethodsPosix.utsname_interop@)"/> P/Invoke
+            method that extracts and returns the human readable strings from
+            the raw buffer.
+            </summary>
+            <param name="utsName">
+            This structure, which contains strings, will be filled based on the
+            data placed in the raw buffer returned by the <see cref="M:System.Data.SQLite.UnsafeNativeMethodsPosix.uname(System.Data.SQLite.UnsafeNativeMethodsPosix.utsname_interop@)"/>
+            P/Invoke method.
+            </param>
+            <returns>
+            Non-zero upon success; otherwise, zero.
+            </returns>
+        </member>
+        <member name="T:System.Data.SQLite.UnsafeNativeMethodsPosix.utsname">
+            <summary>
+            This structure is used when running on POSIX operating systems
+            to store information about the current machine, including the
+            human readable name of the operating system as well as that of
+            the underlying hardware.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.UnsafeNativeMethodsPosix.utsname_interop">
+            <summary>
+            This structure is passed directly to the P/Invoke method to
+            obtain the information about the current machine, including
+            the human readable name of the operating system as well as
+            that of the underlying hardware.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.UnsafeNativeMethodsWin32">
+            <summary>
+            This class declares P/Invoke methods to call native Win32 APIs.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethodsWin32.LoadLibrary(System.String)">
+            <summary>
+            This is the P/Invoke method that wraps the native Win32 LoadLibrary
+            function.  See the MSDN documentation for full details on what it
+            does.
+            </summary>
+            <param name="fileName">
+            The name of the executable library.
+            </param>
+            <returns>
+            The native module handle upon success -OR- IntPtr.Zero on failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethodsWin32.GetSystemInfo(System.Data.SQLite.UnsafeNativeMethodsWin32.SYSTEM_INFO@)">
+            <summary>
+            This is the P/Invoke method that wraps the native Win32 GetSystemInfo
+            function.  See the MSDN documentation for full details on what it
+            does.
+            </summary>
+            <param name="systemInfo">
+            The system information structure to be filled in by the function.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.UnsafeNativeMethodsWin32.ProcessorArchitecture">
+            <summary>
+            This enumeration contains the possible values for the processor
+            architecture field of the system information structure.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.UnsafeNativeMethodsWin32.SYSTEM_INFO">
+            <summary>
+            This structure contains information about the current computer. This
+            includes the processor type, page size, memory addresses, etc.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.UnsafeNativeMethods">
+            <summary>
+            This class declares P/Invoke methods to call native SQLite APIs.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethods.DllFileExtension">
+            <summary>
+            The file extension used for dynamic link libraries.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethods.ConfigFileExtension">
+            <summary>
+            The file extension used for the XML configuration file.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethods.XmlConfigFileName">
+            <summary>
+            This is the name of the XML configuration file specific to the
+            System.Data.SQLite assembly.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethods.XmlConfigDirectoryToken">
+            <summary>
+            This is the XML configuratrion file token that will be replaced with
+            the qualified path to the directory containing the XML configuration
+            file.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethods.AssemblyDirectoryToken">
+            <summary>
+            This is the environment variable token that will be replaced with
+            the qualified path to the directory containing this assembly.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethods.TargetFrameworkToken">
+            <summary>
+            This is the environment variable token that will be replaced with an
+            abbreviation of the target framework attribute value associated with
+            this assembly.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethods.staticSyncRoot">
+            <summary>
+            This lock is used to protect the static _SQLiteNativeModuleFileName,
+            _SQLiteNativeModuleHandle, and processorArchitecturePlatforms fields.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethods.targetFrameworkAbbreviations">
+            <summary>
+            This dictionary stores the mappings between target framework names
+            and their associated (NuGet) abbreviations.  These mappings are only
+            used by the <see cref="M:System.Data.SQLite.UnsafeNativeMethods.AbbreviateTargetFramework(System.String)"/> method.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethods.processorArchitecturePlatforms">
+            <summary>
+            This dictionary stores the mappings between processor architecture
+            names and platform names.  These mappings are now used for two
+            purposes.  First, they are used to determine if the assembly code
+            base should be used instead of the location, based upon whether one
+            or more of the named sub-directories exist within the assembly code
+            base.  Second, they are used to assist in loading the appropriate
+            SQLite interop assembly into the current process.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethods.cachedAssemblyDirectory">
+            <summary>
+            This is the cached return value from the
+            <see cref="M:System.Data.SQLite.UnsafeNativeMethods.GetAssemblyDirectory"/> method -OR- null if that method
+            has never returned a valid value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethods.noAssemblyDirectory">
+            <summary>
+            When this field is non-zero, it indicates the
+            <see cref="M:System.Data.SQLite.UnsafeNativeMethods.GetAssemblyDirectory"/> method was not able to locate a
+            suitable assembly directory.  The
+            <see cref="M:System.Data.SQLite.UnsafeNativeMethods.GetCachedAssemblyDirectory"/> method will check this
+            field and skips calls into the <see cref="M:System.Data.SQLite.UnsafeNativeMethods.GetAssemblyDirectory"/>
+            method whenever it is non-zero.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethods.cachedXmlConfigFileName">
+            <summary>
+            This is the cached return value from the
+            <see cref="M:System.Data.SQLite.UnsafeNativeMethods.GetXmlConfigFileName"/> method -OR- null if that method
+            has never returned a valid value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethods.noXmlConfigFileName">
+            <summary>
+            When this field is non-zero, it indicates the
+            <see cref="M:System.Data.SQLite.UnsafeNativeMethods.GetXmlConfigFileName"/> method was not able to locate a
+            suitable XML configuration file name.  The
+            <see cref="M:System.Data.SQLite.UnsafeNativeMethods.GetCachedXmlConfigFileName"/> method will check this
+            field and skips calls into the <see cref="M:System.Data.SQLite.UnsafeNativeMethods.GetXmlConfigFileName"/>
+            method whenever it is non-zero.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.#cctor">
+            <summary>
+            For now, this method simply calls the Initialize method.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.Initialize">
+            <summary>
+            Attempts to initialize this class by pre-loading the native SQLite
+            library for the processor architecture of the current process.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.MaybeCombinePath(System.String,System.String)">
+            <summary>
+            Combines two path strings.
+            </summary>
+            <param name="path1">
+            The first path -OR- null.
+            </param>
+            <param name="path2">
+            The second path -OR- null.
+            </param>
+            <returns>
+            The combined path string -OR- null if both of the original path
+            strings are null.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.ResetCachedXmlConfigFileName">
+            <summary>
+            Resets the cached XML configuration file name value, thus forcing the
+            next call to <see cref="M:System.Data.SQLite.UnsafeNativeMethods.GetCachedXmlConfigFileName"/> method to rely
+            upon the <see cref="M:System.Data.SQLite.UnsafeNativeMethods.GetXmlConfigFileName"/> method to fetch the
+            XML configuration file name.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.GetCachedXmlConfigFileName">
+            <summary>
+            Queries and returns the cached XML configuration file name for the
+            assembly containing the managed System.Data.SQLite components, if
+            available.  If the cached XML configuration file name value is not
+            available, the <see cref="M:System.Data.SQLite.UnsafeNativeMethods.GetXmlConfigFileName"/> method will
+            be used to obtain the XML configuration file name.
+            </summary>
+            <returns>
+            The XML configuration file name -OR- null if it cannot be determined
+            or does not exist.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.GetXmlConfigFileName">
+            <summary>
+            Queries and returns the XML configuration file name for the assembly
+            containing the managed System.Data.SQLite components.
+            </summary>
+            <returns>
+            The XML configuration file name -OR- null if it cannot be determined
+            or does not exist.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.ReplaceXmlConfigFileTokens(System.String,System.String)">
+            <summary>
+            If necessary, replaces all supported XML configuration file tokens
+            with their associated values.
+            </summary>
+            <param name="fileName">
+            The name of the XML configuration file being read.
+            </param>
+            <param name="value">
+            A setting value read from the XML configuration file.
+            </param>
+            <returns>
+            The value of the <paramref name="value" /> will all supported XML
+            configuration file tokens replaced.  No return value is reserved
+            to indicate an error.  This method cannot fail.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.GetSettingValueViaXmlConfigFile(System.String,System.String,System.String,System.Boolean)">
+            <summary>
+            Queries and returns the value of the specified setting, using the
+            specified XML configuration file.
+            </summary>
+            <param name="fileName">
+            The name of the XML configuration file to read.
+            </param>
+            <param name="name">
+            The name of the setting.
+            </param>
+            <param name="default">
+            The value to be returned if the setting has not been set explicitly
+            or cannot be determined.
+            </param>
+            <param name="expand">
+            Non-zero to expand any environment variable references contained in
+            the setting value to be returned.  This has no effect on the .NET
+            Compact Framework.
+            </param>
+            <returns>
+            The value of the setting -OR- the default value specified by
+            <paramref name="default" /> if it has not been set explicitly or
+            cannot be determined.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.GetAssemblyTargetFramework(System.Reflection.Assembly)">
+            <summary>
+            Attempts to determine the target framework attribute value that is
+            associated with the specified managed assembly, if applicable.
+            </summary>
+            <param name="assembly">
+            The managed assembly to read the target framework attribute value
+            from.
+            </param>
+            <returns>
+            The value of the target framework attribute value for the specified
+            managed assembly -OR- null if it cannot be determined.  If this
+            assembly was compiled with a version of the .NET Framework prior to
+            version 4.0, the value returned MAY reflect that version of the .NET
+            Framework instead of the one associated with the specified managed
+            assembly.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.AbbreviateTargetFramework(System.String)">
+            <summary>
+            Accepts a long target framework attribute value and makes it into a
+            much shorter version, suitable for use with NuGet packages.
+            </summary>
+            <param name="targetFramework">
+            The long target framework attribute value to convert.
+            </param>
+            <returns>
+            The short target framework attribute value -OR- null if it cannot
+            be determined or converted.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.ReplaceEnvironmentVariableTokens(System.String)">
+            <summary>
+            If necessary, replaces all supported environment variable tokens
+            with their associated values.
+            </summary>
+            <param name="value">
+            A setting value read from an environment variable.
+            </param>
+            <returns>
+            The value of the <paramref name="value" /> will all supported
+            environment variable tokens replaced.  No return value is reserved
+            to indicate an error.  This method cannot fail.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.GetSettingValue(System.String,System.String)">
+            <summary>
+            Queries and returns the value of the specified setting, using the XML
+            configuration file and/or the environment variables for the current
+            process and/or the current system, when available.
+            </summary>
+            <param name="name">
+            The name of the setting.
+            </param>
+            <param name="default">
+            The value to be returned if the setting has not been set explicitly
+            or cannot be determined.
+            </param>
+            <returns>
+            The value of the setting -OR- the default value specified by
+            <paramref name="default" /> if it has not been set explicitly or
+            cannot be determined.  By default, all references to existing
+            environment variables will be expanded to their corresponding values
+            within the value to be returned unless either the "No_Expand" or
+            "No_Expand_<paramref name="name" />" environment variable is set [to
+            anything].
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.ResetCachedAssemblyDirectory">
+            <summary>
+            Resets the cached assembly directory value, thus forcing the next
+            call to <see cref="M:System.Data.SQLite.UnsafeNativeMethods.GetCachedAssemblyDirectory"/> method to rely
+            upon the <see cref="M:System.Data.SQLite.UnsafeNativeMethods.GetAssemblyDirectory"/> method to fetch the
+            assembly directory.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.GetCachedAssemblyDirectory">
+            <summary>
+            Queries and returns the cached directory for the assembly currently
+            being executed, if available.  If the cached assembly directory value
+            is not available, the <see cref="M:System.Data.SQLite.UnsafeNativeMethods.GetAssemblyDirectory"/> method will
+            be used to obtain the assembly directory.
+            </summary>
+            <returns>
+            The directory for the assembly currently being executed -OR- null if
+            it cannot be determined.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.GetAssemblyDirectory">
+            <summary>
+            Queries and returns the directory for the assembly currently being
+            executed.
+            </summary>
+            <returns>
+            The directory for the assembly currently being executed -OR- null if
+            it cannot be determined.
+            </returns>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethods.PROCESSOR_ARCHITECTURE">
+            <summary>
+            The name of the environment variable containing the processor
+            architecture of the current process.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethods._SQLiteNativeModuleFileName">
+            <summary>
+            The native module file name for the native SQLite library or null.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.UnsafeNativeMethods._SQLiteNativeModuleHandle">
+            <summary>
+            The native module handle for the native SQLite library or the value
+            IntPtr.Zero.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.GetNativeLibraryFileNameOnly">
+            <summary>
+            Determines the base file name (without any directory information)
+            for the native SQLite library to be pre-loaded by this class.
+            </summary>
+            <returns>
+            The base file name for the native SQLite library to be pre-loaded by
+            this class -OR- null if its value cannot be determined.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.SearchForDirectory(System.String@,System.String@,System.Boolean@)">
+            <summary>
+            Searches for the native SQLite library in the directory containing
+            the assembly currently being executed as well as the base directory
+            for the current application domain.
+            </summary>
+            <param name="baseDirectory">
+            Upon success, this parameter will be modified to refer to the base
+            directory containing the native SQLite library.
+            </param>
+            <param name="processorArchitecture">
+            Upon success, this parameter will be modified to refer to the name
+            of the immediate directory (i.e. the offset from the base directory)
+            containing the native SQLite library.
+            </param>
+            <param name="allowBaseDirectoryOnly">
+            Upon success, this parameter will be modified to non-zero only if
+            the base directory itself should be allowed for loading the native
+            library.
+            </param>
+            <returns>
+            Non-zero (success) if the native SQLite library was found; otherwise,
+            zero (failure).
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.GetBaseDirectory">
+            <summary>
+            Queries and returns the base directory of the current application
+            domain.
+            </summary>
+            <returns>
+            The base directory for the current application domain -OR- null if it
+            cannot be determined.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.FixUpDllFileName(System.String)">
+            <summary>
+            Determines if the dynamic link library file name requires a suffix
+            and adds it if necessary.
+            </summary>
+            <param name="fileName">
+            The original dynamic link library file name to inspect.
+            </param>
+            <returns>
+            The dynamic link library file name, possibly modified to include an
+            extension.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.GetProcessorArchitecture">
+            <summary>
+            Queries and returns the processor architecture of the current
+            process.
+            </summary>
+            <returns>
+            The processor architecture of the current process -OR- null if it
+            cannot be determined.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.GetPlatformName(System.String)">
+            <summary>
+            Given the processor architecture, returns the name of the platform.
+            </summary>
+            <param name="processorArchitecture">
+            The processor architecture to be translated to a platform name.
+            </param>
+            <returns>
+            The platform name for the specified processor architecture -OR- null
+            if it cannot be determined.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.UnsafeNativeMethods.PreLoadSQLiteDll(System.String,System.String,System.Boolean,System.String@,System.IntPtr@)">
+            <summary>
+            Attempts to load the native SQLite library based on the specified
+            directory and processor architecture.
+            </summary>
+            <param name="baseDirectory">
+            The base directory to use, null for default (the base directory of
+            the current application domain).  This directory should contain the
+            processor architecture specific sub-directories.
+            </param>
+            <param name="processorArchitecture">
+            The requested processor architecture, null for default (the
+            processor architecture of the current process).  This caller should
+            almost always specify null for this parameter.
+            </param>
+            <param name="allowBaseDirectoryOnly">
+            Non-zero indicates that the native SQLite library can be loaded
+            from the base directory itself.
+            </param>
+            <param name="nativeModuleFileName">
+            The candidate native module file name to load will be stored here,
+            if necessary.
+            </param>
+            <param name="nativeModuleHandle">
+            The native module handle as returned by LoadLibrary will be stored
+            here, if necessary.  This value will be IntPtr.Zero if the call to
+            LoadLibrary fails.
+            </param>
+            <returns>
+            Non-zero if the native module was loaded successfully; otherwise,
+            zero.
+            </returns>
+        </member>
+        <member name="T:System.Data.SQLite.SR">
+            <summary>
+              A strongly-typed resource class, for looking up localized strings, etc.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SR.ResourceManager">
+            <summary>
+              Returns the cached ResourceManager instance used by this class.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SR.Culture">
+            <summary>
+              Overrides the current thread's CurrentUICulture property for all
+              resource lookups using this strongly typed resource class.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SR.DataTypes">
+             <summary>
+               Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; standalone=&quot;yes&quot;?&gt;
+            &lt;DocumentElement&gt;
+              &lt;DataTypes&gt;
+                &lt;TypeName&gt;smallint&lt;/TypeName&gt;
+                &lt;ProviderDbType&gt;10&lt;/ProviderDbType&gt;
+                &lt;ColumnSize&gt;5&lt;/ColumnSize&gt;
+                &lt;DataType&gt;System.Int16&lt;/DataType&gt;
+                &lt;CreateFormat&gt;smallint&lt;/CreateFormat&gt;
+                &lt;IsAutoIncrementable&gt;false&lt;/IsAutoIncrementable&gt;
+                &lt;IsCaseSensitive&gt;false&lt;/IsCaseSensitive&gt;
+                &lt;IsFixedLength&gt;true&lt;/IsFixedLength&gt;
+                &lt;IsFixedPrecisionScale&gt;true&lt;/IsFixedPrecisionScale&gt;
+                &lt;IsLong&gt;false&lt;/IsLong&gt;
+                &lt;IsNullable&gt;true&lt;/ [rest of string was truncated]&quot;;.
+             </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SR.Keywords">
+            <summary>
+              Looks up a localized string similar to ALL,ALTER,AND,AS,AUTOINCREMENT,BETWEEN,BY,CASE,CHECK,COLLATE,COMMIT,CONSTRAINT,CREATE,CROSS,DEFAULT,DEFERRABLE,DELETE,DISTINCT,DROP,ELSE,ESCAPE,EXCEPT,FOREIGN,FROM,FULL,GROUP,HAVING,IN,INDEX,INNER,INSERT,INTERSECT,INTO,IS,ISNULL,JOIN,LEFT,LIMIT,NATURAL,NOT,NOTNULL,NULL,ON,OR,ORDER,OUTER,PRIMARY,REFERENCES,RIGHT,ROLLBACK,SELECT,SET,TABLE,THEN,TO,TRANSACTION,UNION,UNIQUE,UPDATE,USING,VALUES,WHEN,WHERE.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SR.MetaDataCollections">
+             <summary>
+               Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
+            &lt;DocumentElement&gt;
+              &lt;MetaDataCollections&gt;
+                &lt;CollectionName&gt;MetaDataCollections&lt;/CollectionName&gt;
+                &lt;NumberOfRestrictions&gt;0&lt;/NumberOfRestrictions&gt;
+                &lt;NumberOfIdentifierParts&gt;0&lt;/NumberOfIdentifierParts&gt;
+              &lt;/MetaDataCollections&gt;
+              &lt;MetaDataCollections&gt;
+                &lt;CollectionName&gt;DataSourceInformation&lt;/CollectionName&gt;
+                &lt;NumberOfRestrictions&gt;0&lt;/NumberOfRestrictions&gt;
+                &lt;NumberOfIdentifierParts&gt;0&lt;/NumberOfIdentifierParts&gt;
+              &lt;/MetaDataCollections&gt;
+              &lt;MetaDataC [rest of string was truncated]&quot;;.
+             </summary>
+        </member>
+        <member name="T:System.Data.SQLite.ISQLiteNativeModule">
+            <summary>
+            This interface represents a virtual table implementation written in
+            native code.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)">
+            <summary>
+            <para><code>
+            int (*xCreate)(sqlite3 *db, void *pAux,
+                         int argc, char *const*argv,
+                         sqlite3_vtab **ppVTab,
+                         char **pzErr);
+            </code></para>
+            <para>
+            The xCreate method is called to create a new instance of a virtual table 
+            in response to a CREATE VIRTUAL TABLE statement.
+            If the xCreate method is the same pointer as the xConnect method, then the
+            virtual table is an eponymous virtual table.
+            If the xCreate method is omitted (if it is a NULL pointer) then the virtual 
+            table is an eponymous-only virtual table.
+            </para>
+            <para>
+            The db parameter is a pointer to the SQLite database connection that 
+            is executing the CREATE VIRTUAL TABLE statement. 
+            The pAux argument is the copy of the client data pointer that was the 
+            fourth argument to the sqlite3_create_module() or
+            sqlite3_create_module_v2() call that registered the 
+            virtual table module. 
+            The argv parameter is an array of argc pointers to null terminated strings. 
+            The first string, argv[0], is the name of the module being invoked.   The
+            module name is the name provided as the second argument to 
+            sqlite3_create_module() and as the argument to the USING clause of the
+            CREATE VIRTUAL TABLE statement that is running.
+            The second, argv[1], is the name of the database in which the new virtual table is being created. The database name is "main" for the primary database, or
+            "temp" for TEMP database, or the name given at the end of the ATTACH
+            statement for attached databases.  The third element of the array, argv[2], 
+            is the name of the new virtual table, as specified following the TABLE
+            keyword in the CREATE VIRTUAL TABLE statement.
+            If present, the fourth and subsequent strings in the argv[] array report 
+            the arguments to the module name in the CREATE VIRTUAL TABLE statement.
+            </para>
+            <para>
+            The job of this method is to construct the new virtual table object
+            (an sqlite3_vtab object) and return a pointer to it in *ppVTab.
+            </para>
+            <para>
+            As part of the task of creating a new sqlite3_vtab structure, this 
+            method <u>must</u> invoke sqlite3_declare_vtab() to tell the SQLite 
+            core about the columns and datatypes in the virtual table. 
+            The sqlite3_declare_vtab() API has the following prototype:
+            </para>
+            <para><code>
+            int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable)
+            </code></para>
+            <para>
+            The first argument to sqlite3_declare_vtab() must be the same 
+            database connection pointer as the first parameter to this method.
+            The second argument to sqlite3_declare_vtab() must a zero-terminated 
+            UTF-8 string that contains a well-formed CREATE TABLE statement that 
+            defines the columns in the virtual table and their data types. 
+            The name of the table in this CREATE TABLE statement is ignored, 
+            as are all constraints. Only the column names and datatypes matter.
+            The CREATE TABLE statement string need not to be 
+            held in persistent memory.  The string can be
+            deallocated and/or reused as soon as the sqlite3_declare_vtab()
+            routine returns.
+            </para>
+            <para>
+            The xCreate method need not initialize the pModule, nRef, and zErrMsg
+            fields of the sqlite3_vtab object.  The SQLite core will take care of 
+            that chore.
+            </para>
+            <para>
+            The xCreate should return SQLITE_OK if it is successful in 
+            creating the new virtual table, or SQLITE_ERROR if it is not successful.
+            If not successful, the sqlite3_vtab structure must not be allocated. 
+            An error message may optionally be returned in *pzErr if unsuccessful.
+            Space to hold the error message string must be allocated using
+            an SQLite memory allocation function like 
+            sqlite3_malloc() or sqlite3_mprintf() as the SQLite core will
+            attempt to free the space using sqlite3_free() after the error has
+            been reported up to the application.
+            </para>
+            <para>
+            If the xCreate method is omitted (left as a NULL pointer) then the
+            virtual table is an eponymous-only virtual table.  New instances of
+            the virtual table cannot be created using CREATE VIRTUAL TABLE and the
+            virtual table can only be used via its module name.
+            Note that SQLite versions prior to 3.9.0 (2015-10-14) do not understand
+            eponymous-only virtual tables and will segfault if an attempt is made
+            to CREATE VIRTUAL TABLE on an eponymous-only virtual table because
+            the xCreate method was not checked for null.
+            </para>
+            <para>
+            If the xCreate method is the exact same pointer as the xConnect method,
+            that indicates that the virtual table does not need to initialize backing
+            store.  Such a virtual table can be used as an eponymous virtual table
+            or as a named virtual table using CREATE VIRTUAL TABLE or both.
+            </para>
+            <para>
+            If a column datatype contains the special keyword "HIDDEN"
+            (in any combination of upper and lower case letters) then that keyword
+            it is omitted from the column datatype name and the column is marked 
+            as a hidden column internally. 
+            A hidden column differs from a normal column in three respects:
+            </para>
+            <para>
+            <![CDATA[<ul>]]>
+            <![CDATA[<li>]]> Hidden columns are not listed in the dataset returned by 
+                 "PRAGMA table_info",
+            <![CDATA[</li>]]><![CDATA[<li>]]> Hidden columns are not included in the expansion of a "*"
+                 expression in the result set of a SELECT, and
+            <![CDATA[</li>]]><![CDATA[<li>]]> Hidden columns are not included in the implicit column-list 
+                 used by an INSERT statement that lacks an explicit column-list. 
+            <![CDATA[</li>]]><![CDATA[</ul>]]>
+            </para>
+            <para>
+            For example, if the following SQL is passed to sqlite3_declare_vtab():
+            </para>
+            <para><code>
+            CREATE TABLE x(a HIDDEN VARCHAR(12), b INTEGER, c INTEGER Hidden);
+            </code></para>
+            <para>
+            Then the virtual table would be created with two hidden columns,
+            and with datatypes of "VARCHAR(12)" and "INTEGER".
+            </para>
+            <para>
+            An example use of hidden columns can be seen in the FTS3 virtual 
+            table implementation, where every FTS virtual table
+            contains an FTS hidden column that is used to pass information from the
+            virtual table into FTS auxiliary functions and to the FTS MATCH operator.
+            </para>
+            <para>
+            A virtual table that contains hidden columns can be used like
+            a table-valued function in the FROM clause of a SELECT statement.
+            The arguments to the table-valued function become constraints on 
+            the HIDDEN columns of the virtual table.
+            </para>
+            <para>
+            For example, the "generate_series" extension (located in the
+            ext/misc/series.c
+            file in the source tree)
+            implements an eponymous virtual table with the following schema:
+            </para>
+            <para><code>
+            CREATE TABLE generate_series(
+              value,
+              start HIDDEN,
+              stop HIDDEN,
+              step HIDDEN
+            );
+            </code></para>
+            <para>
+            The sqlite3_module.xBestIndex method in the implementation of this
+            table checks for equality constraints against the HIDDEN columns, and uses
+            those as input parameters to determine the range of integer "value" outputs
+            to generate.  Reasonable defaults are used for any unconstrained columns.
+            For example, to list all integers between 5 and 50:
+            </para>
+            <para><code>
+            SELECT value FROM generate_series(5,50);
+            </code></para>
+            <para>
+            The previous query is equivalent to the following:
+            </para>
+            <para><code>
+            SELECT value FROM generate_series WHERE start=5 AND stop=50;
+            </code></para>
+            <para>
+            Arguments on the virtual table name are matched to hidden columns
+            in order.  The number of arguments can be less than the
+            number of hidden columns, in which case the latter hidden columns are
+            unconstrained.  However, an error results if there are more arguments
+            than there are hidden columns in the virtual table.
+            </para>
+            <para>
+            Beginning with SQLite version 3.14.0 (2016-08-08), 
+            the CREATE TABLE statement that
+            is passed into sqlite3_declare_vtab() may contain a WITHOUT ROWID clause.
+            This is useful for cases where the virtual table rows 
+            cannot easily be mapped into unique integers.  A CREATE TABLE
+            statement that includes WITHOUT ROWID must define one or more columns as
+            the PRIMARY KEY.  Every column of the PRIMARY KEY must individually be
+            NOT NULL and all columns for each row must be collectively unique.
+            </para>
+            <para>
+            Note that SQLite does not enforce the PRIMARY KEY for a WITHOUT ROWID
+            virtual table.  Enforcement is the responsibility of the underlying
+            virtual table implementation.  But SQLite does assume that the PRIMARY KEY
+            constraint is valid - that the identified columns really are UNIQUE and
+            NOT NULL - and it uses that assumption to optimize queries against the
+            virtual table.
+            </para>
+            <para>
+            The rowid column is not accessible on a
+            WITHOUT ROWID virtual table (of course).
+            </para>
+            <para>
+            The xUpdate method was originally designed around having a
+            ROWID as a single value.  The xUpdate method has been expanded to
+            accommodate an arbitrary PRIMARY KEY in place of the ROWID, but the
+            PRIMARY KEY must still be only one column.  For this reason, SQLite
+            will reject any WITHOUT ROWID virtual table that has more than one
+            PRIMARY KEY column and a non-NULL xUpdate method.
+            </para>
+            </summary>
+            <param name="pDb">
+            The native database connection handle.
+            </param>
+            <param name="pAux">
+            The original native pointer value that was provided to the
+            sqlite3_create_module(), sqlite3_create_module_v2() or
+            sqlite3_create_disposable_module() functions.
+            </param>
+            <param name="argc">
+            The number of arguments from the CREATE VIRTUAL TABLE statement.
+            </param>
+            <param name="argv">
+            The array of string arguments from the CREATE VIRTUAL TABLE
+            statement.
+            </param>
+            <param name="pVtab">
+            Upon success, this parameter must be modified to point to the newly
+            created native sqlite3_vtab derived structure.
+            </param>
+            <param name="pError">
+            Upon failure, this parameter must be modified to point to the error
+            message, with the underlying memory having been obtained from the
+            sqlite3_malloc() function.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)">
+            <summary>
+            <para><code>
+            int (*xConnect)(sqlite3*, void *pAux,
+                         int argc, char *const*argv,
+                         sqlite3_vtab **ppVTab,
+                         char **pzErr);
+            </code></para>
+            <para>
+            The xConnect method is very similar to xCreate. 
+            It has the same parameters and constructs a new sqlite3_vtab structure 
+            just like xCreate. 
+            And it must also call sqlite3_declare_vtab() like xCreate.
+            </para>
+            <para>
+            The difference is that xConnect is called to establish a new 
+            connection to an existing virtual table whereas xCreate is called 
+            to create a new virtual table from scratch.
+            </para>
+            <para>
+            The xCreate and xConnect methods are only different when the
+            virtual table has some kind of backing store that must be initialized 
+            the first time the virtual table is created. The xCreate method creates 
+            and initializes the backing store. The xConnect method just connects 
+            to an existing backing store.  When xCreate and xConnect are the same,
+            the table is an eponymous virtual table.
+            </para>
+            <para>
+            As an example, consider a virtual table implementation that 
+            provides read-only access to existing comma-separated-value (CSV)
+            files on disk. There is no backing store that needs to be created 
+            or initialized for such a virtual table (since the CSV files already 
+            exist on disk) so the xCreate and xConnect methods will be identical 
+            for that module.
+            </para>
+            <para>
+            Another example is a virtual table that implements a full-text index. 
+            The xCreate method must create and initialize data structures to hold 
+            the dictionary and posting lists for that index. The xConnect method,
+            on the other hand, only has to locate and use an existing dictionary 
+            and posting lists that were created by a prior xCreate call.
+            </para>
+            <para>
+            The xConnect method must return SQLITE_OK if it is successful 
+            in creating the new virtual table, or SQLITE_ERROR if it is not 
+            successful. If not successful, the sqlite3_vtab structure must not be 
+            allocated. An error message may optionally be returned in *pzErr if 
+            unsuccessful. 
+            Space to hold the error message string must be allocated using
+            an SQLite memory allocation function like 
+            sqlite3_malloc() or sqlite3_mprintf() as the SQLite core will
+            attempt to free the space using sqlite3_free() after the error has
+            been reported up to the application.
+            </para>
+            <para>
+            The xConnect method is required for every virtual table implementation, 
+            though the xCreate and xConnect pointers of the sqlite3_module object
+            may point to the same function if the virtual table does not need to
+            initialize backing store.
+            </para>
+            </summary>
+            <param name="pDb">
+            The native database connection handle.
+            </param>
+            <param name="pAux">
+            The original native pointer value that was provided to the
+            sqlite3_create_module(), sqlite3_create_module_v2() or
+            sqlite3_create_disposable_module() functions.
+            </param>
+            <param name="argc">
+            The number of arguments from the CREATE VIRTUAL TABLE statement.
+            </param>
+            <param name="argv">
+            The array of string arguments from the CREATE VIRTUAL TABLE
+            statement.
+            </param>
+            <param name="pVtab">
+            Upon success, this parameter must be modified to point to the newly
+            created native sqlite3_vtab derived structure.
+            </param>
+            <param name="pError">
+            Upon failure, this parameter must be modified to point to the error
+            message, with the underlying memory having been obtained from the
+            sqlite3_malloc() function.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)">
+            <summary>
+            <para>
+            SQLite uses the xBestIndex method of a virtual table module to determine
+            the best way to access the virtual table. 
+            The xBestIndex method has a prototype like this:
+            </para>
+            <para><code>
+            int (*xBestIndex)(sqlite3_vtab *pVTab, sqlite3_index_info*);
+            </code></para>
+            <para>
+            The SQLite core communicates with the xBestIndex method by filling 
+            in certain fields of the sqlite3_index_info structure and passing a 
+            pointer to that structure into xBestIndex as the second parameter. 
+            The xBestIndex method fills out other fields of this structure which
+            forms the reply. The sqlite3_index_info structure looks like this:
+            </para>
+            <para><code>
+            struct sqlite3_index_info {
+              /* Inputs */
+              const int nConstraint;     /* Number of entries in aConstraint */
+              const struct sqlite3_index_constraint {
+                 int iColumn;              /* Column constrained.  -1 for ROWID */
+                 unsigned char op;         /* Constraint operator */
+                 unsigned char usable;     /* True if this constraint is usable */
+                 int iTermOffset;          /* Used internally - xBestIndex should ignore */
+              } *const aConstraint;      /* Table of WHERE clause constraints */
+              const int nOrderBy;        /* Number of terms in the ORDER BY clause */
+              const struct sqlite3_index_orderby {
+                 int iColumn;              /* Column number */
+                 unsigned char desc;       /* True for DESC.  False for ASC. */
+              } *const aOrderBy;         /* The ORDER BY clause */
+              /* Outputs */
+              struct sqlite3_index_constraint_usage {
+                int argvIndex;           /* if >0, constraint is part of argv to xFilter */
+                unsigned char omit;      /* Do not code a test for this constraint */
+              } *const aConstraintUsage;
+              int idxNum;                /* Number used to identify the index */
+              char *idxStr;              /* String, possibly obtained from sqlite3_malloc */
+              int needToFreeIdxStr;      /* Free idxStr using sqlite3_free() if true */
+              int orderByConsumed;       /* True if output is already ordered */
+              double estimatedCost;      /* Estimated cost of using this index */
+              <![CDATA[<b>]]>/* Fields below are only available in SQLite 3.8.2 and later */<![CDATA[</b>]]>
+              sqlite3_int64 estimatedRows;    /* Estimated number of rows returned */
+              <![CDATA[<b>]]>/* Fields below are only available in SQLite 3.9.0 and later */<![CDATA[</b>]]>
+              int idxFlags;              /* Mask of SQLITE_INDEX_SCAN_* flags */
+              <![CDATA[<b>]]>/* Fields below are only available in SQLite 3.10.0 and later */<![CDATA[</b>]]>
+              sqlite3_uint64 colUsed;    /* Input: Mask of columns used by statement */
+            };
+            </code></para>
+            <para>
+            Note the warnings on the "estimatedRows", "idxFlags", and colUsed fields.
+            These fields were added with SQLite versions 3.8.2, 3.9.0, and 3.10.0, respectively. 
+            Any extension that reads or writes these fields must first check that the 
+            version of the SQLite library in use is greater than or equal to appropriate
+            version - perhaps comparing the value returned from sqlite3_libversion_number()
+            against constants 3008002, 3009000, and/or 3010000. The result of attempting 
+            to access these fields in an sqlite3_index_info structure created by an 
+            older version of SQLite are undefined.
+            </para>
+            <para>
+            In addition, there are some defined constants:
+            </para>
+            <para><code>
+            #define SQLITE_INDEX_CONSTRAINT_EQ         2
+            #define SQLITE_INDEX_CONSTRAINT_GT         4
+            #define SQLITE_INDEX_CONSTRAINT_LE         8
+            #define SQLITE_INDEX_CONSTRAINT_LT        16
+            #define SQLITE_INDEX_CONSTRAINT_GE        32
+            #define SQLITE_INDEX_CONSTRAINT_MATCH     64
+            #define SQLITE_INDEX_CONSTRAINT_LIKE      65  /* 3.10.0 and later */
+            #define SQLITE_INDEX_CONSTRAINT_GLOB      66  /* 3.10.0 and later */
+            #define SQLITE_INDEX_CONSTRAINT_REGEXP    67  /* 3.10.0 and later */
+            #define SQLITE_INDEX_CONSTRAINT_NE        68  /* 3.21.0 and later */
+            #define SQLITE_INDEX_CONSTRAINT_ISNOT     69  /* 3.21.0 and later */
+            #define SQLITE_INDEX_CONSTRAINT_ISNOTNULL 70  /* 3.21.0 and later */
+            #define SQLITE_INDEX_CONSTRAINT_ISNULL    71  /* 3.21.0 and later */
+            #define SQLITE_INDEX_CONSTRAINT_IS        72  /* 3.21.0 and later */
+            #define SQLITE_INDEX_CONSTRAINT_FUNCTION 150  /* 3.25.0 and later */
+            #define SQLITE_INDEX_SCAN_UNIQUE           1  /* Scan visits at most 1 row */
+            </code></para>
+            <para>
+            The SQLite core calls the xBestIndex method when it is compiling a query
+            that involves a virtual table. In other words, SQLite calls this method 
+            when it is running sqlite3_prepare() or the equivalent. 
+            By calling this method, the 
+            SQLite core is saying to the virtual table that it needs to access 
+            some subset of the rows in the virtual table and it wants to know the
+            most efficient way to do that access. The xBestIndex method replies 
+            with information that the SQLite core can then use to conduct an 
+            efficient search of the virtual table.
+            </para>
+            <para>
+            While compiling a single SQL query, the SQLite core might call 
+            xBestIndex multiple times with different settings in sqlite3_index_info.
+            The SQLite core will then select the combination that appears to 
+            give the best performance.
+            </para>
+            <para>
+            Before calling this method, the SQLite core initializes an instance 
+            of the sqlite3_index_info structure with information about the
+            query that it is currently trying to process. This information 
+            derives mainly from the WHERE clause and ORDER BY or GROUP BY clauses 
+            of the query, but also from any ON or USING clauses if the query is a 
+            join. The information that the SQLite core provides to the xBestIndex 
+            method is held in the part of the structure that is marked as "Inputs". 
+            The "Outputs" section is initialized to zero.
+            </para>
+            <para>
+            The information in the sqlite3_index_info structure is ephemeral
+            and may be overwritten or deallocated as soon as the xBestIndex method
+            returns.  If the xBestIndex method needs to remember any part of the
+            sqlite3_index_info structure, it should make a copy.  Care must be
+            take to store the copy in a place where it will be deallocated, such
+            as in the idxStr field with needToFreeIdxStr set to 1.
+            </para>
+            <para>
+            Note that xBestIndex will always be called before xFilter, since
+            the idxNum and idxStr outputs from xBestIndex are required inputs to
+            xFilter.  However, there is no guarantee that xFilter will be called
+            following a successful xBestIndex.
+            </para>
+            <para>
+            The xBestIndex method is required for every virtual table implementation.
+            </para>
+            <para>
+            The main thing that the SQLite core is trying to communicate to 
+            the virtual table is the constraints that are available to limit 
+            the number of rows that need to be searched. The aConstraint[] array 
+            contains one entry for each constraint. There will be exactly 
+            nConstraint entries in that array.
+            </para>
+            <para>
+            Each constraint will usually correspond to a term in the WHERE clause
+            or in a USING or ON clause that is of the form
+            </para>
+            <para><code>
+                 column  OP  EXPR
+            </code></para>
+            <para>
+            Where "column" is a column in the virtual table, OP is an operator 
+            like "=" or "&lt;", and EXPR is an arbitrary expression. So, for example,
+            if the WHERE clause contained a term like this:
+            </para>
+            <para><code>
+            a = 5
+            </code></para>
+            <para>
+            Then one of the constraints would be on the "a" column with 
+            operator "=" and an expression of "5". Constraints need not have a
+            literal representation of the WHERE clause. The query optimizer might
+            make transformations to the 
+            WHERE clause in order to extract as many constraints 
+            as it can. So, for example, if the WHERE clause contained something 
+            like this:
+            </para>
+            <para><code>
+            x BETWEEN 10 AND 100 AND 999&gt;y
+            </code></para>
+            <para>
+            The query optimizer might translate this into three separate constraints:
+            </para>
+            <para><code>
+            x &gt;= 10
+            x &lt;= 100
+            y &lt; 999
+            </code></para>
+            <para>
+            For each such constraint, the aConstraint[].iColumn field indicates which 
+            column appears on the left-hand side of the constraint.
+            The first column of the virtual table is column 0. 
+            The rowid of the virtual table is column -1. 
+            The aConstraint[].op field indicates which operator is used. 
+            The SQLITE_INDEX_CONSTRAINT_* constants map integer constants 
+            into operator values.
+            Columns occur in the order they were defined by the call to
+            sqlite3_declare_vtab() in the xCreate or xConnect method.
+            Hidden columns are counted when determining the column index.
+            </para>
+            <para>
+            If the xFindFunction() method for the virtual table is defined, and 
+            if xFindFunction() sometimes returns SQLITE_INDEX_CONSTRAINT_FUNCTION or
+            larger, then the constraints might also be of the form:
+            </para>
+            <para><code>
+                 FUNCTION( column, EXPR)
+            </code></para>
+            <para>
+            In this case the aConstraint[].op value is the same as the value
+            returned by xFindFunction() for FUNCTION.
+            </para>
+            <para>
+            The aConstraint[] array contains information about all constraints 
+            that apply to the virtual table. But some of the constraints might
+            not be usable because of the way tables are ordered in a join. 
+            The xBestIndex method must therefore only consider constraints 
+            that have an aConstraint[].usable flag which is true.
+            </para>
+            <para>
+            In addition to WHERE clause constraints, the SQLite core also 
+            tells the xBestIndex method about the ORDER BY clause. 
+            (In an aggregate query, the SQLite core might put in GROUP BY clause 
+            information in place of the ORDER BY clause information, but this fact
+            should not make any difference to the xBestIndex method.) 
+            If all terms of the ORDER BY clause are columns in the virtual table, 
+            then nOrderBy will be the number of terms in the ORDER BY clause 
+            and the aOrderBy[] array will identify the column for each term 
+            in the order by clause and whether or not that column is ASC or DESC.
+            </para>
+            <para>
+            In SQLite version 3.10.0 (2016-01-06) and later, 
+            the colUsed field is available
+            to indicate which fields of the virtual table are actually used by the
+            statement being prepared.  If the lowest bit of colUsed is set, that
+            means that the first column is used.  The second lowest bit corresponds
+            to the second column.  And so forth.  If the most significant bit of
+            colUsed is set, that means that one or more columns other than the 
+            first 63 columns are used.  If column usage information is needed by the
+            xFilter method, then the required bits must be encoded into either
+            the idxNum or idxStr output fields.
+            </para>
+            <para>
+            Given all of the information above, the job of the xBestIndex 
+            method it to figure out the best way to search the virtual table.
+            </para>
+            <para>
+            The xBestIndex method fills the idxNum and idxStr fields with 
+            information that communicates an indexing strategy to the xFilter 
+            method. The information in idxNum and idxStr is arbitrary as far 
+            as the SQLite core is concerned. The SQLite core just copies the 
+            information through to the xFilter method. Any desired meaning can 
+            be assigned to idxNum and idxStr as long as xBestIndex and xFilter 
+            agree on what that meaning is.
+            </para>
+            <para>
+            The idxStr value may be a string obtained from an SQLite
+            memory allocation function such as sqlite3_mprintf(). 
+            If this is the case, then the needToFreeIdxStr flag must be set to 
+            true so that the SQLite core will know to call sqlite3_free() on 
+            that string when it has finished with it, and thus avoid a memory leak.
+            The idxStr value may also be a static constant string, in which case
+            the needToFreeIdxStr boolean should remain false.
+            </para>
+            <para>
+            If the virtual table will output rows in the order specified by 
+            the ORDER BY clause, then the orderByConsumed flag may be set to 
+            true. If the output is not automatically in the correct order 
+            then orderByConsumed must be left in its default false setting. 
+            This will indicate to the SQLite core that it will need to do a 
+            separate sorting pass over the data after it comes out of the virtual table.
+            </para>
+            <para>
+            The estimatedCost field should be set to the estimated number
+            of disk access operations required to execute this query against 
+            the virtual table. The SQLite core will often call xBestIndex 
+            multiple times with different constraints, obtain multiple cost
+            estimates, then choose the query plan that gives the lowest estimate.
+            The SQLite core initializes estimatedCost to a very large value
+            prior to invoking xBestIndex, so if xBestIndex determines that the
+            current combination of parameters is undesirable, it can leave the
+            estimatedCost field unchanged to discourage its use.
+            </para>
+            <para>
+            If the current version of SQLite is 3.8.2 or greater, the estimatedRows
+            field may be set to an estimate of the number of rows returned by the
+            proposed query plan. If this value is not explicitly set, the default 
+            estimate of 25 rows is used.
+            </para>
+            <para>
+            If the current version of SQLite is 3.9.0 or greater, the idxFlags field
+            may be set to SQLITE_INDEX_SCAN_UNIQUE to indicate that the virtual table
+            will return only zero or one rows given the input constraints.  Additional
+            bits of the idxFlags field might be understood in later versions of SQLite.
+            </para>
+            <para>
+            The aConstraintUsage[] array contains one element for each of 
+            the nConstraint constraints in the inputs section of the 
+            sqlite3_index_info structure. 
+            The aConstraintUsage[] array is used by xBestIndex to tell the 
+            core how it is using the constraints.
+            </para>
+            <para>
+            The xBestIndex method may set aConstraintUsage[].argvIndex 
+            entries to values greater than zero. 
+            Exactly one entry should be set to 1, another to 2, another to 3, 
+            and so forth up to as many or as few as the xBestIndex method wants. 
+            The EXPR of the corresponding constraints will then be passed 
+            in as the argv[] parameters to xFilter.
+            </para>
+            <para>
+            For example, if the aConstraint[3].argvIndex is set to 1, then 
+            when xFilter is called, the argv[0] passed to xFilter will have 
+            the EXPR value of the aConstraint[3] constraint.
+            </para>
+            <para>
+            By default, the SQLite core double checks all constraints on 
+            each row of the virtual table that it receives. If such a check 
+            is redundant, the xBestFilter method can suppress that double-check by 
+            setting aConstraintUsage[].omit.
+            </para>
+            <para>
+            The xBestIndex method should return SQLITE_OK on success.  If any
+            kind of fatal error occurs, an appropriate error code (ex: SQLITE_NOMEM)
+            should be returned instead.
+            </para>
+            <para>
+            If xBestIndex returns SQLITE_CONSTRAINT, that does not indicate an
+            error.  Rather, SQLITE_CONSTRAINT indicates that the particular combination
+            of input parameters specified should not be used in the query plan.
+            The SQLITE_CONSTRAINT return is useful for table-valued functions that
+            have required parameters.  If the aConstraint[].usable field is false
+            for one of the required parameter, then the xBestIndex method should
+            return SQLITE_CONSTRAINT.
+            </para>
+            <para>
+            The following example will better illustrate the use of SQLITE_CONSTRAINT
+            as a return value from xBestIndex:
+            </para>
+            <para><code>
+            SELECT * FROM realtab, tablevaluedfunc(realtab.x);
+            </code></para>
+            <para>
+            Assuming that the first hidden column of "tablevaluedfunc" is "param1",
+            the query above is semantically equivalent to this:
+            </para>
+            <para><code>
+            SELECT * FROM realtab, tablevaluedfunc
+             WHERE tablevaluedfunc.param1 = realtab.x;
+            </code></para>
+            <para>
+            The query planner must decide between many possible implementations
+            of this query, but two plans in particular are of note:
+            </para>
+            <![CDATA[<ol>]]>
+            <![CDATA[<li>]]>Scan all
+            rows of realtab and for each row, find rows in tablevaluedfunc where
+            param1 is equal to realtab.x
+            <![CDATA[</li>]]><![CDATA[<li>]]>Scan all rows of tablevalued func and for each row find rows
+            in realtab where x is equal to tablevaluedfunc.param1.
+            <![CDATA[</li>]]><![CDATA[</ol>]]>
+            <para>
+            The xBestIndex method will be invoked once for each of the potential
+            plans above.  For plan 1, the aConstraint[].usable flag for for the
+            SQLITE_CONSTRAINT_EQ constraint on the param1 column will be true because
+            the right-hand side value for the "param1 = ?" constraint will be known,
+            since it is determined by the outer realtab loop.
+            But for plan 2, the aConstraint[].usable flag for "param1 = ?" will be false
+            because the right-hand side value is determined by an inner loop and is thus
+            an unknown quantity.  Because param1 is a required input to the table-valued
+            functions, the xBestIndex method should return SQLITE_CONSTRAINT when presented 
+            with plan 2, indicating that a required input is missing.  This forces the
+            query planner to select plan 1.
+            </para>
+            </summary>
+            <param name="pVtab">
+            The native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <param name="pIndex">
+            The native pointer to the sqlite3_index_info structure.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)">
+            <summary>
+            <para><code>
+            int (*xDisconnect)(sqlite3_vtab *pVTab);
+            </code></para>
+            <para>
+            This method releases a connection to a virtual table. 
+            Only the sqlite3_vtab object is destroyed.
+            The virtual table is not destroyed and any backing store 
+            associated with the virtual table persists. 
+            </para>
+            This method undoes the work of xConnect.
+            <para>
+            This method is a destructor for a connection to the virtual table.
+            Contrast this method with xDestroy.  The xDestroy is a destructor
+            for the entire virtual table.
+            </para>
+            <para>
+            The xDisconnect method is required for every virtual table implementation,
+            though it is acceptable for the xDisconnect and xDestroy methods to be
+            the same function if that makes sense for the particular virtual table.
+            </para>
+            </summary>
+            <param name="pVtab">
+            The native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)">
+            <summary>
+            <para><code>
+            int (*xDestroy)(sqlite3_vtab *pVTab);
+            </code></para>
+            <para>
+            This method releases a connection to a virtual table, just like 
+            the xDisconnect method, and it also destroys the underlying 
+            table implementation. This method undoes the work of xCreate.
+            </para>
+            <para>
+            The xDisconnect method is called whenever a database connection
+            that uses a virtual table is closed. The xDestroy method is only 
+            called when a DROP TABLE statement is executed against the virtual table.
+            </para>
+            <para>
+            The xDestroy method is required for every virtual table implementation,
+            though it is acceptable for the xDisconnect and xDestroy methods to be
+            the same function if that makes sense for the particular virtual table.
+            </para>
+            </summary>
+            <param name="pVtab">
+            The native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)">
+            <summary>
+            <para><code>
+            int (*xOpen)(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor);
+            </code></para>
+            <para>
+            The xOpen method creates a new cursor used for accessing (read and/or
+            writing) a virtual table.  A successful invocation of this method 
+            will allocate the memory for the sqlite3_vtab_cursor (or a subclass),
+            initialize the new object, and make *ppCursor point to the new object.
+            The successful call then returns SQLITE_OK.
+            </para>
+            <para>
+            For every successful call to this method, the SQLite core will
+            later invoke the xClose method to destroy 
+            the allocated cursor.
+            </para>
+            <para>
+            The xOpen method need not initialize the pVtab field of the
+            sqlite3_vtab_cursor structure.  The SQLite core will take care
+            of that chore automatically.
+            </para>
+            <para>
+            A virtual table implementation must be able to support an arbitrary
+            number of simultaneously open cursors.
+            </para>
+            <para>
+            When initially opened, the cursor is in an undefined state.
+            The SQLite core will invoke the xFilter method
+            on the cursor prior to any attempt to position or read from the cursor.
+            </para>
+            <para>
+            The xOpen method is required for every virtual table implementation.
+            </para>
+            </summary>
+            <param name="pVtab">
+            The native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <param name="pCursor">
+            Upon success, this parameter must be modified to point to the newly
+            created native sqlite3_vtab_cursor derived structure.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xClose(System.IntPtr)">
+            <summary>
+            <para><code>
+            int (*xClose)(sqlite3_vtab_cursor*);
+            </code></para>
+            <para>
+            The xClose method closes a cursor previously opened by 
+            xOpen. 
+            The SQLite core will always call xClose once for each cursor opened 
+            using xOpen.
+            </para>
+            <para>
+            This method must release all resources allocated by the
+            corresponding xOpen call. The routine will not be called again even if it
+            returns an error.  The SQLite core will not use the
+            sqlite3_vtab_cursor again after it has been closed.
+            </para>
+            <para>
+            The xClose method is required for every virtual table implementation.
+            </para>
+            </summary>
+            <param name="pCursor">
+            The native pointer to the sqlite3_vtab_cursor derived structure.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)">
+            <summary>
+            <para><code>
+            int (*xFilter)(sqlite3_vtab_cursor*, int idxNum, const char *idxStr,
+                          int argc, sqlite3_value **argv);
+            </code></para>
+            <para>
+            This method begins a search of a virtual table. 
+            The first argument is a cursor opened by xOpen. 
+            The next two arguments define a particular search index previously 
+            chosen by xBestIndex. The specific meanings of idxNum and idxStr 
+            are unimportant as long as xFilter and xBestIndex agree on what 
+            that meaning is.
+            </para>
+            <para>
+            The xBestIndex function may have requested the values of 
+            certain expressions using the aConstraintUsage[].argvIndex values 
+            of the sqlite3_index_info structure. 
+            Those values are passed to xFilter using the argc and argv parameters.
+            </para>
+            <para>
+            If the virtual table contains one or more rows that match the
+            search criteria, then the cursor must be left point at the first row.
+            Subsequent calls to xEof must return false (zero).
+            If there are no rows match, then the cursor must be left in a state 
+            that will cause the xEof to return true (non-zero).
+            The SQLite engine will use
+            the xColumn and xRowid methods to access that row content.
+            The xNext method will be used to advance to the next row.
+            </para>
+            <para>
+            This method must return SQLITE_OK if successful, or an sqlite 
+            error code if an error occurs.
+            </para>
+            <para>
+            The xFilter method is required for every virtual table implementation.
+            </para>
+            </summary>
+            <param name="pCursor">
+            The native pointer to the sqlite3_vtab_cursor derived structure.
+            </param>
+            <param name="idxNum">
+            Number used to help identify the selected index.
+            </param>
+            <param name="idxStr">
+            The native pointer to the UTF-8 encoded string containing the
+            string used to help identify the selected index.
+            </param>
+            <param name="argc">
+            The number of native pointers to sqlite3_value structures specified
+            in <paramref name="argv" />.
+            </param>
+            <param name="argv">
+            An array of native pointers to sqlite3_value structures containing
+            filtering criteria for the selected index.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xNext(System.IntPtr)">
+            <summary>
+            <para><code>
+            int (*xNext)(sqlite3_vtab_cursor*);
+            </code></para>
+            <para>
+            The xNext method advances a virtual table cursor
+            to the next row of a result set initiated by xFilter. 
+            If the cursor is already pointing at the last row when this 
+            routine is called, then the cursor no longer points to valid 
+            data and a subsequent call to the xEof method must return true (non-zero). 
+            If the cursor is successfully advanced to another row of content, then
+            subsequent calls to xEof must return false (zero).
+            </para>
+            <para>
+            This method must return SQLITE_OK if successful, or an sqlite 
+            error code if an error occurs.
+            </para>
+            <para>
+            The xNext method is required for every virtual table implementation.
+            </para>
+            </summary>
+            <param name="pCursor">
+            The native pointer to the sqlite3_vtab_cursor derived structure.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xEof(System.IntPtr)">
+            <summary>
+            <para><code>
+            int (*xEof)(sqlite3_vtab_cursor*);
+            </code></para>
+            <para>
+            The xEof method must return false (zero) if the specified cursor 
+            currently points to a valid row of data, or true (non-zero) otherwise. 
+            This method is called by the SQL engine immediately after each 
+            xFilter and xNext invocation.
+            </para>
+            <para>
+            The xEof method is required for every virtual table implementation.
+            </para>
+            </summary>
+            <param name="pCursor">
+            The native pointer to the sqlite3_vtab_cursor derived structure.
+            </param>
+            <returns>
+            Non-zero if no more rows are available; zero otherwise.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)">
+            <summary>
+            <para><code>
+            int (*xColumn)(sqlite3_vtab_cursor*, sqlite3_context*, int N);
+            </code></para>
+            <para>
+            The SQLite core invokes this method in order to find the value for 
+            the N-th column of the current row. N is zero-based so the first column 
+            is numbered 0. 
+            The xColumn method may return its result back to SQLite using one of the
+            following interface:
+            </para>
+            <para>
+            <![CDATA[<ul>]]>
+            <![CDATA[<li>]]> sqlite3_result_blob()
+            <![CDATA[</li>]]><![CDATA[<li>]]> sqlite3_result_double()
+            <![CDATA[</li>]]><![CDATA[<li>]]> sqlite3_result_int()
+            <![CDATA[</li>]]><![CDATA[<li>]]> sqlite3_result_int64()
+            <![CDATA[</li>]]><![CDATA[<li>]]> sqlite3_result_null()
+            <![CDATA[</li>]]><![CDATA[<li>]]> sqlite3_result_text()
+            <![CDATA[</li>]]><![CDATA[<li>]]> sqlite3_result_text16()
+            <![CDATA[</li>]]><![CDATA[<li>]]> sqlite3_result_text16le()
+            <![CDATA[</li>]]><![CDATA[<li>]]> sqlite3_result_text16be()
+            <![CDATA[</li>]]><![CDATA[<li>]]> sqlite3_result_zeroblob()
+            <![CDATA[</li>]]><![CDATA[</ul>]]>
+            </para>
+            <para>
+            If the xColumn method implementation calls none of the functions above,
+            then the value of the column defaults to an SQL NULL.
+            </para>
+            <para>
+            To raise an error, the xColumn method should use one of the result_text() 
+            methods to set the error message text, then return an appropriate
+            error code.  The xColumn method must return SQLITE_OK on success.
+            </para>
+            <para>
+            The xColumn method is required for every virtual table implementation.
+            </para>
+            </summary>
+            <param name="pCursor">
+            The native pointer to the sqlite3_vtab_cursor derived structure.
+            </param>
+            <param name="pContext">
+            The native pointer to the sqlite3_context structure to be used
+            for returning the specified column value to the SQLite core
+            library.
+            </param>
+            <param name="index">
+            The zero-based index corresponding to the column containing the
+            value to be returned.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)">
+            <summary>
+            <para><code>
+            int (*xRowid)(sqlite3_vtab_cursor *pCur, sqlite_int64 *pRowid);
+            </code></para>
+            <para>
+            A successful invocation of this method will cause *pRowid to be
+            filled with the rowid of row that the
+            virtual table cursor pCur is currently pointing at.
+            This method returns SQLITE_OK on success.
+            It returns an appropriate error code on failure.
+            </para>
+            <para>
+            The xRowid method is required for every virtual table implementation.
+            </para>
+            </summary>
+            <param name="pCursor">
+            The native pointer to the sqlite3_vtab_cursor derived structure.
+            </param>
+            <param name="rowId">
+            Upon success, this parameter must be modified to contain the unique
+            integer row identifier for the current row for the specified cursor.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)">
+            <summary>
+            <para><code>
+            int (*xUpdate)(
+              sqlite3_vtab *pVTab,
+              int argc,
+              sqlite3_value **argv,
+              sqlite_int64 *pRowid
+            );
+            </code></para>
+            <para>
+            All changes to a virtual table are made using the xUpdate method.
+            This one method can be used to insert, delete, or update.
+            </para>
+            <para>
+            The argc parameter specifies the number of entries in the argv array. 
+            The value of argc will be 1 for a pure delete operation or N+2 for an insert
+            or replace or update where N is the number of columns in the table.  
+            In the previous sentence, N includes any hidden columns.
+            </para>
+            <para>
+            Every argv entry will have a non-NULL value in C but may contain the 
+            SQL value NULL.  In other words, it is always true that
+            <![CDATA[<tt>]]>argv[i]!=0<![CDATA[</tt>]]> for <![CDATA[<b>]]>i<![CDATA[</b>]]> between 0 and <![CDATA[<tt>]]>argc-1<![CDATA[</tt>]]>.
+            However, it might be the case that
+            <![CDATA[<tt>]]>sqlite3_value_type(argv[i])==SQLITE_NULL<![CDATA[</tt>]]>.
+            </para>
+            <para>
+            The argv[0] parameter is the rowid of a row in the virtual table 
+            to be deleted. If argv[0] is an SQL NULL, then no deletion occurs.
+            </para>
+            <para>
+            The argv[1] parameter is the rowid of a new row to be inserted 
+            into the virtual table. If argv[1] is an SQL NULL, then the implementation 
+            must choose a rowid for the newly inserted row. Subsequent argv[] 
+            entries contain values of the columns of the virtual table, in the 
+            order that the columns were declared. The number of columns will
+            match the table declaration that the xConnect or xCreate method made 
+            using the sqlite3_declare_vtab() call.  All hidden columns are included.
+            </para>
+            <para>
+            When doing an insert without a rowid (argc>1, argv[1] is an SQL NULL),
+            on a virtual table that uses ROWID (but not on a WITHOUT ROWID virtual table),
+            the implementation must set *pRowid to the rowid of the newly inserted row; 
+            this will become the value returned by the sqlite3_last_insert_rowid()
+            function. Setting this value in all the other cases is a harmless no-op;
+            the SQLite engine ignores the *pRowid return value if argc==1 or 
+            argv[1] is not an SQL NULL.
+            </para>
+            <para>
+            Each call to xUpdate will fall into one of cases shown below.
+            Not that references to <![CDATA[<b>]]>argv[i]<![CDATA[</b>]]> mean the SQL value
+            held within the argv[i] object, not the argv[i]
+            object itself.
+            </para>
+            <para><code>
+            <![CDATA[<dl>]]>
+            <![CDATA[<dt>]]><![CDATA[<b>]]>argc = 1 <![CDATA[<br>]]> argv[0] &#8800; NULL<![CDATA[</b>]]>
+            <![CDATA[</dt>]]><![CDATA[<dd>]]>
+            DELETE: The single row with rowid or PRIMARY KEY equal to argv[0] is deleted. 
+            No insert occurs.
+            <![CDATA[</dd>]]><![CDATA[<dt>]]><![CDATA[<b>]]>argc &gt; 1 <![CDATA[<br>]]> argv[0] = NULL<![CDATA[</b>]]>
+            <![CDATA[</dt>]]><![CDATA[<dd>]]>
+            INSERT: A new row is inserted with column values taken from
+            argv[2] and following.  In a rowid virtual table, if argv[1] is an SQL NULL,
+            then a new unique rowid is generated automatically.  The argv[1] will be NULL
+            for a WITHOUT ROWID virtual table, in which case the implementation should
+            take the PRIMARY KEY value from the appropriate column in argv[2] and following.
+            <![CDATA[</dd>]]><![CDATA[<dt>]]><![CDATA[<b>]]>argc &gt; 1 <![CDATA[<br>]]> argv[0] &#8800; NULL <![CDATA[<br>]]> argv[0] = argv[1]<![CDATA[</b>]]>
+            <![CDATA[</dt>]]><![CDATA[<dd>]]>
+            UPDATE:
+            The row with rowid or PRIMARY KEY argv[0] is updated with new values 
+            in argv[2] and following parameters.
+            <![CDATA[</dd>]]><![CDATA[<dt>]]><![CDATA[<b>]]>argc &gt; 1 <![CDATA[<br>]]> argv[0] &#8800; NULL <![CDATA[<br>]]> argv[0] &#8800; argv[1]<![CDATA[</b>]]>
+            <![CDATA[</dt>]]><![CDATA[<dd>]]>
+            UPDATE with rowid or PRIMARY KEY change:
+            The row with rowid or PRIMARY KEY argv[0] is updated with 
+            the rowid or PRIMARY KEY in argv[1] 
+            and new values in argv[2] and following parameters. This will occur 
+            when an SQL statement updates a rowid, as in the statement:
+            <para><code>
+               UPDATE table SET rowid=rowid+1 WHERE ...; 
+            </code></para>
+            <![CDATA[</dd>]]><![CDATA[</dl>]]>
+            </code></para>
+            <para>
+            The xUpdate method must return SQLITE_OK if and only if it is
+            successful.  If a failure occurs, the xUpdate must return an appropriate
+            error code.  On a failure, the pVTab->zErrMsg element may optionally
+            be replaced with error message text stored in memory allocated from SQLite 
+            using functions such as sqlite3_mprintf() or sqlite3_malloc().
+            </para>
+            <para>
+            If the xUpdate method violates some constraint of the virtual table
+            (including, but not limited to, attempting to store a value of the wrong 
+            datatype, attempting to store a value that is too
+            large or too small, or attempting to change a read-only value) then the
+            xUpdate must fail with an appropriate error code.
+            </para>
+            <para>
+            If the xUpdate method is performing an UPDATE, then
+            sqlite3_value_nochange(X) can be used to discover which columns
+            of the virtual table were actually modified by the UPDATE
+            statement.  The sqlite3_value_nochange(X) interface returns
+            true for columns that do not change.
+            On every UPDATE, SQLite will first invoke
+            xColumn separately for each unchanging column in the table to 
+            obtain the value for that column.  The xColumn method can
+            check to see if the column is unchanged at the SQL level
+            by invoking sqlite3_vtab_nochange().  If xColumn sees that
+            the column is not being modified, it should return without setting 
+            a result using one of the sqlite3_result_xxxxx()
+            interfaces.  Only in that case sqlite3_value_nochange() will be
+            true within the xUpdate method.  If xColumn does
+            invoke one or more sqlite3_result_xxxxx()
+            interfaces, then SQLite understands that as a change in the value
+            of the column and the sqlite3_value_nochange() call for that
+            column within xUpdate will return false.
+            </para>
+            <para>
+            There might be one or more sqlite3_vtab_cursor objects open and in use 
+            on the virtual table instance and perhaps even on the row of the virtual
+            table when the xUpdate method is invoked.  The implementation of
+            xUpdate must be prepared for attempts to delete or modify rows of the table
+            out from other existing cursors.  If the virtual table cannot accommodate
+            such changes, the xUpdate method must return an error code.
+            </para>
+            <para>
+            The xUpdate method is optional.
+            If the xUpdate pointer in the sqlite3_module for a virtual table
+            is a NULL pointer, then the virtual table is read-only.
+            </para>
+            </summary>
+            <param name="pVtab">
+            The native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <param name="argc">
+            The number of new or modified column values contained in
+            <paramref name="argv" />.
+            </param>
+            <param name="argv">
+            The array of native pointers to sqlite3_value structures containing
+            the new or modified column values, if any.
+            </param>
+            <param name="rowId">
+            Upon success, this parameter must be modified to contain the unique
+            integer row identifier for the row that was inserted, if any.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xBegin(System.IntPtr)">
+            <summary>
+            <para><code>
+            int (*xBegin)(sqlite3_vtab *pVTab);
+            </code></para>
+            <para>
+            This method begins a transaction on a virtual table.
+            This is method is optional.  The xBegin pointer of sqlite3_module
+            may be NULL.
+            </para>
+            <para>
+            This method is always followed by one call to either the
+            xCommit or xRollback method.  Virtual table transactions do
+            not nest, so the xBegin method will not be invoked more than once
+            on a single virtual table
+            without an intervening call to either xCommit or xRollback.
+            Multiple calls to other methods can and likely will occur in between
+            the xBegin and the corresponding xCommit or xRollback.
+            </para>
+            </summary>
+            <param name="pVtab">
+            The native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xSync(System.IntPtr)">
+            <summary>
+            <para><code>
+            int (*xSync)(sqlite3_vtab *pVTab);
+            </code></para>
+            <para>
+            This method signals the start of a two-phase commit on a virtual
+            table.
+            This is method is optional.  The xSync pointer of sqlite3_module
+            may be NULL.
+            </para>
+            <para>
+            This method is only invoked after call to the xBegin method and
+            prior to an xCommit or xRollback.  In order to implement two-phase
+            commit, the xSync method on all virtual tables is invoked prior to
+            invoking the xCommit method on any virtual table.  If any of the 
+            xSync methods fail, the entire transaction is rolled back.
+            </para>
+            </summary>
+            <param name="pVtab">
+            The native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xCommit(System.IntPtr)">
+            <summary>
+            <para><code>
+            int (*xCommit)(sqlite3_vtab *pVTab);
+            </code></para>
+            <para>
+            This method causes a virtual table transaction to commit.
+            This is method is optional.  The xCommit pointer of sqlite3_module
+            may be NULL.
+            </para>
+            <para>
+            A call to this method always follows a prior call to xBegin and
+            xSync.
+            </para>
+            </summary>
+            <param name="pVtab">
+            The native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xRollback(System.IntPtr)">
+            <summary>
+            <para><code>
+            int (*xRollback)(sqlite3_vtab *pVTab);
+            </code></para>
+            <para>
+            This method causes a virtual table transaction to rollback.
+            This is method is optional.  The xRollback pointer of sqlite3_module
+            may be NULL.
+            </para>
+            <para>
+            A call to this method always follows a prior call to xBegin.
+            </para>
+            </summary>
+            <param name="pVtab">
+            The native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)">
+            <summary>
+            <para><code>
+            int (*xFindFunction)(
+              sqlite3_vtab *pVtab,
+              int nArg,
+              const char *zName,
+              void (**pxFunc)(sqlite3_context*,int,sqlite3_value**),
+              void **ppArg
+            );
+            </code></para>
+            <para>
+            This method is called during sqlite3_prepare() to give the virtual
+            table implementation an opportunity to overload functions. 
+            This method may be set to NULL in which case no overloading occurs.
+            </para>
+            <para>
+            When a function uses a column from a virtual table as its first 
+            argument, this method is called to see if the virtual table would 
+            like to overload the function. The first three parameters are inputs: 
+            the virtual table, the number of arguments to the function, and the 
+            name of the function. If no overloading is desired, this method
+            returns 0. To overload the function, this method writes the new 
+            function implementation into *pxFunc and writes user data into *ppArg 
+            and returns either 1 or a number between
+            SQLITE_INDEX_CONSTRAINT_FUNCTION and 255.
+            </para>
+            <para>
+            Historically, the return value from xFindFunction() was either zero
+            or one.  Zero means that the function is not overloaded and one means that
+            it is overload.  The ability to return values of 
+            SQLITE_INDEX_CONSTRAINT_FUNCTION or greater was added in
+            version 3.25.0 (2018-09-15).  If xFindFunction returns
+            SQLITE_INDEX_CONSTRAINT_FUNCTION or greater, than means that the function
+            takes two arguments and the function
+            can be used as a boolean in the WHERE clause of a query and that
+            the virtual table is able to exploit that function to speed up the query
+            result.  When xFindFunction returns SQLITE_INDEX_CONSTRAINT_FUNCTION or 
+            larger, the value returned becomes the sqlite3_index_info.aConstraint.op
+            value for one of the constraints passed into xBestIndex() and the second
+            argument becomes the value corresponding to that constraint that is passed
+            to xFilter().  This enables the
+            xBestIndex()/xFilter implementations to use the function to speed
+            its search.
+            </para>
+            <para>
+            The technique of having xFindFunction() return values of
+            SQLITE_INDEX_CONSTRAINT_FUNCTION was initially used in the implementation
+            of the Geopoly module.  The xFindFunction() method of that module returns
+            SQLITE_INDEX_CONSTRAINT_FUNCTION for the geopoly_overlap() SQL function
+            and it returns
+            SQLITE_INDEX_CONSTRAINT_FUNCTION+1 for the geopoly_within() SQL function.
+            This permits search optimizations for queries such as:
+            </para>
+            <para><code>
+            SELECT * FROM geopolytab WHERE geopoly_overlap(_shape, $query_polygon);
+            </code></para>
+            <para>
+            Note that infix functions (LIKE, GLOB, REGEXP, and MATCH) reverse 
+            the order of their arguments. So "like(A,B)" is equivalent to "B like A". 
+            For the form "B like A" the B term is considered the first argument 
+            to the function. But for "like(A,B)" the A term is considered the 
+            first argument.
+            </para>
+            <para>
+            The function pointer returned by this routine must be valid for
+            the lifetime of the sqlite3_vtab object given in the first parameter.
+            </para>
+            </summary>
+            <param name="pVtab">
+            The native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <param name="nArg">
+            The number of arguments to the function being sought.
+            </param>
+            <param name="zName">
+            The name of the function being sought.
+            </param>
+            <param name="callback">
+            Upon success, this parameter must be modified to contain the
+            delegate responsible for implementing the specified function.
+            </param>
+            <param name="pClientData">
+            Upon success, this parameter must be modified to contain the
+            native user-data pointer associated with
+            <paramref name="callback" />.
+            </param>
+            <returns>
+            Non-zero if the specified function was found; zero otherwise.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)">
+            <summary>
+            <para><code>
+            int (*xRename)(sqlite3_vtab *pVtab, const char *zNew);
+            </code></para>
+            <para>
+            This method provides notification that the virtual table implementation
+            that the virtual table will be given a new name. 
+            If this method returns SQLITE_OK then SQLite renames the table.
+            If this method returns an error code then the renaming is prevented.
+            </para>
+            <para>
+            The xRename method is optional.  If omitted, then the virtual
+            table may not be renamed using the ALTER TABLE RENAME command.
+            </para>
+            <para>
+            The PRAGMA legacy_alter_table setting is enabled prior to invoking this
+            method, and the value for legacy_alter_table is restored after this
+            method finishes.  This is necessary for the correct operation of virtual
+            tables that make use of shadow tables where the shadow tables must be
+            renamed to match the new virtual table name.  If the legacy_alter_format is
+            off, then the xConnect method will be invoked for the virtual table every
+            time the xRename method tries to change the name of the shadow table.
+            </para>
+            </summary>
+            <param name="pVtab">
+            The native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <param name="zNew">
+            The native pointer to the UTF-8 encoded string containing the new
+            name for the virtual table.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)">
+            <summary>
+            <para><code>
+            int (*xSavepoint)(sqlite3_vtab *pVtab, int);
+            int (*xRelease)(sqlite3_vtab *pVtab, int);
+            int (*xRollbackTo)(sqlite3_vtab *pVtab, int);
+            </code></para>
+            <para>
+            These methods provide the virtual table implementation an opportunity to
+            implement nested transactions.  They are always optional and will only be
+            called in SQLite version 3.7.7 (2011-06-23) and later.
+            </para>
+            <para>
+            When xSavepoint(X,N) is invoked, that is a signal to the virtual table X
+            that it should save its current state as savepoint N.  
+            A subsequent call
+            to xRollbackTo(X,R) means that the state of the virtual table should return
+            to what it was when xSavepoint(X,R) was last called.  
+            The call
+            to xRollbackTo(X,R) will invalidate all savepoints with N>R; none of the
+            invalided savepoints will be rolled back or released without first
+            being reinitialized by a call to xSavepoint().  
+            A call to xRelease(X,M) invalidates all savepoints where N>=M.
+            </para>
+            <para>
+            None of the xSavepoint(), xRelease(), or xRollbackTo() methods will ever
+            be called except in between calls to xBegin() and 
+            either xCommit() or xRollback().
+            </para>
+            </summary>
+            <param name="pVtab">
+            The native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <param name="iSavepoint">
+            This is an integer identifier under which the the current state of
+            the virtual table should be saved.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)">
+            <summary>
+            <para><code>
+            int (*xSavepoint)(sqlite3_vtab *pVtab, int);
+            int (*xRelease)(sqlite3_vtab *pVtab, int);
+            int (*xRollbackTo)(sqlite3_vtab *pVtab, int);
+            </code></para>
+            <para>
+            These methods provide the virtual table implementation an opportunity to
+            implement nested transactions.  They are always optional and will only be
+            called in SQLite version 3.7.7 (2011-06-23) and later.
+            </para>
+            <para>
+            When xSavepoint(X,N) is invoked, that is a signal to the virtual table X
+            that it should save its current state as savepoint N.  
+            A subsequent call
+            to xRollbackTo(X,R) means that the state of the virtual table should return
+            to what it was when xSavepoint(X,R) was last called.  
+            The call
+            to xRollbackTo(X,R) will invalidate all savepoints with N>R; none of the
+            invalided savepoints will be rolled back or released without first
+            being reinitialized by a call to xSavepoint().  
+            A call to xRelease(X,M) invalidates all savepoints where N>=M.
+            </para>
+            <para>
+            None of the xSavepoint(), xRelease(), or xRollbackTo() methods will ever
+            be called except in between calls to xBegin() and 
+            either xCommit() or xRollback().
+            </para>
+            </summary>
+            <param name="pVtab">
+            The native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <param name="iSavepoint">
+            This is an integer used to indicate that any saved states with an
+            identifier greater than or equal to this should be deleted by the
+            virtual table.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)">
+            <summary>
+            <para><code>
+            int (*xSavepoint)(sqlite3_vtab *pVtab, int);
+            int (*xRelease)(sqlite3_vtab *pVtab, int);
+            int (*xRollbackTo)(sqlite3_vtab *pVtab, int);
+            </code></para>
+            <para>
+            These methods provide the virtual table implementation an opportunity to
+            implement nested transactions.  They are always optional and will only be
+            called in SQLite version 3.7.7 (2011-06-23) and later.
+            </para>
+            <para>
+            When xSavepoint(X,N) is invoked, that is a signal to the virtual table X
+            that it should save its current state as savepoint N.  
+            A subsequent call
+            to xRollbackTo(X,R) means that the state of the virtual table should return
+            to what it was when xSavepoint(X,R) was last called.  
+            The call
+            to xRollbackTo(X,R) will invalidate all savepoints with N>R; none of the
+            invalided savepoints will be rolled back or released without first
+            being reinitialized by a call to xSavepoint().  
+            A call to xRelease(X,M) invalidates all savepoints where N>=M.
+            </para>
+            <para>
+            None of the xSavepoint(), xRelease(), or xRollbackTo() methods will ever
+            be called except in between calls to xBegin() and 
+            either xCommit() or xRollback().
+            </para>
+            </summary>
+            <param name="pVtab">
+            The native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <param name="iSavepoint">
+            This is an integer identifier used to specify a specific saved
+            state for the virtual table for it to restore itself back to, which
+            should also have the effect of deleting all saved states with an
+            integer identifier greater than this one.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteContext">
+            <summary>
+            This class represents a context from the SQLite core library that can
+            be passed to the sqlite3_result_*() and associated functions.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.ISQLiteNativeHandle">
+            <summary>
+            This interface represents a native handle provided by the SQLite core
+            library.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.ISQLiteNativeHandle.NativeHandle">
+            <summary>
+            The native handle value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteContext.pContext">
+            <summary>
+            The native context handle.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteContext.#ctor(System.IntPtr)">
+            <summary>
+            Constructs an instance of this class using the specified native
+            context handle.
+            </summary>
+            <param name="pContext">
+            The native context handle to use.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteContext.SetNull">
+            <summary>
+            Sets the context result to NULL.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteContext.SetDouble(System.Double)">
+            <summary>
+            Sets the context result to the specified <see cref="T:System.Double"/>
+            value.
+            </summary>
+            <param name="value">
+            The <see cref="T:System.Double"/> value to use.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteContext.SetInt(System.Int32)">
+            <summary>
+            Sets the context result to the specified <see cref="T:System.Int32"/>
+            value.
+            </summary>
+            <param name="value">
+            The <see cref="T:System.Int32"/> value to use.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteContext.SetInt64(System.Int64)">
+            <summary>
+            Sets the context result to the specified <see cref="T:System.Int64"/>
+            value.
+            </summary>
+            <param name="value">
+            The <see cref="T:System.Int64"/> value to use.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteContext.SetString(System.String)">
+            <summary>
+            Sets the context result to the specified <see cref="T:System.String"/>
+            value.
+            </summary>
+            <param name="value">
+            The <see cref="T:System.String"/> value to use.  This value will be
+            converted to the UTF-8 encoding prior to being used.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteContext.SetError(System.String)">
+            <summary>
+            Sets the context result to the specified <see cref="T:System.String"/>
+            value containing an error message.
+            </summary>
+            <param name="value">
+            The <see cref="T:System.String"/> value containing the error message text.
+            This value will be converted to the UTF-8 encoding prior to being
+            used.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteContext.SetErrorCode(System.Data.SQLite.SQLiteErrorCode)">
+            <summary>
+            Sets the context result to the specified <see cref="T:System.Data.SQLite.SQLiteErrorCode"/>
+            value.
+            </summary>
+            <param name="value">
+            The <see cref="T:System.Data.SQLite.SQLiteErrorCode"/> value to use.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteContext.SetErrorTooBig">
+            <summary>
+            Sets the context result to contain the error code SQLITE_TOOBIG.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteContext.SetErrorNoMemory">
+            <summary>
+            Sets the context result to contain the error code SQLITE_NOMEM.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteContext.SetBlob(System.Byte[])">
+            <summary>
+            Sets the context result to the specified <see cref="T:System.Byte"/> array
+            value.
+            </summary>
+            <param name="value">
+            The <see cref="T:System.Byte"/> array value to use.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteContext.SetZeroBlob(System.Int32)">
+            <summary>
+            Sets the context result to a BLOB of zeros of the specified size.
+            </summary>
+            <param name="value">
+            The number of zero bytes to use for the BLOB context result.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteContext.SetValue(System.Data.SQLite.SQLiteValue)">
+            <summary>
+            Sets the context result to the specified <see cref="T:System.Data.SQLite.SQLiteValue"/>.
+            </summary>
+            <param name="value">
+            The <see cref="T:System.Data.SQLite.SQLiteValue"/> to use.
+            </param>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteContext.NativeHandle">
+            <summary>
+            Returns the underlying SQLite native handle associated with this
+            object instance.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteValue">
+            <summary>
+            This class represents a value from the SQLite core library that can be
+            passed to the sqlite3_value_*() and associated functions.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteValue.pValue">
+            <summary>
+            The native value handle.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteValue.#ctor(System.IntPtr)">
+            <summary>
+            Constructs an instance of this class using the specified native
+            value handle.
+            </summary>
+            <param name="pValue">
+            The native value handle to use.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteValue.PreventNativeAccess">
+            <summary>
+            Invalidates the native value handle, thereby preventing further
+            access to it from this object instance.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteValue.FromIntPtr(System.IntPtr)">
+            <summary>
+            Converts a native pointer to a native sqlite3_value structure into
+            a managed <see cref="T:System.Data.SQLite.SQLiteValue"/> object instance.
+            </summary>
+            <param name="pValue">
+            The native pointer to a native sqlite3_value structure to convert.
+            </param>
+            <returns>
+            The managed <see cref="T:System.Data.SQLite.SQLiteValue"/> object instance or null upon
+            failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteValue.ArrayFromSizeAndIntPtr(System.Int32,System.IntPtr)">
+            <summary>
+            Converts a logical array of native pointers to native sqlite3_value
+            structures into a managed array of <see cref="T:System.Data.SQLite.SQLiteValue"/>
+            object instances.
+            </summary>
+            <param name="argc">
+            The number of elements in the logical array of native sqlite3_value
+            structures.
+            </param>
+            <param name="argv">
+            The native pointer to the logical array of native sqlite3_value
+            structures to convert.
+            </param>
+            <returns>
+            The managed array of <see cref="T:System.Data.SQLite.SQLiteValue"/> object instances or
+            null upon failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteValue.GetTypeAffinity">
+            <summary>
+            Gets and returns the type affinity associated with this value.
+            </summary>
+            <returns>
+            The type affinity associated with this value.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteValue.GetBytes">
+            <summary>
+            Gets and returns the number of bytes associated with this value, if
+            it refers to a UTF-8 encoded string.
+            </summary>
+            <returns>
+            The number of bytes associated with this value.  The returned value
+            may be zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteValue.GetInt">
+            <summary>
+            Gets and returns the <see cref="T:System.Int32"/> associated with this
+            value.
+            </summary>
+            <returns>
+            The <see cref="T:System.Int32"/> associated with this value.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteValue.GetInt64">
+            <summary>
+            Gets and returns the <see cref="T:System.Int64"/> associated with
+            this value.
+            </summary>
+            <returns>
+            The <see cref="T:System.Int64"/> associated with this value.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteValue.GetDouble">
+            <summary>
+            Gets and returns the <see cref="T:System.Double"/> associated with this
+            value.
+            </summary>
+            <returns>
+            The <see cref="T:System.Double"/> associated with this value.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteValue.GetString">
+            <summary>
+            Gets and returns the <see cref="T:System.String"/> associated with this
+            value.
+            </summary>
+            <returns>
+            The <see cref="T:System.String"/> associated with this value.  The value is
+            converted from the UTF-8 encoding prior to being returned.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteValue.GetBlob">
+            <summary>
+            Gets and returns the <see cref="T:System.Byte"/> array associated with this
+            value.
+            </summary>
+            <returns>
+            The <see cref="T:System.Byte"/> array associated with this value.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteValue.GetObject">
+            <summary>
+            Gets and returns an <see cref="T:System.Object"/> instance associated with
+            this value.
+            </summary>
+            <returns>
+            The <see cref="T:System.Object"/> associated with this value.  If the type
+            affinity of the object is unknown or cannot be determined, a null
+            value will be returned.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteValue.Persist">
+            <summary>
+            Uses the native value handle to obtain and store the managed value
+            for this object instance, thus saving it for later use.  The type
+            of the managed value is determined by the type affinity of the
+            native value.  If the type affinity is not recognized by this
+            method, no work is done and false is returned.
+            </summary>
+            <returns>
+            Non-zero if the native value was persisted successfully.
+            </returns>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteValue.NativeHandle">
+            <summary>
+            Returns the underlying SQLite native handle associated with this
+            object instance.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteValue.Persisted">
+            <summary>
+            Returns non-zero if the native SQLite value has been successfully
+            persisted as a managed value within this object instance (i.e. the
+            <see cref="P:System.Data.SQLite.SQLiteValue.Value"/> property may then be read successfully).
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteValue.Value">
+            <summary>
+            If the managed value for this object instance is available (i.e. it
+            has been previously persisted via the <see cref="M:System.Data.SQLite.SQLiteValue.Persist"/>) method,
+            that value is returned; otherwise, an exception is thrown.  The
+            returned value may be null.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteIndexConstraintOp">
+            <summary>
+            These are the allowed values for the operators that are part of a
+            constraint term in the WHERE clause of a query that uses a virtual
+            table.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexConstraintOp.EqualTo">
+            <summary>
+            This value represents the equality operator.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexConstraintOp.GreaterThan">
+            <summary>
+            This value represents the greater than operator.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexConstraintOp.LessThanOrEqualTo">
+            <summary>
+            This value represents the less than or equal to operator.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexConstraintOp.LessThan">
+            <summary>
+            This value represents the less than operator.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexConstraintOp.GreaterThanOrEqualTo">
+            <summary>
+            This value represents the greater than or equal to operator.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexConstraintOp.Match">
+            <summary>
+            This value represents the MATCH operator.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexConstraintOp.Like">
+            <summary>
+            This value represents the LIKE operator.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexConstraintOp.Glob">
+            <summary>
+            This value represents the GLOB operator.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexConstraintOp.Regexp">
+            <summary>
+            This value represents the REGEXP operator.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexConstraintOp.NotEqualTo">
+            <summary>
+            This value represents the inequality operator.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexConstraintOp.IsNot">
+            <summary>
+            This value represents the IS NOT operator.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexConstraintOp.IsNotNull">
+            <summary>
+            This value represents the IS NOT NULL operator.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexConstraintOp.IsNull">
+            <summary>
+            This value represents the IS NULL operator.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexConstraintOp.Is">
+            <summary>
+            This value represents the IS operator.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteIndexFlags">
+            <summary>
+            These are the allowed values for the index flags from the
+            <see cref="M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)"/> method.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexFlags.None">
+            <summary>
+            No special handling.  This is the default.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexFlags.ScanUnique">
+            <summary>
+            This value indicates that the scan of the index will visit at
+            most one row.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteIndexConstraint">
+            <summary>
+            This class represents the native sqlite3_index_constraint structure
+            from the SQLite core library.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteIndexConstraint.#ctor(System.Data.SQLite.UnsafeNativeMethods.sqlite3_index_constraint)">
+            <summary>
+            Constructs an instance of this class using the specified native
+            sqlite3_index_constraint structure.
+            </summary>
+            <param name="constraint">
+            The native sqlite3_index_constraint structure to use.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteIndexConstraint.#ctor(System.Int32,System.Data.SQLite.SQLiteIndexConstraintOp,System.Byte,System.Int32)">
+            <summary>
+            Constructs an instance of this class using the specified field
+            values.
+            </summary>
+            <param name="iColumn">
+            Column on left-hand side of constraint.
+            </param>
+            <param name="op">
+            Constraint operator (<see cref="T:System.Data.SQLite.SQLiteIndexConstraintOp"/>).
+            </param>
+            <param name="usable">
+            True if this constraint is usable.
+            </param>
+            <param name="iTermOffset">
+            Used internally - <see cref="M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)"/>
+            should ignore.
+            </param>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexConstraint.iColumn">
+            <summary>
+            Column on left-hand side of constraint.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexConstraint.op">
+            <summary>
+            Constraint operator (<see cref="T:System.Data.SQLite.SQLiteIndexConstraintOp"/>).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexConstraint.usable">
+            <summary>
+            True if this constraint is usable.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexConstraint.iTermOffset">
+            <summary>
+            Used internally - <see cref="M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)"/>
+            should ignore.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteIndexOrderBy">
+            <summary>
+            This class represents the native sqlite3_index_orderby structure from
+            the SQLite core library.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteIndexOrderBy.#ctor(System.Data.SQLite.UnsafeNativeMethods.sqlite3_index_orderby)">
+            <summary>
+            Constructs an instance of this class using the specified native
+            sqlite3_index_orderby structure.
+            </summary>
+            <param name="orderBy">
+            The native sqlite3_index_orderby structure to use.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteIndexOrderBy.#ctor(System.Int32,System.Byte)">
+            <summary>
+            Constructs an instance of this class using the specified field
+            values.
+            </summary>
+            <param name="iColumn">
+            Column number.
+            </param>
+            <param name="desc">
+            True for DESC.  False for ASC.
+            </param>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexOrderBy.iColumn">
+            <summary>
+            Column number.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexOrderBy.desc">
+            <summary>
+            True for DESC.  False for ASC.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteIndexConstraintUsage">
+            <summary>
+            This class represents the native sqlite3_index_constraint_usage
+            structure from the SQLite core library.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteIndexConstraintUsage.#ctor">
+            <summary>
+            Constructs a default instance of this class.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteIndexConstraintUsage.#ctor(System.Data.SQLite.UnsafeNativeMethods.sqlite3_index_constraint_usage)">
+            <summary>
+            Constructs an instance of this class using the specified native
+            sqlite3_index_constraint_usage structure.
+            </summary>
+            <param name="constraintUsage">
+            The native sqlite3_index_constraint_usage structure to use.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteIndexConstraintUsage.#ctor(System.Int32,System.Byte)">
+            <summary>
+            Constructs an instance of this class using the specified field
+            values.
+            </summary>
+            <param name="argvIndex">
+            If greater than 0, constraint is part of argv to xFilter.
+            </param>
+            <param name="omit">
+            Do not code a test for this constraint.
+            </param>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexConstraintUsage.argvIndex">
+            <summary>
+            If greater than 0, constraint is part of argv to xFilter.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteIndexConstraintUsage.omit">
+            <summary>
+            Do not code a test for this constraint.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteIndexInputs">
+            <summary>
+            This class represents the various inputs provided by the SQLite core
+            library to the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)"/> method.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteIndexInputs.#ctor(System.Int32,System.Int32)">
+            <summary>
+            Constructs an instance of this class.
+            </summary>
+            <param name="nConstraint">
+            The number of <see cref="T:System.Data.SQLite.SQLiteIndexConstraint"/> instances to
+            pre-allocate space for.
+            </param>
+            <param name="nOrderBy">
+            The number of <see cref="T:System.Data.SQLite.SQLiteIndexOrderBy"/> instances to
+            pre-allocate space for.
+            </param>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteIndexInputs.Constraints">
+            <summary>
+            An array of <see cref="T:System.Data.SQLite.SQLiteIndexConstraint"/> object instances,
+            each containing information supplied by the SQLite core library.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteIndexInputs.OrderBys">
+            <summary>
+            An array of <see cref="T:System.Data.SQLite.SQLiteIndexOrderBy"/> object instances,
+            each containing information supplied by the SQLite core library.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteIndexOutputs">
+            <summary>
+            This class represents the various outputs provided to the SQLite core
+            library by the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)"/> method.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteIndexOutputs.#ctor(System.Int32)">
+            <summary>
+            Constructs an instance of this class.
+            </summary>
+            <param name="nConstraint">
+            The number of <see cref="T:System.Data.SQLite.SQLiteIndexConstraintUsage"/> instances
+            to pre-allocate space for.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteIndexOutputs.CanUseEstimatedRows">
+            <summary>
+            Determines if the native estimatedRows field can be used, based on
+            the available version of the SQLite core library.
+            </summary>
+            <returns>
+            Non-zero if the <see cref="P:System.Data.SQLite.SQLiteIndexOutputs.EstimatedRows"/> property is supported
+            by the SQLite core library.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteIndexOutputs.CanUseIndexFlags">
+            <summary>
+            Determines if the native flags field can be used, based on the
+            available version of the SQLite core library.
+            </summary>
+            <returns>
+            Non-zero if the <see cref="P:System.Data.SQLite.SQLiteIndexOutputs.IndexFlags"/> property is supported by
+            the SQLite core library.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteIndexOutputs.CanUseColumnsUsed">
+            <summary>
+            Determines if the native flags field can be used, based on the
+            available version of the SQLite core library.
+            </summary>
+            <returns>
+            Non-zero if the <see cref="P:System.Data.SQLite.SQLiteIndexOutputs.ColumnsUsed"/> property is supported by
+            the SQLite core library.
+            </returns>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteIndexOutputs.ConstraintUsages">
+            <summary>
+            An array of <see cref="T:System.Data.SQLite.SQLiteIndexConstraintUsage"/> object
+            instances, each containing information to be supplied to the SQLite
+            core library.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteIndexOutputs.IndexNumber">
+            <summary>
+            Number used to help identify the selected index.  This value will
+            later be provided to the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])"/>
+            method.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteIndexOutputs.IndexString">
+            <summary>
+            String used to help identify the selected index.  This value will
+            later be provided to the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])"/>
+            method.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteIndexOutputs.NeedToFreeIndexString">
+            <summary>
+            Non-zero if the index string must be freed by the SQLite core
+            library.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteIndexOutputs.OrderByConsumed">
+            <summary>
+            True if output is already ordered.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteIndexOutputs.EstimatedCost">
+            <summary>
+            Estimated cost of using this index.  Using a null value here
+            indicates that a default estimated cost value should be used.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteIndexOutputs.EstimatedRows">
+            <summary>
+            Estimated number of rows returned.  Using a null value here
+            indicates that a default estimated rows value should be used.
+            This property has no effect if the SQLite core library is not at
+            least version 3.8.2.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteIndexOutputs.IndexFlags">
+            <summary>
+            The flags that should be used with this index.  Using a null value
+            here indicates that a default flags value should be used.  This
+            property has no effect if the SQLite core library is not at least
+            version 3.9.0.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteIndexOutputs.ColumnsUsed">
+            <summary>
+            <para>
+            Indicates which columns of the virtual table may be required by the
+            current scan.  Virtual table columns are numbered from zero in the
+            order in which they appear within the CREATE TABLE statement passed
+            to sqlite3_declare_vtab().  For the first 63 columns (columns 0-62),
+            the corresponding bit is set within the bit mask if the column may
+            be required by SQLite.  If the table has at least 64 columns and
+            any column to the right of the first 63 is required, then bit 63 of
+            colUsed is also set.  In other words, column iCol may be required
+            if the expression
+            </para>
+            <para><code>
+            (colUsed &amp; ((sqlite3_uint64)1 &lt;&lt; (iCol&gt;=63 ? 63 : iCol)))
+            </code></para>
+            <para>
+            evaluates to non-zero.  Using a null value here indicates that a
+            default flags value should be used.  This property has no effect if
+            the SQLite core library is not at least version 3.10.0.
+            </para>
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteIndex">
+            <summary>
+            This class represents the various inputs and outputs used with the
+            <see cref="M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)"/> method.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteIndex.#ctor(System.Int32,System.Int32)">
+            <summary>
+            Constructs an instance of this class.
+            </summary>
+            <param name="nConstraint">
+            The number of <see cref="T:System.Data.SQLite.SQLiteIndexConstraint"/> (and
+            <see cref="T:System.Data.SQLite.SQLiteIndexConstraintUsage"/>) instances to
+            pre-allocate space for.
+            </param>
+            <param name="nOrderBy">
+            The number of <see cref="T:System.Data.SQLite.SQLiteIndexOrderBy"/> instances to
+            pre-allocate space for.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteIndex.SizeOfNative(System.Int32@,System.Int32@,System.Int32@,System.Int32@)">
+            <summary>
+            Attempts to determine the structure sizes needed to create and
+            populate a native
+            <see cref="T:System.Data.SQLite.UnsafeNativeMethods.sqlite3_index_info"/>
+            structure.
+            </summary>
+            <param name="sizeOfInfoType">
+            The size of the native
+            <see cref="T:System.Data.SQLite.UnsafeNativeMethods.sqlite3_index_info"/>
+            structure is stored here.
+            </param>
+            <param name="sizeOfConstraintType">
+            The size of the native
+            <see cref="T:System.Data.SQLite.UnsafeNativeMethods.sqlite3_index_constraint"/>
+            structure is stored here.
+            </param>
+            <param name="sizeOfOrderByType">
+            The size of the native
+            <see cref="T:System.Data.SQLite.UnsafeNativeMethods.sqlite3_index_orderby"/>
+            structure is stored here.
+            </param>
+            <param name="sizeOfConstraintUsageType">
+            The size of the native
+            <see cref="T:System.Data.SQLite.UnsafeNativeMethods.sqlite3_index_constraint_usage"/>
+            structure is stored here.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteIndex.AllocateAndInitializeNative(System.Int32,System.Int32)">
+            <summary>
+            Attempts to allocate and initialize a native
+            <see cref="T:System.Data.SQLite.UnsafeNativeMethods.sqlite3_index_info"/>
+            structure.
+            </summary>
+            <param name="nConstraint">
+            The number of <see cref="T:System.Data.SQLite.SQLiteIndexConstraint"/> instances to
+            pre-allocate space for.
+            </param>
+            <param name="nOrderBy">
+            The number of <see cref="T:System.Data.SQLite.SQLiteIndexOrderBy"/> instances to
+            pre-allocate space for.
+            </param>
+            <returns>
+            The newly allocated native
+            <see cref="T:System.Data.SQLite.UnsafeNativeMethods.sqlite3_index_info"/> structure
+            -OR- <see cref="F:System.IntPtr.Zero"/> if it could not be fully allocated.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteIndex.FreeNative(System.IntPtr)">
+            <summary>
+            Frees all the memory associated with a native
+            <see cref="T:System.Data.SQLite.UnsafeNativeMethods.sqlite3_index_info"/>
+            structure.
+            </summary>
+            <param name="pIndex">
+            The native pointer to the native sqlite3_index_info structure to
+            free.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteIndex.FromIntPtr(System.IntPtr,System.Boolean,System.Data.SQLite.SQLiteIndex@)">
+            <summary>
+            Converts a native pointer to a native sqlite3_index_info structure
+            into a new <see cref="T:System.Data.SQLite.SQLiteIndex"/> object instance.
+            </summary>
+            <param name="pIndex">
+            The native pointer to the native sqlite3_index_info structure to
+            convert.
+            </param>
+            <param name="includeOutput">
+            Non-zero to include fields from the outputs portion of the native
+            structure; otherwise, the "output" fields will not be read.
+            </param>
+            <param name="index">
+            Upon success, this parameter will be modified to contain the newly
+            created <see cref="T:System.Data.SQLite.SQLiteIndex"/> object instance.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteIndex.ToIntPtr(System.Data.SQLite.SQLiteIndex,System.IntPtr,System.Boolean)">
+            <summary>
+            Populates the outputs of a pre-allocated native sqlite3_index_info
+            structure using an existing <see cref="T:System.Data.SQLite.SQLiteIndex"/> object
+            instance.
+            </summary>
+            <param name="index">
+            The existing <see cref="T:System.Data.SQLite.SQLiteIndex"/> object instance containing
+            the output data to use.
+            </param>
+            <param name="pIndex">
+            The native pointer to the pre-allocated native sqlite3_index_info
+            structure.
+            </param>
+            <param name="includeInput">
+            Non-zero to include fields from the inputs portion of the native
+            structure; otherwise, the "input" fields will not be written.
+            </param>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteIndex.Inputs">
+            <summary>
+            The <see cref="T:System.Data.SQLite.SQLiteIndexInputs"/> object instance containing
+            the inputs to the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)"/>
+            method.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteIndex.Outputs">
+            <summary>
+            The <see cref="T:System.Data.SQLite.SQLiteIndexOutputs"/> object instance containing
+            the outputs from the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)"/>
+            method.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteVirtualTable">
+            <summary>
+            This class represents a managed virtual table implementation.  It is
+            not sealed and should be used as the base class for any user-defined
+            virtual table classes implemented in managed code.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteVirtualTable.ModuleNameIndex">
+            <summary>
+            The index within the array of strings provided to the
+            <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> and
+            <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> methods containing the
+            name of the module implementing this virtual table.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteVirtualTable.DatabaseNameIndex">
+            <summary>
+            The index within the array of strings provided to the
+            <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> and
+            <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> methods containing the
+            name of the database containing this virtual table.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteVirtualTable.TableNameIndex">
+            <summary>
+            The index within the array of strings provided to the
+            <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> and
+            <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> methods containing the
+            name of the virtual table.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTable.#ctor(System.String[])">
+            <summary>
+            Constructs an instance of this class.
+            </summary>
+            <param name="arguments">
+            The original array of strings provided to the
+            <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> and
+            <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> methods.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTable.BestIndex(System.Data.SQLite.SQLiteIndex)">
+            <summary>
+            This method should normally be used by the
+            <see cref="M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)"/> method in order to
+            perform index selection based on the constraints provided by the
+            SQLite core library.
+            </summary>
+            <param name="index">
+            The <see cref="T:System.Data.SQLite.SQLiteIndex"/> object instance containing all the
+            data for the inputs and outputs relating to index selection.
+            </param>
+            <returns>
+            Non-zero upon success.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTable.Rename(System.String)">
+            <summary>
+            Attempts to record the renaming of the virtual table associated
+            with this object instance.
+            </summary>
+            <param name="name">
+            The new name for the virtual table.
+            </param>
+            <returns>
+            Non-zero upon success.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTable.Dispose">
+            <summary>
+            Disposes of this object instance.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTable.CheckDisposed">
+            <summary>
+            Throws an <see cref="T:System.ObjectDisposedException"/> if this object
+            instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTable.Dispose(System.Boolean)">
+            <summary>
+            Disposes of this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this method is being called from the
+            <see cref="M:System.Data.SQLite.SQLiteVirtualTable.Dispose"/> method.  Zero if this method is being called
+            from the finalizer.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTable.Finalize">
+            <summary>
+            Finalizes this object instance.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteVirtualTable.Arguments">
+            <summary>
+            The original array of strings provided to the
+            <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> and
+            <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> methods.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteVirtualTable.ModuleName">
+            <summary>
+            The name of the module implementing this virtual table.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteVirtualTable.DatabaseName">
+            <summary>
+            The name of the database containing this virtual table.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteVirtualTable.TableName">
+            <summary>
+            The name of the virtual table.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteVirtualTable.Index">
+            <summary>
+            The <see cref="T:System.Data.SQLite.SQLiteIndex"/> object instance containing all the
+            data for the inputs and outputs relating to the most recent index
+            selection.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteVirtualTable.NativeHandle">
+            <summary>
+            Returns the underlying SQLite native handle associated with this
+            object instance.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteVirtualTableCursor">
+            <summary>
+            This class represents a managed virtual table cursor implementation.
+            It is not sealed and should be used as the base class for any
+            user-defined virtual table cursor classes implemented in managed code.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteVirtualTableCursor.InvalidRowIndex">
+            <summary>
+            This value represents an invalid integer row sequence number.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteVirtualTableCursor.rowIndex">
+            <summary>
+            The field holds the integer row sequence number for the current row
+            pointed to by this cursor object instance.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTableCursor.#ctor(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            Constructs an instance of this class.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this object instance.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTableCursor.#ctor">
+            <summary>
+            Constructs an instance of this class.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTableCursor.TryPersistValues(System.Data.SQLite.SQLiteValue[])">
+            <summary>
+            Attempts to persist the specified <see cref="T:System.Data.SQLite.SQLiteValue"/> object
+            instances in order to make them available after the
+            <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])"/> method returns.
+            </summary>
+            <param name="values">
+            The array of <see cref="T:System.Data.SQLite.SQLiteValue"/> object instances to be
+            persisted.
+            </param>
+            <returns>
+            The number of <see cref="T:System.Data.SQLite.SQLiteValue"/> object instances that were
+            successfully persisted.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTableCursor.Filter(System.Int32,System.String,System.Data.SQLite.SQLiteValue[])">
+            <summary>
+            This method should normally be used by the
+            <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])"/> method in order to
+            perform filtering of the result rows and/or to record the filtering
+            criteria provided by the SQLite core library.
+            </summary>
+            <param name="indexNumber">
+            Number used to help identify the selected index.
+            </param>
+            <param name="indexString">
+            String used to help identify the selected index.
+            </param>
+            <param name="values">
+            The values corresponding to each column in the selected index.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTableCursor.GetRowIndex">
+            <summary>
+            Determines the integer row sequence number for the current row.
+            </summary>
+            <returns>
+            The integer row sequence number for the current row -OR- zero if
+            it cannot be determined.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTableCursor.NextRowIndex">
+            <summary>
+            Adjusts the integer row sequence number so that it refers to the
+            next row.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTableCursor.Dispose">
+            <summary>
+            Disposes of this object instance.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTableCursor.CheckDisposed">
+            <summary>
+            Throws an <see cref="T:System.ObjectDisposedException"/> if this object
+            instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTableCursor.Dispose(System.Boolean)">
+            <summary>
+            Disposes of this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this method is being called from the
+            <see cref="M:System.Data.SQLite.SQLiteVirtualTableCursor.Dispose"/> method.  Zero if this method is being called
+            from the finalizer.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTableCursor.Finalize">
+            <summary>
+            Finalizes this object instance.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteVirtualTableCursor.Table">
+            <summary>
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this object instance.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteVirtualTableCursor.IndexNumber">
+            <summary>
+            Number used to help identify the selected index.  This value will
+            be set via the <see cref="M:System.Data.SQLite.SQLiteVirtualTableCursor.Filter(System.Int32,System.String,System.Data.SQLite.SQLiteValue[])"/> method.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteVirtualTableCursor.IndexString">
+            <summary>
+            String used to help identify the selected index.  This value will
+            be set via the <see cref="M:System.Data.SQLite.SQLiteVirtualTableCursor.Filter(System.Int32,System.String,System.Data.SQLite.SQLiteValue[])"/> method.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteVirtualTableCursor.Values">
+            <summary>
+            The values used to filter the rows returned via this cursor object
+            instance.  This value will be set via the <see cref="M:System.Data.SQLite.SQLiteVirtualTableCursor.Filter(System.Int32,System.String,System.Data.SQLite.SQLiteValue[])"/>
+            method.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteVirtualTableCursor.NativeHandle">
+            <summary>
+            Returns the underlying SQLite native handle associated with this
+            object instance.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.ISQLiteManagedModule">
+            <summary>
+            This interface represents a virtual table implementation written in
+            managed code.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </summary>
+            <param name="connection">
+            The <see cref="T:System.Data.SQLite.SQLiteConnection"/> object instance associated with
+            the virtual table.
+            </param>
+            <param name="pClientData">
+            The native user-data pointer associated with this module, as it was
+            provided to the SQLite core library when the native module instance
+            was created.
+            </param>
+            <param name="arguments">
+            The module name, database name, virtual table name, and all other
+            arguments passed to the CREATE VIRTUAL TABLE statement.
+            </param>
+            <param name="table">
+            Upon success, this parameter must be modified to contain the
+            <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated with
+            the virtual table.
+            </param>
+            <param name="error">
+            Upon failure, this parameter must be modified to contain an error
+            message.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </summary>
+            <param name="connection">
+            The <see cref="T:System.Data.SQLite.SQLiteConnection"/> object instance associated with
+            the virtual table.
+            </param>
+            <param name="pClientData">
+            The native user-data pointer associated with this module, as it was
+            provided to the SQLite core library when the native module instance
+            was created.
+            </param>
+            <param name="arguments">
+            The module name, database name, virtual table name, and all other
+            arguments passed to the CREATE VIRTUAL TABLE statement.
+            </param>
+            <param name="table">
+            Upon success, this parameter must be modified to contain the
+            <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated with
+            the virtual table.
+            </param>
+            <param name="error">
+            Upon failure, this parameter must be modified to contain an error
+            message.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <param name="index">
+            The <see cref="T:System.Data.SQLite.SQLiteIndex"/> object instance containing all the
+            data for the inputs and outputs relating to index selection.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.Disconnect(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.Destroy(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <param name="cursor">
+            Upon success, this parameter must be modified to contain the
+            <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance associated
+            with the newly opened virtual table cursor.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.Close(System.Data.SQLite.SQLiteVirtualTableCursor)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xClose(System.IntPtr)"/> method.
+            </summary>
+            <param name="cursor">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance
+            associated with the previously opened virtual table cursor to be
+            used.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> method.
+            </summary>
+            <param name="cursor">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance
+            associated with the previously opened virtual table cursor to be
+            used.
+            </param>
+            <param name="indexNumber">
+            Number used to help identify the selected index.
+            </param>
+            <param name="indexString">
+            String used to help identify the selected index.
+            </param>
+            <param name="values">
+            The values corresponding to each column in the selected index.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.Next(System.Data.SQLite.SQLiteVirtualTableCursor)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xNext(System.IntPtr)"/> method.
+            </summary>
+            <param name="cursor">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance
+            associated with the previously opened virtual table cursor to be
+            used.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xEof(System.IntPtr)"/> method.
+            </summary>
+            <param name="cursor">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance
+            associated with the previously opened virtual table cursor to be
+            used.
+            </param>
+            <returns>
+            Non-zero if no more rows are available; zero otherwise.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)"/> method.
+            </summary>
+            <param name="cursor">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance
+            associated with the previously opened virtual table cursor to be
+            used.
+            </param>
+            <param name="context">
+            The <see cref="T:System.Data.SQLite.SQLiteContext"/> object instance to be used for
+            returning the specified column value to the SQLite core library.
+            </param>
+            <param name="index">
+            The zero-based index corresponding to the column containing the
+            value to be returned.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)"/> method.
+            </summary>
+            <param name="cursor">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance
+            associated with the previously opened virtual table cursor to be
+            used.
+            </param>
+            <param name="rowId">
+            Upon success, this parameter must be modified to contain the unique
+            integer row identifier for the current row for the specified cursor.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <param name="values">
+            The array of <see cref="T:System.Data.SQLite.SQLiteValue"/> object instances containing
+            the new or modified column values, if any.
+            </param>
+            <param name="rowId">
+            Upon success, this parameter must be modified to contain the unique
+            integer row identifier for the row that was inserted, if any.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.Begin(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xBegin(System.IntPtr)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.Sync(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xSync(System.IntPtr)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.Commit(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCommit(System.IntPtr)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.Rollback(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRollback(System.IntPtr)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <param name="argumentCount">
+            The number of arguments to the function being sought.
+            </param>
+            <param name="name">
+            The name of the function being sought.
+            </param>
+            <param name="function">
+            Upon success, this parameter must be modified to contain the
+            <see cref="T:System.Data.SQLite.SQLiteFunction"/> object instance responsible for
+            implementing the specified function.
+            </param>
+            <param name="pClientData">
+            Upon success, this parameter must be modified to contain the
+            native user-data pointer associated with
+            <paramref name="function"/>.
+            </param>
+            <returns>
+            Non-zero if the specified function was found; zero otherwise.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <param name="newName">
+            The new name for the virtual table.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.Savepoint(System.Data.SQLite.SQLiteVirtualTable,System.Int32)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <param name="savepoint">
+            This is an integer identifier under which the the current state of
+            the virtual table should be saved.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.Release(System.Data.SQLite.SQLiteVirtualTable,System.Int32)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <param name="savepoint">
+            This is an integer used to indicate that any saved states with an
+            identifier greater than or equal to this should be deleted by the
+            virtual table.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteManagedModule.RollbackTo(System.Data.SQLite.SQLiteVirtualTable,System.Int32)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <param name="savepoint">
+            This is an integer identifier used to specify a specific saved
+            state for the virtual table for it to restore itself back to, which
+            should also have the effect of deleting all saved states with an
+            integer identifier greater than this one.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="P:System.Data.SQLite.ISQLiteManagedModule.Declared">
+            <summary>
+            Returns non-zero if the schema for the virtual table has been
+            declared.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.ISQLiteManagedModule.Name">
+            <summary>
+            Returns the name of the module as it was registered with the SQLite
+            core library.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteMemory">
+            <summary>
+            This class contains static methods that are used to allocate,
+            manipulate, and free native memory provided by the SQLite core library.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemory.CanUseSize64">
+            <summary>
+            Determines if the native sqlite3_msize() API can be used, based on
+            the available version of the SQLite core library.
+            </summary>
+            <returns>
+            Non-zero if the native sqlite3_msize() API is supported by the
+            SQLite core library.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemory.Allocate(System.Int32)">
+            <summary>
+            Allocates at least the specified number of bytes of native memory
+            via the SQLite core library sqlite3_malloc() function and returns
+            the resulting native pointer.  If the TRACK_MEMORY_BYTES option
+            was enabled at compile-time, adjusts the number of bytes currently
+            allocated by this class.
+            </summary>
+            <param name="size">
+            The number of bytes to allocate.
+            </param>
+            <returns>
+            The native pointer that points to a block of memory of at least the
+            specified size -OR- <see cref="F:System.IntPtr.Zero"/> if the memory could
+            not be allocated.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemory.Allocate64(System.UInt64)">
+            <summary>
+            Allocates at least the specified number of bytes of native memory
+            via the SQLite core library sqlite3_malloc64() function and returns
+            the resulting native pointer.  If the TRACK_MEMORY_BYTES option
+            was enabled at compile-time, adjusts the number of bytes currently
+            allocated by this class.
+            </summary>
+            <param name="size">
+            The number of bytes to allocate.
+            </param>
+            <returns>
+            The native pointer that points to a block of memory of at least the
+            specified size -OR- <see cref="F:System.IntPtr.Zero"/> if the memory could
+            not be allocated.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemory.AllocateUntracked(System.Int32)">
+            <summary>
+            Allocates at least the specified number of bytes of native memory
+            via the SQLite core library sqlite3_malloc() function and returns
+            the resulting native pointer without adjusting the number of
+            allocated bytes currently tracked by this class.  This is useful
+            when dealing with blocks of memory that will be freed directly by
+            the SQLite core library.
+            </summary>
+            <param name="size">
+            The number of bytes to allocate.
+            </param>
+            <returns>
+            The native pointer that points to a block of memory of at least the
+            specified size -OR- <see cref="F:System.IntPtr.Zero"/> if the memory could
+            not be allocated.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemory.Allocate64Untracked(System.UInt64)">
+            <summary>
+            Allocates at least the specified number of bytes of native memory
+            via the SQLite core library sqlite3_malloc64() function and returns
+            the resulting native pointer without adjusting the number of
+            allocated bytes currently tracked by this class.  This is useful
+            when dealing with blocks of memory that will be freed directly by
+            the SQLite core library.
+            </summary>
+            <param name="size">
+            The number of bytes to allocate.
+            </param>
+            <returns>
+            The native pointer that points to a block of memory of at least the
+            specified size -OR- <see cref="F:System.IntPtr.Zero"/> if the memory could
+            not be allocated.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemory.Size(System.IntPtr)">
+            <summary>
+            Gets and returns the actual size of the specified memory block
+            that was previously obtained from the <see cref="M:System.Data.SQLite.SQLiteMemory.Allocate(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteMemory.Allocate64(System.UInt64)"/>, <see cref="M:System.Data.SQLite.SQLiteMemory.AllocateUntracked(System.Int32)"/>, or
+            <see cref="M:System.Data.SQLite.SQLiteMemory.Allocate64Untracked(System.UInt64)"/> methods or directly from the
+            SQLite core library.
+            </summary>
+            <param name="pMemory">
+            The native pointer to the memory block previously obtained from
+            the <see cref="M:System.Data.SQLite.SQLiteMemory.Allocate(System.Int32)"/>, <see cref="M:System.Data.SQLite.SQLiteMemory.Allocate64(System.UInt64)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteMemory.AllocateUntracked(System.Int32)"/>, or
+            <see cref="M:System.Data.SQLite.SQLiteMemory.Allocate64Untracked(System.UInt64)"/> methods or directly from the
+            SQLite core library.
+            </param>
+            <returns>
+            The actual size, in bytes, of the memory block specified via the
+            native pointer.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemory.Size64(System.IntPtr)">
+            <summary>
+            Gets and returns the actual size of the specified memory block
+            that was previously obtained from the <see cref="M:System.Data.SQLite.SQLiteMemory.Allocate(System.Int32)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteMemory.Allocate64(System.UInt64)"/>, <see cref="M:System.Data.SQLite.SQLiteMemory.AllocateUntracked(System.Int32)"/>, or
+            <see cref="M:System.Data.SQLite.SQLiteMemory.Allocate64Untracked(System.UInt64)"/> methods or directly from the
+            SQLite core library.
+            </summary>
+            <param name="pMemory">
+            The native pointer to the memory block previously obtained from
+            the <see cref="M:System.Data.SQLite.SQLiteMemory.Allocate(System.Int32)"/>, <see cref="M:System.Data.SQLite.SQLiteMemory.Allocate64(System.UInt64)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteMemory.AllocateUntracked(System.Int32)"/>, or
+            <see cref="M:System.Data.SQLite.SQLiteMemory.Allocate64Untracked(System.UInt64)"/> methods or directly from the
+            SQLite core library.
+            </param>
+            <returns>
+            The actual size, in bytes, of the memory block specified via the
+            native pointer.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemory.Free(System.IntPtr)">
+            <summary>
+            Frees a memory block previously obtained from the
+            <see cref="M:System.Data.SQLite.SQLiteMemory.Allocate(System.Int32)"/> or <see cref="M:System.Data.SQLite.SQLiteMemory.Allocate64(System.UInt64)"/> methods.  If
+            the TRACK_MEMORY_BYTES option was enabled at compile-time, adjusts
+            the number of bytes currently allocated by this class.
+            </summary>
+            <param name="pMemory">
+            The native pointer to the memory block previously obtained from the
+            <see cref="M:System.Data.SQLite.SQLiteMemory.Allocate(System.Int32)"/> or <see cref="M:System.Data.SQLite.SQLiteMemory.Allocate64(System.UInt64)"/> methods.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemory.FreeUntracked(System.IntPtr)">
+            <summary>
+            Frees a memory block previously obtained from the SQLite core
+            library without adjusting the number of allocated bytes currently
+            tracked by this class.  This is useful when dealing with blocks of
+            memory that were not allocated using this class.
+            </summary>
+            <param name="pMemory">
+            The native pointer to the memory block previously obtained from the
+            SQLite core library.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteString">
+            <summary>
+            This class contains static methods that are used to deal with native
+            UTF-8 string pointers to be used with the SQLite core library.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteString.ThirtyBits">
+            <summary>
+            This is the maximum possible length for the native UTF-8 encoded
+            strings used with the SQLite core library.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteString.Utf8Encoding">
+            <summary>
+            This is the <see cref="T:System.Text.Encoding"/> object instance used to handle
+            conversions from/to UTF-8.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteString.GetUtf8BytesFromString(System.String)">
+            <summary>
+            Converts the specified managed string into the UTF-8 encoding and
+            returns the array of bytes containing its representation in that
+            encoding.
+            </summary>
+            <param name="value">
+            The managed string to convert.
+            </param>
+            <returns>
+            The array of bytes containing the representation of the managed
+            string in the UTF-8 encoding or null upon failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteString.GetStringFromUtf8Bytes(System.Byte[])">
+            <summary>
+            Converts the specified array of bytes representing a string in the
+            UTF-8 encoding and returns a managed string.
+            </summary>
+            <param name="bytes">
+            The array of bytes to convert.
+            </param>
+            <returns>
+            The managed string or null upon failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteString.ProbeForUtf8ByteLength(System.IntPtr,System.Int32)">
+            <summary>
+            Probes a native pointer to a string in the UTF-8 encoding for its
+            terminating NUL character, within the specified length limit.
+            </summary>
+            <param name="pValue">
+            The native NUL-terminated string pointer.
+            </param>
+            <param name="limit">
+            The maximum length of the native string, in bytes.
+            </param>
+            <returns>
+            The length of the native string, in bytes -OR- zero if the length
+            could not be determined.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteString.StringFromUtf8IntPtr(System.IntPtr)">
+            <summary>
+            Converts the specified native NUL-terminated UTF-8 string pointer
+            into a managed string.
+            </summary>
+            <param name="pValue">
+            The native NUL-terminated UTF-8 string pointer.
+            </param>
+            <returns>
+            The managed string or null upon failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteString.StringFromUtf8IntPtr(System.IntPtr,System.Int32)">
+            <summary>
+            Converts the specified native UTF-8 string pointer of the specified
+            length into a managed string.
+            </summary>
+            <param name="pValue">
+            The native UTF-8 string pointer.
+            </param>
+            <param name="length">
+            The length of the native string, in bytes.
+            </param>
+            <returns>
+            The managed string or null upon failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteString.Utf8IntPtrFromString(System.String)">
+            <summary>
+            Converts the specified managed string into a native NUL-terminated
+            UTF-8 string pointer using memory obtained from the SQLite core
+            library.
+            </summary>
+            <param name="value">
+            The managed string to convert.
+            </param>
+            <returns>
+            The native NUL-terminated UTF-8 string pointer or
+            <see cref="F:System.IntPtr.Zero"/> upon failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteString.Utf8IntPtrFromString(System.String,System.Boolean)">
+            <summary>
+            Converts the specified managed string into a native NUL-terminated
+            UTF-8 string pointer using memory obtained from the SQLite core
+            library.
+            </summary>
+            <param name="value">
+            The managed string to convert.
+            </param>
+            <param name="tracked">
+            Non-zero to obtain memory from the SQLite core library without
+            adjusting the number of allocated bytes currently being tracked
+            by the <see cref="T:System.Data.SQLite.SQLiteMemory"/> class.
+            </param>
+            <returns>
+            The native NUL-terminated UTF-8 string pointer or
+            <see cref="F:System.IntPtr.Zero"/> upon failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteString.Utf8IntPtrFromString(System.String,System.Int32@)">
+            <summary>
+            Converts the specified managed string into a native NUL-terminated
+            UTF-8 string pointer using memory obtained from the SQLite core
+            library.
+            </summary>
+            <param name="value">
+            The managed string to convert.
+            </param>
+            <param name="length">
+            The length of the native string, in bytes.
+            </param>
+            <returns>
+            The native NUL-terminated UTF-8 string pointer or
+            <see cref="F:System.IntPtr.Zero"/> upon failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteString.Utf8IntPtrFromString(System.String,System.Boolean,System.Int32@)">
+            <summary>
+            Converts the specified managed string into a native NUL-terminated
+            UTF-8 string pointer using memory obtained from the SQLite core
+            library.
+            </summary>
+            <param name="value">
+            The managed string to convert.
+            </param>
+            <param name="tracked">
+            Non-zero to obtain memory from the SQLite core library without
+            adjusting the number of allocated bytes currently being tracked
+            by the <see cref="T:System.Data.SQLite.SQLiteMemory"/> class.
+            </param>
+            <param name="length">
+            The length of the native string, in bytes.
+            </param>
+            <returns>
+            The native NUL-terminated UTF-8 string pointer or
+            <see cref="F:System.IntPtr.Zero"/> upon failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteString.StringArrayFromUtf8SizeAndIntPtr(System.Int32,System.IntPtr)">
+            <summary>
+            Converts a logical array of native NUL-terminated UTF-8 string
+            pointers into an array of managed strings.
+            </summary>
+            <param name="argc">
+            The number of elements in the logical array of native
+            NUL-terminated UTF-8 string pointers.
+            </param>
+            <param name="argv">
+            The native pointer to the logical array of native NUL-terminated
+            UTF-8 string pointers to convert.
+            </param>
+            <returns>
+            The array of managed strings or null upon failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteString.Utf8IntPtrArrayFromStringArray(System.String[],System.Boolean)">
+            <summary>
+            Converts an array of managed strings into an array of native
+            NUL-terminated UTF-8 string pointers.
+            </summary>
+            <param name="values">
+            The array of managed strings to convert.
+            </param>
+            <param name="tracked">
+            Non-zero to obtain memory from the SQLite core library without
+            adjusting the number of allocated bytes currently being tracked
+            by the <see cref="T:System.Data.SQLite.SQLiteMemory"/> class.
+            </param>
+            <returns>
+            The array of native NUL-terminated UTF-8 string pointers or null
+            upon failure.
+            </returns>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteBytes">
+            <summary>
+            This class contains static methods that are used to deal with native
+            pointers to memory blocks that logically contain arrays of bytes to be
+            used with the SQLite core library.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBytes.FromIntPtr(System.IntPtr,System.Int32)">
+            <summary>
+            Converts a native pointer to a logical array of bytes of the
+            specified length into a managed byte array.
+            </summary>
+            <param name="pValue">
+            The native pointer to the logical array of bytes to convert.
+            </param>
+            <param name="length">
+            The length, in bytes, of the logical array of bytes to convert.
+            </param>
+            <returns>
+            The managed byte array or null upon failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBytes.ToIntPtr(System.Byte[])">
+            <summary>
+            Converts a managed byte array into a native pointer to a logical
+            array of bytes.
+            </summary>
+            <param name="value">
+            The managed byte array to convert.
+            </param>
+            <returns>
+            The native pointer to a logical byte array or null upon failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteBytes.ToIntPtr(System.Byte[],System.Int32@)">
+            <summary>
+            Converts a managed byte array into a native pointer to a logical
+            array of bytes.
+            </summary>
+            <param name="value">
+            The managed byte array to convert.
+            </param>
+            <param name="length">
+            The length, in bytes, of the converted logical array of bytes.
+            </param>
+            <returns>
+            The native pointer to a logical byte array or null upon failure.
+            </returns>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteMarshal">
+            <summary>
+            This class contains static methods that are used to perform several
+            low-level data marshalling tasks between native and managed code.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMarshal.IntPtrForOffset(System.IntPtr,System.Int32)">
+            <summary>
+            Returns a new <see cref="T:System.IntPtr"/> object instance based on the
+            specified <see cref="T:System.IntPtr"/> object instance and an integer
+            offset.
+            </summary>
+            <param name="pointer">
+            The <see cref="T:System.IntPtr"/> object instance representing the base
+            memory location.
+            </param>
+            <param name="offset">
+            The integer offset from the base memory location that the new
+            <see cref="T:System.IntPtr"/> object instance should point to.
+            </param>
+            <returns>
+            The new <see cref="T:System.IntPtr"/> object instance.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMarshal.RoundUp(System.Int32,System.Int32)">
+            <summary>
+            Rounds up an integer size to the next multiple of the alignment.
+            </summary>
+            <param name="size">
+            The size, in bytes, to be rounded up.
+            </param>
+            <param name="alignment">
+            The required alignment for the return value.
+            </param>
+            <returns>
+            The size, in bytes, rounded up to the next multiple of the
+            alignment.  This value may end up being the same as the original
+            size.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMarshal.NextOffsetOf(System.Int32,System.Int32,System.Int32)">
+            <summary>
+            Determines the offset, in bytes, of the next structure member.
+            </summary>
+            <param name="offset">
+            The offset, in bytes, of the current structure member.
+            </param>
+            <param name="size">
+            The size, in bytes, of the current structure member.
+            </param>
+            <param name="alignment">
+            The alignment, in bytes, of the next structure member.
+            </param>
+            <returns>
+            The offset, in bytes, of the next structure member.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMarshal.ReadInt32(System.IntPtr,System.Int32)">
+            <summary>
+            Reads a <see cref="T:System.Int32"/> value from the specified memory
+            location.
+            </summary>
+            <param name="pointer">
+            The <see cref="T:System.IntPtr"/> object instance representing the base
+            memory location.
+            </param>
+            <param name="offset">
+            The integer offset from the base memory location where the
+            <see cref="T:System.Int32"/> value to be read is located.
+            </param>
+            <returns>
+            The <see cref="T:System.Int32"/> value at the specified memory location.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMarshal.ReadInt64(System.IntPtr,System.Int32)">
+            <summary>
+            Reads a <see cref="T:System.Int64"/> value from the specified memory
+            location.
+            </summary>
+            <param name="pointer">
+            The <see cref="T:System.IntPtr"/> object instance representing the base
+            memory location.
+            </param>
+            <param name="offset">
+            The integer offset from the base memory location where the
+            <see cref="T:System.Int64"/> value to be read is located.
+            </param>
+            <returns>
+            The <see cref="T:System.Int64"/> value at the specified memory location.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMarshal.ReadDouble(System.IntPtr,System.Int32)">
+            <summary>
+            Reads a <see cref="T:System.Double"/> value from the specified memory
+            location.
+            </summary>
+            <param name="pointer">
+            The <see cref="T:System.IntPtr"/> object instance representing the base
+            memory location.
+            </param>
+            <param name="offset">
+            The integer offset from the base memory location where the
+            <see cref="T:System.Double"/> to be read is located.
+            </param>
+            <returns>
+            The <see cref="T:System.Double"/> value at the specified memory location.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMarshal.ReadIntPtr(System.IntPtr,System.Int32)">
+            <summary>
+            Reads an <see cref="T:System.IntPtr"/> value from the specified memory
+            location.
+            </summary>
+            <param name="pointer">
+            The <see cref="T:System.IntPtr"/> object instance representing the base
+            memory location.
+            </param>
+            <param name="offset">
+            The integer offset from the base memory location where the
+            <see cref="T:System.IntPtr"/> value to be read is located.
+            </param>
+            <returns>
+            The <see cref="T:System.IntPtr"/> value at the specified memory location.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMarshal.WriteInt32(System.IntPtr,System.Int32,System.Int32)">
+            <summary>
+            Writes an <see cref="T:System.Int32"/> value to the specified memory
+            location.
+            </summary>
+            <param name="pointer">
+            The <see cref="T:System.IntPtr"/> object instance representing the base
+            memory location.
+            </param>
+            <param name="offset">
+            The integer offset from the base memory location where the
+            <see cref="T:System.Int32"/> value to be written is located.
+            </param>
+            <param name="value">
+            The <see cref="T:System.Int32"/> value to write.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMarshal.WriteInt64(System.IntPtr,System.Int32,System.Int64)">
+            <summary>
+            Writes an <see cref="T:System.Int64"/> value to the specified memory
+            location.
+            </summary>
+            <param name="pointer">
+            The <see cref="T:System.IntPtr"/> object instance representing the base
+            memory location.
+            </param>
+            <param name="offset">
+            The integer offset from the base memory location where the
+            <see cref="T:System.Int64"/> value to be written is located.
+            </param>
+            <param name="value">
+            The <see cref="T:System.Int64"/> value to write.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMarshal.WriteDouble(System.IntPtr,System.Int32,System.Double)">
+            <summary>
+            Writes a <see cref="T:System.Double"/> value to the specified memory
+            location.
+            </summary>
+            <param name="pointer">
+            The <see cref="T:System.IntPtr"/> object instance representing the base
+            memory location.
+            </param>
+            <param name="offset">
+            The integer offset from the base memory location where the
+            <see cref="T:System.Double"/> value to be written is located.
+            </param>
+            <param name="value">
+            The <see cref="T:System.Double"/> value to write.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMarshal.WriteIntPtr(System.IntPtr,System.Int32,System.IntPtr)">
+            <summary>
+            Writes a <see cref="T:System.IntPtr"/> value to the specified memory
+            location.
+            </summary>
+            <param name="pointer">
+            The <see cref="T:System.IntPtr"/> object instance representing the base
+            memory location.
+            </param>
+            <param name="offset">
+            The integer offset from the base memory location where the
+            <see cref="T:System.IntPtr"/> value to be written is located.
+            </param>
+            <param name="value">
+            The <see cref="T:System.IntPtr"/> value to write.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMarshal.GetHashCode(System.Object,System.Boolean)">
+            <summary>
+            Generates a hash code value for the object.
+            </summary>
+            <param name="value">
+            The object instance used to calculate the hash code.
+            </param>
+            <param name="identity">
+            Non-zero if different object instances with the same value should
+            generate different hash codes, where applicable.  This parameter
+            has no effect on the .NET Compact Framework.
+            </param>
+            <returns>
+            The hash code value -OR- zero if the object is null.
+            </returns>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteModule">
+            <summary>
+            This class represents a managed virtual table module implementation.
+            It is not sealed and must be used as the base class for any
+            user-defined virtual table module classes implemented in managed code.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteModule.DefaultModuleVersion">
+            <summary>
+            The default version of the native sqlite3_module structure in use.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteModule.nativeModule">
+            <summary>
+            This field is used to store the native sqlite3_module structure
+            associated with this object instance.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteModule.destroyModule">
+            <summary>
+            This field is used to store the destructor delegate to be passed to
+            the SQLite core library via the sqlite3_create_disposable_module()
+            function.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteModule.disposableModule">
+            <summary>
+            This field is used to store a pointer to the native sqlite3_module
+            structure returned by the sqlite3_create_disposable_module
+            function.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteModule.tables">
+            <summary>
+            This field is used to store the virtual table instances associated
+            with this module.  The native pointer to the sqlite3_vtab derived
+            structure is used to key into this collection.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteModule.cursors">
+            <summary>
+            This field is used to store the virtual table cursor instances
+            associated with this module.  The native pointer to the
+            sqlite3_vtab_cursor derived structure is used to key into this
+            collection.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteModule.functions">
+            <summary>
+            This field is used to store the virtual table function instances
+            associated with this module.  The case-insensitive function name
+            and the number of arguments (with -1 meaning "any") are used to
+            construct the string that is used to key into this collection.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.#ctor(System.String)">
+            <summary>
+            Constructs an instance of this class.
+            </summary>
+            <param name="name">
+            The name of the module.  This parameter cannot be null.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.CreateDisposableModule(System.IntPtr)">
+            <summary>
+            Calls the native SQLite core library in order to create a new
+            disposable module containing the implementation of a virtual table.
+            </summary>
+            <param name="pDb">
+            The native database connection pointer to use.
+            </param>
+            <returns>
+            Non-zero upon success.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xDestroyModule(System.IntPtr)">
+            <summary>
+            This method is called by the SQLite core library when the native
+            module associated with this object instance is being destroyed due
+            to its parent connection being closed.  It may also be called by
+            the "vtshim" module if/when the sqlite3_dispose_module() function
+            is called.
+            </summary>
+            <param name="pClientData">
+            The native user-data pointer associated with this module, as it was
+            provided to the SQLite core library when the native module instance
+            was created.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.AllocateNativeModule">
+            <summary>
+            Creates and returns the native sqlite_module structure using the
+            configured (or default) <see cref="T:System.Data.SQLite.ISQLiteNativeModule"/>
+            interface implementation.
+            </summary>
+            <returns>
+            The native sqlite_module structure using the configured (or
+            default) <see cref="T:System.Data.SQLite.ISQLiteNativeModule"/> interface
+            implementation.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.AllocateNativeModule(System.Data.SQLite.ISQLiteNativeModule)">
+            <summary>
+            Creates and returns the native sqlite_module structure using the
+            specified <see cref="T:System.Data.SQLite.ISQLiteNativeModule"/> interface
+            implementation.
+            </summary>
+            <param name="module">
+            The <see cref="T:System.Data.SQLite.ISQLiteNativeModule"/> interface implementation to
+            use.
+            </param>
+            <returns>
+            The native sqlite_module structure using the specified
+            <see cref="T:System.Data.SQLite.ISQLiteNativeModule"/> interface implementation.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.CopyNativeModule(System.Data.SQLite.UnsafeNativeMethods.sqlite3_module)">
+            <summary>
+            Creates a copy of the specified
+            <see cref="T:System.Data.SQLite.UnsafeNativeMethods.sqlite3_module"/> object instance,
+            using default implementations for the contained delegates when
+            necessary.
+            </summary>
+            <param name="module">
+            The <see cref="T:System.Data.SQLite.UnsafeNativeMethods.sqlite3_module"/> object
+            instance to copy.
+            </param>
+            <returns>
+            The new <see cref="T:System.Data.SQLite.UnsafeNativeMethods.sqlite3_module"/> object
+            instance.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.CreateOrConnect(System.Boolean,System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)">
+            <summary>
+            Calls one of the virtual table initialization methods.
+            </summary>
+            <param name="create">
+            Non-zero to call the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/>
+            method; otherwise, the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/>
+            method will be called.
+            </param>
+            <param name="pDb">
+            The native database connection handle.
+            </param>
+            <param name="pAux">
+            The original native pointer value that was provided to the
+            sqlite3_create_module(), sqlite3_create_module_v2() or
+            sqlite3_create_disposable_module() functions.
+            </param>
+            <param name="argc">
+            The number of arguments from the CREATE VIRTUAL TABLE statement.
+            </param>
+            <param name="argv">
+            The array of string arguments from the CREATE VIRTUAL TABLE
+            statement.
+            </param>
+            <param name="pVtab">
+            Upon success, this parameter must be modified to point to the newly
+            created native sqlite3_vtab derived structure.
+            </param>
+            <param name="pError">
+            Upon failure, this parameter must be modified to point to the error
+            message, with the underlying memory having been obtained from the
+            sqlite3_malloc() function.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.DestroyOrDisconnect(System.Boolean,System.IntPtr)">
+            <summary>
+            Calls one of the virtual table finalization methods.
+            </summary>
+            <param name="destroy">
+            Non-zero to call the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Destroy(System.Data.SQLite.SQLiteVirtualTable)"/>
+            method; otherwise, the
+            <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Disconnect(System.Data.SQLite.SQLiteVirtualTable)"/> method will be
+            called.
+            </param>
+            <param name="pVtab">
+            The native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SetTableError(System.Data.SQLite.SQLiteModule,System.IntPtr,System.Boolean,System.Boolean,System.String)">
+            <summary>
+            Arranges for the specified error message to be placed into the
+            zErrMsg field of a sqlite3_vtab derived structure, freeing the
+            existing error message, if any.
+            </summary>
+            <param name="module">
+            The <see cref="T:System.Data.SQLite.SQLiteModule"/> object instance to be used.
+            </param>
+            <param name="pVtab">
+            The native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <param name="logErrors">
+            Non-zero if this error message should also be logged using the
+            <see cref="T:System.Data.SQLite.SQLiteLog"/> class.
+            </param>
+            <param name="logExceptions">
+            Non-zero if caught exceptions should be logged using the
+            <see cref="T:System.Data.SQLite.SQLiteLog"/> class.
+            </param>
+            <param name="error">
+            The error message.
+            </param>
+            <returns>
+            Non-zero upon success.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SetTableError(System.Data.SQLite.SQLiteModule,System.Data.SQLite.SQLiteVirtualTable,System.Boolean,System.Boolean,System.String)">
+            <summary>
+            Arranges for the specified error message to be placed into the
+            zErrMsg field of a sqlite3_vtab derived structure, freeing the
+            existing error message, if any.
+            </summary>
+            <param name="module">
+            The <see cref="T:System.Data.SQLite.SQLiteModule"/> object instance to be used.
+            </param>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance used to
+            lookup the native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <param name="logErrors">
+            Non-zero if this error message should also be logged using the
+            <see cref="T:System.Data.SQLite.SQLiteLog"/> class.
+            </param>
+            <param name="logExceptions">
+            Non-zero if caught exceptions should be logged using the
+            <see cref="T:System.Data.SQLite.SQLiteLog"/> class.
+            </param>
+            <param name="error">
+            The error message.
+            </param>
+            <returns>
+            Non-zero upon success.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SetCursorError(System.Data.SQLite.SQLiteModule,System.IntPtr,System.Boolean,System.Boolean,System.String)">
+            <summary>
+            Arranges for the specified error message to be placed into the
+            zErrMsg field of a sqlite3_vtab derived structure, freeing the
+            existing error message, if any.
+            </summary>
+            <param name="module">
+            The <see cref="T:System.Data.SQLite.SQLiteModule"/> object instance to be used.
+            </param>
+            <param name="pCursor">
+            The native pointer to the sqlite3_vtab_cursor derived structure
+            used to get the native pointer to the sqlite3_vtab derived
+            structure.
+            </param>
+            <param name="logErrors">
+            Non-zero if this error message should also be logged using the
+            <see cref="T:System.Data.SQLite.SQLiteLog"/> class.
+            </param>
+            <param name="logExceptions">
+            Non-zero if caught exceptions should be logged using the
+            <see cref="T:System.Data.SQLite.SQLiteLog"/> class.
+            </param>
+            <param name="error">
+            The error message.
+            </param>
+            <returns>
+            Non-zero upon success.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SetCursorError(System.Data.SQLite.SQLiteModule,System.Data.SQLite.SQLiteVirtualTableCursor,System.Boolean,System.Boolean,System.String)">
+            <summary>
+            Arranges for the specified error message to be placed into the
+            zErrMsg field of a sqlite3_vtab derived structure, freeing the
+            existing error message, if any.
+            </summary>
+            <param name="module">
+            The <see cref="T:System.Data.SQLite.SQLiteModule"/> object instance to be used.
+            </param>
+            <param name="cursor">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance used to
+            lookup the native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <param name="logErrors">
+            Non-zero if this error message should also be logged using the
+            <see cref="T:System.Data.SQLite.SQLiteLog"/> class.
+            </param>
+            <param name="logExceptions">
+            Non-zero if caught exceptions should be logged using the
+            <see cref="T:System.Data.SQLite.SQLiteLog"/> class.
+            </param>
+            <param name="error">
+            The error message.
+            </param>
+            <returns>
+            Non-zero upon success.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.GetNativeModuleImpl">
+            <summary>
+            Gets and returns the <see cref="T:System.Data.SQLite.ISQLiteNativeModule"/> interface
+            implementation to be used when creating the native sqlite3_module
+            structure.  Derived classes may override this method to supply an
+            alternate implementation for the <see cref="T:System.Data.SQLite.ISQLiteNativeModule"/>
+            interface.
+            </summary>
+            <returns>
+            The <see cref="T:System.Data.SQLite.ISQLiteNativeModule"/> interface implementation to
+            be used when populating the native sqlite3_module structure.  If
+            the returned value is null, the private methods provided by the
+            <see cref="T:System.Data.SQLite.SQLiteModule"/> class and relating to the
+            <see cref="T:System.Data.SQLite.ISQLiteNativeModule"/> interface  will be used to
+            create the necessary delegates.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.CreateNativeModuleImpl">
+            <summary>
+            Creates and returns the <see cref="T:System.Data.SQLite.ISQLiteNativeModule"/>
+            interface implementation corresponding to the current
+            <see cref="T:System.Data.SQLite.SQLiteModule"/> object instance.
+            </summary>
+            <returns>
+            The <see cref="T:System.Data.SQLite.ISQLiteNativeModule"/> interface implementation
+            corresponding to the current <see cref="T:System.Data.SQLite.SQLiteModule"/> object
+            instance.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.AllocateTable">
+            <summary>
+            Allocates a native sqlite3_vtab derived structure and returns a
+            native pointer to it.
+            </summary>
+            <returns>
+            A native pointer to a native sqlite3_vtab derived structure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.ZeroTable(System.IntPtr)">
+            <summary>
+            Zeros out the fields of a native sqlite3_vtab derived structure.
+            </summary>
+            <param name="pVtab">
+            The native pointer to the native sqlite3_vtab derived structure to
+            zero.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.FreeTable(System.IntPtr)">
+            <summary>
+            Frees a native sqlite3_vtab structure using the provided native
+            pointer to it.
+            </summary>
+            <param name="pVtab">
+            A native pointer to a native sqlite3_vtab derived structure.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.AllocateCursor">
+            <summary>
+            Allocates a native sqlite3_vtab_cursor derived structure and
+            returns a native pointer to it.
+            </summary>
+            <returns>
+            A native pointer to a native sqlite3_vtab_cursor derived structure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.FreeCursor(System.IntPtr)">
+            <summary>
+            Frees a native sqlite3_vtab_cursor structure using the provided
+            native pointer to it.
+            </summary>
+            <param name="pCursor">
+            A native pointer to a native sqlite3_vtab_cursor derived structure.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.TableFromCursor(System.Data.SQLite.SQLiteModule,System.IntPtr)">
+            <summary>
+            Reads and returns the native pointer to the sqlite3_vtab derived
+            structure based on the native pointer to the sqlite3_vtab_cursor
+            derived structure.
+            </summary>
+            <param name="module">
+            The <see cref="T:System.Data.SQLite.SQLiteModule"/> object instance to be used.
+            </param>
+            <param name="pCursor">
+            The native pointer to the sqlite3_vtab_cursor derived structure
+            from which to read the native pointer to the sqlite3_vtab derived
+            structure.
+            </param>
+            <returns>
+            The native pointer to the sqlite3_vtab derived structure -OR-
+            <see cref="F:System.IntPtr.Zero"/> if it cannot be determined.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.TableFromCursor(System.IntPtr)">
+            <summary>
+            Reads and returns the native pointer to the sqlite3_vtab derived
+            structure based on the native pointer to the sqlite3_vtab_cursor
+            derived structure.
+            </summary>
+            <param name="pCursor">
+            The native pointer to the sqlite3_vtab_cursor derived structure
+            from which to read the native pointer to the sqlite3_vtab derived
+            structure.
+            </param>
+            <returns>
+            The native pointer to the sqlite3_vtab derived structure -OR-
+            <see cref="F:System.IntPtr.Zero"/> if it cannot be determined.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.TableFromIntPtr(System.IntPtr)">
+            <summary>
+            Looks up and returns the <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object
+            instance based on the native pointer to the sqlite3_vtab derived
+            structure.
+            </summary>
+            <param name="pVtab">
+            The native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <returns>
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance or null if
+            the corresponding one cannot be found.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.TableToIntPtr(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            Allocates and returns a native pointer to a sqlite3_vtab derived
+            structure and creates an association between it and the specified
+            <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance to be used
+            when creating the association.
+            </param>
+            <returns>
+            The native pointer to a sqlite3_vtab derived structure or
+            <see cref="F:System.IntPtr.Zero"/> if the method fails for any reason.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.CursorFromIntPtr(System.IntPtr,System.IntPtr)">
+            <summary>
+            Looks up and returns the <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/>
+            object instance based on the native pointer to the
+            sqlite3_vtab_cursor derived structure.
+            </summary>
+            <param name="pVtab">
+            The native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <param name="pCursor">
+            The native pointer to the sqlite3_vtab_cursor derived structure.
+            </param>
+            <returns>
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance or null
+            if the corresponding one cannot be found.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.CursorToIntPtr(System.Data.SQLite.SQLiteVirtualTableCursor)">
+            <summary>
+            Allocates and returns a native pointer to a sqlite3_vtab_cursor
+            derived structure and creates an association between it and the
+            specified <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance.
+            </summary>
+            <param name="cursor">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance to be
+            used when creating the association.
+            </param>
+            <returns>
+            The native pointer to a sqlite3_vtab_cursor derived structure or
+            <see cref="F:System.IntPtr.Zero"/> if the method fails for any reason.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.GetFunctionKey(System.Int32,System.String,System.Data.SQLite.SQLiteFunction)">
+            <summary>
+            Deterimines the key that should be used to identify and store the
+            <see cref="T:System.Data.SQLite.SQLiteFunction"/> object instance for the virtual table
+            (i.e. to be returned via the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)"/> method).
+            </summary>
+            <param name="argumentCount">
+            The number of arguments to the virtual table function.
+            </param>
+            <param name="name">
+            The name of the virtual table function.
+            </param>
+            <param name="function">
+            The <see cref="T:System.Data.SQLite.SQLiteFunction"/> object instance associated with
+            this virtual table function.
+            </param>
+            <returns>
+            The string that should be used to identify and store the virtual
+            table function instance.  This method cannot return null.  If null
+            is returned from this method, the behavior is undefined.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.DeclareTable(System.Data.SQLite.SQLiteConnection,System.String,System.String@)">
+            <summary>
+            Attempts to declare the schema for the virtual table using the
+            specified database connection.
+            </summary>
+            <param name="connection">
+            The <see cref="T:System.Data.SQLite.SQLiteConnection"/> object instance to use when
+            declaring the schema of the virtual table.  This parameter may not
+            be null.
+            </param>
+            <param name="sql">
+            The string containing the CREATE TABLE statement that completely
+            describes the schema for the virtual table.  This parameter may not
+            be null.
+            </param>
+            <param name="error">
+            Upon failure, this parameter must be modified to contain an error
+            message.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.DeclareFunction(System.Data.SQLite.SQLiteConnection,System.Int32,System.String,System.String@)">
+            <summary>
+            Calls the native SQLite core library in order to declare a virtual
+            table function in response to a call into the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/>
+            or <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> virtual table
+            methods.
+            </summary>
+            <param name="connection">
+            The <see cref="T:System.Data.SQLite.SQLiteConnection"/> object instance to use when
+            declaring the schema of the virtual table.
+            </param>
+            <param name="argumentCount">
+            The number of arguments to the function being declared.
+            </param>
+            <param name="name">
+            The name of the function being declared.
+            </param>
+            <param name="error">
+            Upon success, the contents of this parameter are undefined.  Upon
+            failure, it should contain an appropriate error message.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SetTableError(System.IntPtr,System.String)">
+            <summary>
+            Arranges for the specified error message to be placed into the
+            zErrMsg field of a sqlite3_vtab derived structure, freeing the
+            existing error message, if any.
+            </summary>
+            <param name="pVtab">
+            The native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <param name="error">
+            The error message.
+            </param>
+            <returns>
+            Non-zero upon success.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SetTableError(System.Data.SQLite.SQLiteVirtualTable,System.String)">
+            <summary>
+            Arranges for the specified error message to be placed into the
+            zErrMsg field of a sqlite3_vtab derived structure, freeing the
+            existing error message, if any.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance used to
+            lookup the native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <param name="error">
+            The error message.
+            </param>
+            <returns>
+            Non-zero upon success.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SetCursorError(System.Data.SQLite.SQLiteVirtualTableCursor,System.String)">
+            <summary>
+            Arranges for the specified error message to be placed into the
+            zErrMsg field of a sqlite3_vtab derived structure, freeing the
+            existing error message, if any.
+            </summary>
+            <param name="cursor">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance used to
+            lookup the native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <param name="error">
+            The error message.
+            </param>
+            <returns>
+            Non-zero upon success.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SetEstimatedCost(System.Data.SQLite.SQLiteIndex,System.Nullable{System.Double})">
+            <summary>
+            Modifies the specified <see cref="T:System.Data.SQLite.SQLiteIndex"/> object instance
+            to contain the specified estimated cost.
+            </summary>
+            <param name="index">
+            The <see cref="T:System.Data.SQLite.SQLiteIndex"/> object instance to modify.
+            </param>
+            <param name="estimatedCost">
+            The estimated cost value to use.  Using a null value means that the
+            default value provided by the SQLite core library should be used.
+            </param>
+            <returns>
+            Non-zero upon success.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SetEstimatedCost(System.Data.SQLite.SQLiteIndex)">
+            <summary>
+            Modifies the specified <see cref="T:System.Data.SQLite.SQLiteIndex"/> object instance
+            to contain the default estimated cost.
+            </summary>
+            <param name="index">
+            The <see cref="T:System.Data.SQLite.SQLiteIndex"/> object instance to modify.
+            </param>
+            <returns>
+            Non-zero upon success.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SetEstimatedRows(System.Data.SQLite.SQLiteIndex,System.Nullable{System.Int64})">
+            <summary>
+            Modifies the specified <see cref="T:System.Data.SQLite.SQLiteIndex"/> object instance
+            to contain the specified estimated rows.
+            </summary>
+            <param name="index">
+            The <see cref="T:System.Data.SQLite.SQLiteIndex"/> object instance to modify.
+            </param>
+            <param name="estimatedRows">
+            The estimated rows value to use.  Using a null value means that the
+            default value provided by the SQLite core library should be used.
+            </param>
+            <returns>
+            Non-zero upon success.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SetEstimatedRows(System.Data.SQLite.SQLiteIndex)">
+            <summary>
+            Modifies the specified <see cref="T:System.Data.SQLite.SQLiteIndex"/> object instance
+            to contain the default estimated rows.
+            </summary>
+            <param name="index">
+            The <see cref="T:System.Data.SQLite.SQLiteIndex"/> object instance to modify.
+            </param>
+            <returns>
+            Non-zero upon success.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SetIndexFlags(System.Data.SQLite.SQLiteIndex,System.Nullable{System.Data.SQLite.SQLiteIndexFlags})">
+            <summary>
+            Modifies the specified <see cref="T:System.Data.SQLite.SQLiteIndex"/> object instance
+            to contain the specified flags.
+            </summary>
+            <param name="index">
+            The <see cref="T:System.Data.SQLite.SQLiteIndex"/> object instance to modify.
+            </param>
+            <param name="indexFlags">
+            The index flags value to use.  Using a null value means that the
+            default value provided by the SQLite core library should be used.
+            </param>
+            <returns>
+            Non-zero upon success.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SetIndexFlags(System.Data.SQLite.SQLiteIndex)">
+            <summary>
+            Modifies the specified <see cref="T:System.Data.SQLite.SQLiteIndex"/> object instance
+            to contain the default index flags.
+            </summary>
+            <param name="index">
+            The <see cref="T:System.Data.SQLite.SQLiteIndex"/> object instance to modify.
+            </param>
+            <returns>
+            Non-zero upon success.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </summary>
+            <param name="pDb">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <param name="pAux">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <param name="argc">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <param name="argv">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <param name="pError">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </summary>
+            <param name="pDb">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <param name="pAux">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <param name="argc">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <param name="argv">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <param name="pError">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xBestIndex(System.IntPtr,System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)"/> method.
+            </param>
+            <param name="pIndex">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xDisconnect(System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xDestroy(System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xOpen(System.IntPtr,System.IntPtr@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)"/> method.
+            </param>
+            <param name="pCursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xClose(System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xClose(System.IntPtr)"/> method.
+            </summary>
+            <param name="pCursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xClose(System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xClose(System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> method.
+            </summary>
+            <param name="pCursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> method.
+            </param>
+            <param name="idxNum">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> method.
+            </param>
+            <param name="idxStr">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> method.
+            </param>
+            <param name="argc">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> method.
+            </param>
+            <param name="argv">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xNext(System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xNext(System.IntPtr)"/> method.
+            </summary>
+            <param name="pCursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xNext(System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xNext(System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xEof(System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xEof(System.IntPtr)"/> method.
+            </summary>
+            <param name="pCursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xEof(System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xEof(System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)"/> method.
+            </summary>
+            <param name="pCursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)"/> method.
+            </param>
+            <param name="pContext">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)"/> method.
+            </param>
+            <param name="index">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xRowId(System.IntPtr,System.Int64@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)"/> method.
+            </summary>
+            <param name="pCursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)"/> method.
+            </param>
+            <param name="rowId">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)"/> method.
+            </param>
+            <param name="argc">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)"/> method.
+            </param>
+            <param name="argv">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)"/> method.
+            </param>
+            <param name="rowId">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xBegin(System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xBegin(System.IntPtr)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xBegin(System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xBegin(System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xSync(System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xSync(System.IntPtr)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xSync(System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xSync(System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xCommit(System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCommit(System.IntPtr)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCommit(System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCommit(System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xRollback(System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRollback(System.IntPtr)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRollback(System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRollback(System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)"/> method.
+            </param>
+            <param name="nArg">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)"/> method.
+            </param>
+            <param name="zName">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)"/> method.
+            </param>
+            <param name="callback">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)"/> method.
+            </param>
+            <param name="pClientData">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xRename(System.IntPtr,System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)"/> method.
+            </param>
+            <param name="zNew">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xSavepoint(System.IntPtr,System.Int32)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)"/> method.
+            </param>
+            <param name="iSavepoint">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xRelease(System.IntPtr,System.Int32)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)"/> method.
+            </param>
+            <param name="iSavepoint">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.xRollbackTo(System.IntPtr,System.Int32)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)"/> method.
+            </param>
+            <param name="iSavepoint">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </summary>
+            <param name="connection">
+            The <see cref="T:System.Data.SQLite.SQLiteConnection"/> object instance associated with
+            the virtual table.
+            </param>
+            <param name="pClientData">
+            The native user-data pointer associated with this module, as it was
+            provided to the SQLite core library when the native module instance
+            was created.
+            </param>
+            <param name="arguments">
+            The module name, database name, virtual table name, and all other
+            arguments passed to the CREATE VIRTUAL TABLE statement.
+            </param>
+            <param name="table">
+            Upon success, this parameter must be modified to contain the
+            <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated with
+            the virtual table.
+            </param>
+            <param name="error">
+            Upon failure, this parameter must be modified to contain an error
+            message.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </summary>
+            <param name="connection">
+            The <see cref="T:System.Data.SQLite.SQLiteConnection"/> object instance associated with
+            the virtual table.
+            </param>
+            <param name="pClientData">
+            The native user-data pointer associated with this module, as it was
+            provided to the SQLite core library when the native module instance
+            was created.
+            </param>
+            <param name="arguments">
+            The module name, database name, virtual table name, and all other
+            arguments passed to the CREATE VIRTUAL TABLE statement.
+            </param>
+            <param name="table">
+            Upon success, this parameter must be modified to contain the
+            <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated with
+            the virtual table.
+            </param>
+            <param name="error">
+            Upon failure, this parameter must be modified to contain an error
+            message.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <param name="index">
+            The <see cref="T:System.Data.SQLite.SQLiteIndex"/> object instance containing all the
+            data for the inputs and outputs relating to index selection.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.Disconnect(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.Destroy(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <param name="cursor">
+            Upon success, this parameter must be modified to contain the
+            <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance associated
+            with the newly opened virtual table cursor.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.Close(System.Data.SQLite.SQLiteVirtualTableCursor)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xClose(System.IntPtr)"/> method.
+            </summary>
+            <param name="cursor">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance
+            associated with the previously opened virtual table cursor to be
+            used.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> method.
+            </summary>
+            <param name="cursor">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance
+            associated with the previously opened virtual table cursor to be
+            used.
+            </param>
+            <param name="indexNumber">
+            Number used to help identify the selected index.
+            </param>
+            <param name="indexString">
+            String used to help identify the selected index.
+            </param>
+            <param name="values">
+            The values corresponding to each column in the selected index.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.Next(System.Data.SQLite.SQLiteVirtualTableCursor)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xNext(System.IntPtr)"/> method.
+            </summary>
+            <param name="cursor">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance
+            associated with the previously opened virtual table cursor to be
+            used.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xEof(System.IntPtr)"/> method.
+            </summary>
+            <param name="cursor">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance
+            associated with the previously opened virtual table cursor to be
+            used.
+            </param>
+            <returns>
+            Non-zero if no more rows are available; zero otherwise.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)"/> method.
+            </summary>
+            <param name="cursor">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance
+            associated with the previously opened virtual table cursor to be
+            used.
+            </param>
+            <param name="context">
+            The <see cref="T:System.Data.SQLite.SQLiteContext"/> object instance to be used for
+            returning the specified column value to the SQLite core library.
+            </param>
+            <param name="index">
+            The zero-based index corresponding to the column containing the
+            value to be returned.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)"/> method.
+            </summary>
+            <param name="cursor">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance
+            associated with the previously opened virtual table cursor to be
+            used.
+            </param>
+            <param name="rowId">
+            Upon success, this parameter must be modified to contain the unique
+            integer row identifier for the current row for the specified cursor.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <param name="values">
+            The array of <see cref="T:System.Data.SQLite.SQLiteValue"/> object instances containing
+            the new or modified column values, if any.
+            </param>
+            <param name="rowId">
+            Upon success, this parameter must be modified to contain the unique
+            integer row identifier for the row that was inserted, if any.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.Begin(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xBegin(System.IntPtr)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.Sync(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xSync(System.IntPtr)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.Commit(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCommit(System.IntPtr)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.Rollback(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRollback(System.IntPtr)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <param name="argumentCount">
+            The number of arguments to the function being sought.
+            </param>
+            <param name="name">
+            The name of the function being sought.
+            </param>
+            <param name="function">
+            Upon success, this parameter must be modified to contain the
+            <see cref="T:System.Data.SQLite.SQLiteFunction"/> object instance responsible for
+            implementing the specified function.
+            </param>
+            <param name="pClientData">
+            Upon success, this parameter must be modified to contain the
+            native user-data pointer associated with
+            <paramref name="function"/>.
+            </param>
+            <returns>
+            Non-zero if the specified function was found; zero otherwise.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <param name="newName">
+            The new name for the virtual table.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.Savepoint(System.Data.SQLite.SQLiteVirtualTable,System.Int32)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <param name="savepoint">
+            This is an integer identifier under which the the current state of
+            the virtual table should be saved.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.Release(System.Data.SQLite.SQLiteVirtualTable,System.Int32)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <param name="savepoint">
+            This is an integer used to indicate that any saved states with an
+            identifier greater than or equal to this should be deleted by the
+            virtual table.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.RollbackTo(System.Data.SQLite.SQLiteVirtualTable,System.Int32)">
+            <summary>
+            This method is called in response to the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)"/> method.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this virtual table.
+            </param>
+            <param name="savepoint">
+            This is an integer identifier used to specify a specific saved
+            state for the virtual table for it to restore itself back to, which
+            should also have the effect of deleting all saved states with an
+            integer identifier greater than this one.
+            </param>
+            <returns>
+            A standard SQLite return code.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.Dispose">
+            <summary>
+            Disposes of this object instance.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.CheckDisposed">
+            <summary>
+            Throws an <see cref="T:System.ObjectDisposedException"/> if this object
+            instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.Dispose(System.Boolean)">
+            <summary>
+            Disposes of this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this method is being called from the
+            <see cref="M:System.Data.SQLite.SQLiteModule.Dispose"/> method.  Zero if this method is being
+            called from the finalizer.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.Finalize">
+            <summary>
+            Finalizes this object instance.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteModule.LogErrorsNoThrow">
+            <summary>
+            Returns or sets a boolean value indicating whether virtual table
+            errors should be logged using the <see cref="T:System.Data.SQLite.SQLiteLog"/> class.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteModule.LogExceptionsNoThrow">
+            <summary>
+            Returns or sets a boolean value indicating whether exceptions
+            caught in the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)"/> method,
+            the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)"/> method,
+            the <see cref="M:System.Data.SQLite.SQLiteModule.SetTableError(System.IntPtr,System.String)"/> method,
+            the <see cref="M:System.Data.SQLite.SQLiteModule.SetTableError(System.Data.SQLite.SQLiteVirtualTable,System.String)"/> method,
+            and the <see cref="M:System.Data.SQLite.SQLiteModule.Dispose"/> method should be logged using the
+            <see cref="T:System.Data.SQLite.SQLiteLog"/> class.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteModule.LogErrors">
+            <summary>
+            Returns or sets a boolean value indicating whether virtual table
+            errors should be logged using the <see cref="T:System.Data.SQLite.SQLiteLog"/> class.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteModule.LogExceptions">
+            <summary>
+            Returns or sets a boolean value indicating whether exceptions
+            caught in the
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)"/> method,
+            <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)"/> method, and the
+            <see cref="M:System.Data.SQLite.SQLiteModule.Dispose"/> method should be logged using the
+            <see cref="T:System.Data.SQLite.SQLiteLog"/> class.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteModule.Declared">
+            <summary>
+            Returns non-zero if the schema for the virtual table has been
+            declared.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteModule.Name">
+            <summary>
+            Returns the name of the module as it was registered with the SQLite
+            core library.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteModule.SQLiteNativeModule">
+            <summary>
+            This class implements the <see cref="T:System.Data.SQLite.ISQLiteNativeModule"/>
+            interface by forwarding those method calls to the
+            <see cref="T:System.Data.SQLite.SQLiteModule"/> object instance it contains.  If the
+            contained <see cref="T:System.Data.SQLite.SQLiteModule"/> object instance is null, all
+            the <see cref="T:System.Data.SQLite.ISQLiteNativeModule"/> methods simply generate an
+            error.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.DefaultLogErrors">
+            <summary>
+            This is the value that is always used for the "logErrors"
+            parameter to the various static error handling methods provided
+            by the <see cref="T:System.Data.SQLite.SQLiteModule"/> class.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.DefaultLogExceptions">
+            <summary>
+            This is the value that is always used for the "logExceptions"
+            parameter to the various static error handling methods provided
+            by the <see cref="T:System.Data.SQLite.SQLiteModule"/> class.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.ModuleNotAvailableErrorMessage">
+            <summary>
+            This is the error message text used when the contained
+            <see cref="T:System.Data.SQLite.SQLiteModule"/> object instance is not available
+            for any reason.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.module">
+            <summary>
+            The <see cref="T:System.Data.SQLite.SQLiteModule"/> object instance used to provide
+            an implementation of the <see cref="T:System.Data.SQLite.ISQLiteNativeModule"/>
+            interface.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.#ctor(System.Data.SQLite.SQLiteModule)">
+            <summary>
+            Constructs an instance of this class.
+            </summary>
+            <param name="module">
+            The <see cref="T:System.Data.SQLite.SQLiteModule"/> object instance used to provide
+            an implementation of the <see cref="T:System.Data.SQLite.ISQLiteNativeModule"/>
+            interface.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.ModuleNotAvailableTableError(System.IntPtr)">
+            <summary>
+            Sets the table error message to one that indicates the native
+            module implementation is not available.
+            </summary>
+            <param name="pVtab">
+            The native pointer to the sqlite3_vtab derived structure.
+            </param>
+            <returns>
+            The value of <see cref="F:System.Data.SQLite.SQLiteErrorCode.Error"/>.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.ModuleNotAvailableCursorError(System.IntPtr)">
+            <summary>
+            Sets the table error message to one that indicates the native
+            module implementation is not available.
+            </summary>
+            <param name="pCursor">
+            The native pointer to the sqlite3_vtab_cursor derived
+            structure.
+            </param>
+            <returns>
+            The value of <see cref="F:System.Data.SQLite.SQLiteErrorCode.Error"/>.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </summary>
+            <param name="pDb">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <param name="pAux">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <param name="argc">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <param name="argv">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <param name="pError">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCreate(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </summary>
+            <param name="pDb">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <param name="pAux">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <param name="argc">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <param name="argv">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <param name="pError">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xConnect(System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr@,System.IntPtr@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)"/> method.
+            </param>
+            <param name="pIndex">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xBestIndex(System.IntPtr,System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xDisconnect(System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xDisconnect(System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xDestroy(System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xDestroy(System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)"/> method.
+            </param>
+            <param name="pCursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xOpen(System.IntPtr,System.IntPtr@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xClose(System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xClose(System.IntPtr)"/> method.
+            </summary>
+            <param name="pCursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xClose(System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xClose(System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> method.
+            </summary>
+            <param name="pCursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> method.
+            </param>
+            <param name="idxNum">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> method.
+            </param>
+            <param name="idxStr">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> method.
+            </param>
+            <param name="argc">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> method.
+            </param>
+            <param name="argv">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFilter(System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xNext(System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xNext(System.IntPtr)"/> method.
+            </summary>
+            <param name="pCursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xNext(System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xNext(System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xEof(System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xEof(System.IntPtr)"/> method.
+            </summary>
+            <param name="pCursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xEof(System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xEof(System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)"/> method.
+            </summary>
+            <param name="pCursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)"/> method.
+            </param>
+            <param name="pContext">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)"/> method.
+            </param>
+            <param name="index">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xColumn(System.IntPtr,System.IntPtr,System.Int32)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)"/> method.
+            </summary>
+            <param name="pCursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)"/> method.
+            </param>
+            <param name="rowId">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRowId(System.IntPtr,System.Int64@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)"/> method.
+            </param>
+            <param name="argc">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)"/> method.
+            </param>
+            <param name="argv">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)"/> method.
+            </param>
+            <param name="rowId">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xUpdate(System.IntPtr,System.Int32,System.IntPtr,System.Int64@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xBegin(System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xBegin(System.IntPtr)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xBegin(System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xBegin(System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xSync(System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xSync(System.IntPtr)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xSync(System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xSync(System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xCommit(System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCommit(System.IntPtr)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCommit(System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xCommit(System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xRollback(System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRollback(System.IntPtr)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRollback(System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRollback(System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)"/> method.
+            </param>
+            <param name="nArg">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)"/> method.
+            </param>
+            <param name="zName">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)"/> method.
+            </param>
+            <param name="callback">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)"/> method.
+            </param>
+            <param name="pClientData">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xFindFunction(System.IntPtr,System.Int32,System.IntPtr,System.Data.SQLite.SQLiteCallback@,System.IntPtr@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)"/> method.
+            </param>
+            <param name="zNew">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRename(System.IntPtr,System.IntPtr)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)"/> method.
+            </param>
+            <param name="iSavepoint">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xSavepoint(System.IntPtr,System.Int32)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xRelease(System.IntPtr,System.Int32)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)"/> method.
+            </param>
+            <param name="iSavepoint">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRelease(System.IntPtr,System.Int32)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)"/> method.
+            </summary>
+            <param name="pVtab">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)"/> method.
+            </param>
+            <param name="iSavepoint">
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteNativeModule.xRollbackTo(System.IntPtr,System.Int32)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.Dispose">
+            <summary>
+            Disposes of this object instance.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.CheckDisposed">
+            <summary>
+            Throws an <see cref="T:System.ObjectDisposedException"/> if this object
+            instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.Dispose(System.Boolean)">
+            <summary>
+            Disposes of this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this method is being called from the
+            <see cref="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.Dispose"/> method.  Zero if this method is being
+            called from the finalizer.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModule.SQLiteNativeModule.Finalize">
+            <summary>
+            Finalizes this object instance.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteModuleCommon">
+            <summary>
+            This class contains some virtual methods that may be useful for other
+            virtual table classes.  It specifically does NOT implement any of the
+            <see cref="T:System.Data.SQLite.ISQLiteManagedModule"/> interface methods.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteModuleNoop">
+            <summary>
+            This class implements a virtual table module that does nothing by
+            providing "empty" implementations for all of the
+            <see cref="T:System.Data.SQLite.ISQLiteManagedModule"/> interface methods.  The result
+            codes returned by these "empty" method implementations may be
+            controlled on a per-method basis by using and/or overriding the
+            <see cref="M:System.Data.SQLite.SQLiteModuleNoop.GetDefaultResultCode"/>,
+            <see cref="M:System.Data.SQLite.SQLiteModuleNoop.ResultCodeToEofResult(System.Data.SQLite.SQLiteErrorCode)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteModuleNoop.ResultCodeToFindFunctionResult(System.Data.SQLite.SQLiteErrorCode)"/>,
+            <see cref="M:System.Data.SQLite.SQLiteModuleNoop.GetMethodResultCode(System.String)"/>, and
+            <see cref="M:System.Data.SQLite.SQLiteModuleNoop.SetMethodResultCode(System.String,System.Data.SQLite.SQLiteErrorCode)"/> methods from within derived classes.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteModuleNoop.resultCodes">
+            <summary>
+            This field is used to store the <see cref="T:System.Data.SQLite.SQLiteErrorCode"/>
+            values to return, on a per-method basis, for all methods that are
+            part of the <see cref="T:System.Data.SQLite.ISQLiteManagedModule"/> interface.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.#ctor(System.String)">
+            <summary>
+            Constructs an instance of this class.
+            </summary>
+            <param name="name">
+            The name of the module.  This parameter cannot be null.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.GetDefaultResultCode">
+            <summary>
+            Determines the default <see cref="T:System.Data.SQLite.SQLiteErrorCode"/> value to be
+            returned by methods of the <see cref="T:System.Data.SQLite.ISQLiteManagedModule"/>
+            interface that lack an overridden implementation in all classes
+            derived from the <see cref="T:System.Data.SQLite.SQLiteModuleNoop"/> class.
+            </summary>
+            <returns>
+            The <see cref="T:System.Data.SQLite.SQLiteErrorCode"/> value that should be returned
+            by all <see cref="T:System.Data.SQLite.ISQLiteManagedModule"/> interface methods unless
+            a more specific result code has been set for that interface method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.ResultCodeToEofResult(System.Data.SQLite.SQLiteErrorCode)">
+            <summary>
+            Converts a <see cref="T:System.Data.SQLite.SQLiteErrorCode"/> value into a boolean
+            return value for use with the
+            <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)"/> method.
+            </summary>
+            <param name="resultCode">
+            The <see cref="T:System.Data.SQLite.SQLiteErrorCode"/> value to convert.
+            </param>
+            <returns>
+            The <see cref="T:System.Boolean"/> value.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.ResultCodeToFindFunctionResult(System.Data.SQLite.SQLiteErrorCode)">
+            <summary>
+            Converts a <see cref="T:System.Data.SQLite.SQLiteErrorCode"/> value into a boolean
+            return value for use with the
+            <see cref="M:System.Data.SQLite.ISQLiteManagedModule.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)"/> method.
+            </summary>
+            <param name="resultCode">
+            The <see cref="T:System.Data.SQLite.SQLiteErrorCode"/> value to convert.
+            </param>
+            <returns>
+            The <see cref="T:System.Boolean"/> value.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.GetMethodResultCode(System.String)">
+            <summary>
+            Determines the <see cref="T:System.Data.SQLite.SQLiteErrorCode"/> value that should be
+            returned by the specified <see cref="T:System.Data.SQLite.ISQLiteManagedModule"/>
+            interface method if it lack an overridden implementation.  If no
+            specific <see cref="T:System.Data.SQLite.SQLiteErrorCode"/> value is available (or set)
+            for the specified method, the <see cref="T:System.Data.SQLite.SQLiteErrorCode"/> value
+            returned by the <see cref="M:System.Data.SQLite.SQLiteModuleNoop.GetDefaultResultCode"/> method will be
+            returned instead.
+            </summary>
+            <param name="methodName">
+            The name of the method.  Currently, this method must be part of
+            the <see cref="T:System.Data.SQLite.ISQLiteManagedModule"/> interface.
+            </param>
+            <returns>
+            The <see cref="T:System.Data.SQLite.SQLiteErrorCode"/> value that should be returned
+            by the <see cref="T:System.Data.SQLite.ISQLiteManagedModule"/> interface method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.SetMethodResultCode(System.String,System.Data.SQLite.SQLiteErrorCode)">
+            <summary>
+            Sets the <see cref="T:System.Data.SQLite.SQLiteErrorCode"/> value that should be
+            returned by the specified <see cref="T:System.Data.SQLite.ISQLiteManagedModule"/>
+            interface method if it lack an overridden implementation.
+            </summary>
+            <param name="methodName">
+            The name of the method.  Currently, this method must be part of
+            the <see cref="T:System.Data.SQLite.ISQLiteManagedModule"/> interface.
+            </param>
+            <param name="resultCode">
+            The <see cref="T:System.Data.SQLite.SQLiteErrorCode"/> value that should be returned
+            by the <see cref="T:System.Data.SQLite.ISQLiteManagedModule"/> interface method.
+            </param>
+            <returns>
+            Non-zero upon success.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </summary>
+            <param name="connection">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </param>
+            <param name="pClientData">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </param>
+            <param name="arguments">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </param>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </param>
+            <param name="error">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </summary>
+            <param name="connection">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </param>
+            <param name="pClientData">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </param>
+            <param name="arguments">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </param>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </param>
+            <param name="error">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)"/> method.
+            </summary>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)"/> method.
+            </param>
+            <param name="index">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.Disconnect(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Disconnect(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </summary>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Disconnect(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Disconnect(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.Destroy(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Destroy(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </summary>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Destroy(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Destroy(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)"/> method.
+            </summary>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)"/> method.
+            </param>
+            <param name="cursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.Close(System.Data.SQLite.SQLiteVirtualTableCursor)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Close(System.Data.SQLite.SQLiteVirtualTableCursor)"/> method.
+            </summary>
+            <param name="cursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Close(System.Data.SQLite.SQLiteVirtualTableCursor)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Close(System.Data.SQLite.SQLiteVirtualTableCursor)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])"/> method.
+            </summary>
+            <param name="cursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])"/> method.
+            </param>
+            <param name="indexNumber">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])"/> method.
+            </param>
+            <param name="indexString">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])"/> method.
+            </param>
+            <param name="values">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.Next(System.Data.SQLite.SQLiteVirtualTableCursor)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Next(System.Data.SQLite.SQLiteVirtualTableCursor)"/> method.
+            </summary>
+            <param name="cursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Next(System.Data.SQLite.SQLiteVirtualTableCursor)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Next(System.Data.SQLite.SQLiteVirtualTableCursor)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)"/> method.
+            </summary>
+            <param name="cursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)"/> method.
+            </summary>
+            <param name="cursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)"/> method.
+            </param>
+            <param name="context">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)"/> method.
+            </param>
+            <param name="index">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)"/> method.
+            </summary>
+            <param name="cursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)"/> method.
+            </param>
+            <param name="rowId">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)"/> method.
+            </summary>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)"/> method.
+            </param>
+            <param name="values">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)"/> method.
+            </param>
+            <param name="rowId">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.Begin(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Begin(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </summary>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Begin(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Begin(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.Sync(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Sync(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </summary>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Sync(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Sync(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.Commit(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Commit(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </summary>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Commit(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Commit(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.Rollback(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Rollback(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </summary>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Rollback(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Rollback(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)"/> method.
+            </summary>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)"/> method.
+            </param>
+            <param name="argumentCount">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)"/> method.
+            </param>
+            <param name="name">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)"/> method.
+            </param>
+            <param name="function">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)"/> method.
+            </param>
+            <param name="pClientData">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.FindFunction(System.Data.SQLite.SQLiteVirtualTable,System.Int32,System.String,System.Data.SQLite.SQLiteFunction@,System.IntPtr@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)"/> method.
+            </summary>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)"/> method.
+            </param>
+            <param name="newName">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.Savepoint(System.Data.SQLite.SQLiteVirtualTable,System.Int32)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Savepoint(System.Data.SQLite.SQLiteVirtualTable,System.Int32)"/> method.
+            </summary>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Savepoint(System.Data.SQLite.SQLiteVirtualTable,System.Int32)"/> method.
+            </param>
+            <param name="savepoint">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Savepoint(System.Data.SQLite.SQLiteVirtualTable,System.Int32)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Savepoint(System.Data.SQLite.SQLiteVirtualTable,System.Int32)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.Release(System.Data.SQLite.SQLiteVirtualTable,System.Int32)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Release(System.Data.SQLite.SQLiteVirtualTable,System.Int32)"/> method.
+            </summary>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Release(System.Data.SQLite.SQLiteVirtualTable,System.Int32)"/> method.
+            </param>
+            <param name="savepoint">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Release(System.Data.SQLite.SQLiteVirtualTable,System.Int32)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Release(System.Data.SQLite.SQLiteVirtualTable,System.Int32)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.RollbackTo(System.Data.SQLite.SQLiteVirtualTable,System.Int32)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.RollbackTo(System.Data.SQLite.SQLiteVirtualTable,System.Int32)"/> method.
+            </summary>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.RollbackTo(System.Data.SQLite.SQLiteVirtualTable,System.Int32)"/> method.
+            </param>
+            <param name="savepoint">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.RollbackTo(System.Data.SQLite.SQLiteVirtualTable,System.Int32)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.RollbackTo(System.Data.SQLite.SQLiteVirtualTable,System.Int32)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.CheckDisposed">
+            <summary>
+            Throws an <see cref="T:System.ObjectDisposedException"/> if this object
+            instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleNoop.Dispose(System.Boolean)">
+            <summary>
+            Disposes of this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this method is being called from the
+            <see cref="M:System.IDisposable.Dispose"/> method.  Zero if this method is
+            being called from the finalizer.
+            </param>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteModuleCommon.declareSql">
+            <summary>
+            The CREATE TABLE statement used to declare the schema for the
+            virtual table.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteModuleCommon.objectIdentity">
+            <summary>
+            Non-zero if different object instances with the same value should
+            generate different row identifiers, where applicable.  This has no
+            effect on the .NET Compact Framework.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleCommon.#ctor(System.String)">
+            <summary>
+            Constructs an instance of this class.
+            </summary>
+            <param name="name">
+            The name of the module.  This parameter cannot be null.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleCommon.#ctor(System.String,System.Boolean)">
+            <summary>
+            Constructs an instance of this class.
+            </summary>
+            <param name="name">
+            The name of the module.  This parameter cannot be null.
+            </param>
+            <param name="objectIdentity">
+            Non-zero if different object instances with the same value should
+            generate different row identifiers, where applicable.  This
+            parameter has no effect on the .NET Compact Framework.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleCommon.GetSqlForDeclareTable">
+            <summary>
+            Determines the SQL statement used to declare the virtual table.
+            This method should be overridden in derived classes if they require
+            a custom virtual table schema.
+            </summary>
+            <returns>
+            The SQL statement used to declare the virtual table -OR- null if it
+            cannot be determined.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleCommon.CursorTypeMismatchError(System.Data.SQLite.SQLiteVirtualTableCursor,System.Type)">
+            <summary>
+            Sets the table error message to one that indicates the virtual
+            table cursor is of the wrong type.
+            </summary>
+            <param name="cursor">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance.
+            </param>
+            <param name="type">
+            The <see cref="T:System.Type"/> that the virtual table cursor should be.
+            </param>
+            <returns>
+            The value of <see cref="F:System.Data.SQLite.SQLiteErrorCode.Error"/>.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleCommon.GetStringFromObject(System.Data.SQLite.SQLiteVirtualTableCursor,System.Object)">
+            <summary>
+            Determines the string to return as the column value for the object
+            instance value.
+            </summary>
+            <param name="cursor">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance
+            associated with the previously opened virtual table cursor to be
+            used.
+            </param>
+            <param name="value">
+            The object instance to return a string representation for.
+            </param>
+            <returns>
+            The string representation of the specified object instance or null
+            upon failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleCommon.MakeRowId(System.Int32,System.Int32)">
+            <summary>
+            Constructs an <see cref="T:System.Int64"/> unique row identifier from two
+            <see cref="T:System.Int32"/> values.  The first <see cref="T:System.Int32"/> value
+            must contain the row sequence number for the current row and the
+            second value must contain the hash code of the key column value
+            for the current row.
+            </summary>
+            <param name="rowIndex">
+            The integer row sequence number for the current row.
+            </param>
+            <param name="hashCode">
+            The hash code of the key column value for the current row.
+            </param>
+            <returns>
+            The unique row identifier or zero upon failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleCommon.GetRowIdFromObject(System.Data.SQLite.SQLiteVirtualTableCursor,System.Object)">
+            <summary>
+            Determines the unique row identifier for the current row.
+            </summary>
+            <param name="cursor">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance
+            associated with the previously opened virtual table cursor to be
+            used.
+            </param>
+            <param name="value">
+            The object instance to return a unique row identifier for.
+            </param>
+            <returns>
+            The unique row identifier or zero upon failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleCommon.CheckDisposed">
+            <summary>
+            Throws an <see cref="T:System.ObjectDisposedException"/> if this object
+            instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleCommon.Dispose(System.Boolean)">
+            <summary>
+            Disposes of this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this method is being called from the
+            <see cref="M:System.IDisposable.Dispose"/> method.  Zero if this method is
+            being called from the finalizer.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator">
+            <summary>
+            This class represents a virtual table cursor to be used with the
+            <see cref="T:System.Data.SQLite.SQLiteModuleEnumerable"/> class.  It is not sealed and may
+            be used as the base class for any user-defined virtual table cursor
+            class that wraps an <see cref="T:System.Collections.IEnumerator"/> object instance.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.enumerator">
+            <summary>
+            The <see cref="T:System.Collections.IEnumerator"/> instance provided when this cursor
+            was created.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.endOfEnumerator">
+            <summary>
+            This value will be non-zero if false has been returned from the
+            <see cref="M:System.Collections.IEnumerator.MoveNext"/> method.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.#ctor(System.Data.SQLite.SQLiteVirtualTable,System.Collections.IEnumerator)">
+            <summary>
+            Constructs an instance of this class.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this object instance.
+            </param>
+            <param name="enumerator">
+            The <see cref="T:System.Collections.IEnumerator"/> instance to expose as a virtual
+            table cursor.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.MoveNext">
+            <summary>
+            Advances to the next row of the virtual table cursor using the
+            <see cref="M:System.Collections.IEnumerator.MoveNext"/> method of the
+            <see cref="T:System.Collections.IEnumerator"/> object instance.
+            </summary>
+            <returns>
+            Non-zero if the current row is valid; zero otherwise.  If zero is
+            returned, no further rows are available.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.Reset">
+            <summary>
+            Resets the virtual table cursor position, also invalidating the
+            current row, using the <see cref="M:System.Collections.IEnumerator.Reset"/> method of
+            the <see cref="T:System.Collections.IEnumerator"/> object instance.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.Close">
+            <summary>
+            Closes the virtual table cursor.  This method must not throw any
+            exceptions.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.CheckClosed">
+            <summary>
+            Throws an <see cref="T:System.InvalidOperationException"/> if the virtual
+            table cursor has been closed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.CheckDisposed">
+            <summary>
+            Throws an <see cref="T:System.ObjectDisposedException"/> if this object
+            instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.Dispose(System.Boolean)">
+            <summary>
+            Disposes of this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this method is being called from the
+            <see cref="M:System.IDisposable.Dispose"/> method.  Zero if this method is
+            being called from the finalizer.
+            </param>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.Current">
+            <summary>
+            Returns the value for the current row of the virtual table cursor
+            using the <see cref="P:System.Collections.IEnumerator.Current"/> property of the
+            <see cref="T:System.Collections.IEnumerator"/> object instance.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.EndOfEnumerator">
+            <summary>
+            Returns non-zero if the end of the virtual table cursor has been
+            seen (i.e. no more rows are available, including the current one).
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteVirtualTableCursorEnumerator.IsOpen">
+            <summary>
+            Returns non-zero if the virtual table cursor is open.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteModuleEnumerable">
+             <summary>
+             This class implements a virtual table module that exposes an
+             <see cref="T:System.Collections.IEnumerable"/> object instance as a read-only virtual
+             table.  It is not sealed and may be used as the base class for any
+             user-defined virtual table class that wraps an
+             <see cref="T:System.Collections.IEnumerable"/> object instance.  The following short
+             example shows it being used to treat an array of strings as a table
+             data source:
+             <code>
+               public static class Sample
+               {
+                 public static void Main()
+                 {
+                   using (SQLiteConnection connection = new SQLiteConnection(
+                       "Data Source=:memory:;"))
+                   {
+                     connection.Open();
+            
+                     connection.CreateModule(new SQLiteModuleEnumerable(
+                       "sampleModule", new string[] { "one", "two", "three" }));
+            
+                     using (SQLiteCommand command = connection.CreateCommand())
+                     {
+                       command.CommandText =
+                           "CREATE VIRTUAL TABLE t1 USING sampleModule;";
+            
+                       command.ExecuteNonQuery();
+                     }
+            
+                     using (SQLiteCommand command = connection.CreateCommand())
+                     {
+                       command.CommandText = "SELECT * FROM t1;";
+            
+                       using (SQLiteDataReader dataReader = command.ExecuteReader())
+                       {
+                         while (dataReader.Read())
+                           Console.WriteLine(dataReader[0].ToString());
+                       }
+                     }
+            
+                     connection.Close();
+                   }
+                 }
+               }
+             </code>
+             </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteModuleEnumerable.enumerable">
+            <summary>
+            The <see cref="T:System.Collections.IEnumerable"/> instance containing the backing data
+            for the virtual table.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteModuleEnumerable.objectIdentity">
+            <summary>
+            Non-zero if different object instances with the same value should
+            generate different row identifiers, where applicable.  This has no
+            effect on the .NET Compact Framework.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleEnumerable.#ctor(System.String,System.Collections.IEnumerable)">
+            <summary>
+            Constructs an instance of this class.
+            </summary>
+            <param name="name">
+            The name of the module.  This parameter cannot be null.
+            </param>
+            <param name="enumerable">
+            The <see cref="T:System.Collections.IEnumerable"/> instance to expose as a virtual
+            table.  This parameter cannot be null.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleEnumerable.#ctor(System.String,System.Collections.IEnumerable,System.Boolean)">
+            <summary>
+            Constructs an instance of this class.
+            </summary>
+            <param name="name">
+            The name of the module.  This parameter cannot be null.
+            </param>
+            <param name="enumerable">
+            The <see cref="T:System.Collections.IEnumerable"/> instance to expose as a virtual
+            table.  This parameter cannot be null.
+            </param>
+            <param name="objectIdentity">
+            Non-zero if different object instances with the same value should
+            generate different row identifiers, where applicable.  This
+            parameter has no effect on the .NET Compact Framework.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleEnumerable.CursorEndOfEnumeratorError(System.Data.SQLite.SQLiteVirtualTableCursor)">
+            <summary>
+            Sets the table error message to one that indicates the virtual
+            table cursor has no current row.
+            </summary>
+            <param name="cursor">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTableCursor"/> object instance.
+            </param>
+            <returns>
+            The value of <see cref="F:System.Data.SQLite.SQLiteErrorCode.Error"/>.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleEnumerable.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </summary>
+            <param name="connection">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </param>
+            <param name="pClientData">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </param>
+            <param name="arguments">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </param>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </param>
+            <param name="error">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Create(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleEnumerable.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </summary>
+            <param name="connection">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </param>
+            <param name="pClientData">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </param>
+            <param name="arguments">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </param>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </param>
+            <param name="error">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Connect(System.Data.SQLite.SQLiteConnection,System.IntPtr,System.String[],System.Data.SQLite.SQLiteVirtualTable@,System.String@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleEnumerable.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)"/> method.
+            </summary>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)"/> method.
+            </param>
+            <param name="index">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.BestIndex(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteIndex)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleEnumerable.Disconnect(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Disconnect(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </summary>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Disconnect(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Disconnect(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleEnumerable.Destroy(System.Data.SQLite.SQLiteVirtualTable)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Destroy(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </summary>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Destroy(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Destroy(System.Data.SQLite.SQLiteVirtualTable)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleEnumerable.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)"/> method.
+            </summary>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)"/> method.
+            </param>
+            <param name="cursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleEnumerable.Close(System.Data.SQLite.SQLiteVirtualTableCursor)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Close(System.Data.SQLite.SQLiteVirtualTableCursor)"/> method.
+            </summary>
+            <param name="cursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Close(System.Data.SQLite.SQLiteVirtualTableCursor)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Close(System.Data.SQLite.SQLiteVirtualTableCursor)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleEnumerable.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])"/> method.
+            </summary>
+            <param name="cursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])"/> method.
+            </param>
+            <param name="indexNumber">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])"/> method.
+            </param>
+            <param name="indexString">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])"/> method.
+            </param>
+            <param name="values">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Filter(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int32,System.String,System.Data.SQLite.SQLiteValue[])"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleEnumerable.Next(System.Data.SQLite.SQLiteVirtualTableCursor)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Next(System.Data.SQLite.SQLiteVirtualTableCursor)"/> method.
+            </summary>
+            <param name="cursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Next(System.Data.SQLite.SQLiteVirtualTableCursor)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Next(System.Data.SQLite.SQLiteVirtualTableCursor)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleEnumerable.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)"/> method.
+            </summary>
+            <param name="cursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Eof(System.Data.SQLite.SQLiteVirtualTableCursor)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleEnumerable.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)"/> method.
+            </summary>
+            <param name="cursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)"/> method.
+            </param>
+            <param name="context">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)"/> method.
+            </param>
+            <param name="index">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleEnumerable.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)"/> method.
+            </summary>
+            <param name="cursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)"/> method.
+            </param>
+            <param name="rowId">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.RowId(System.Data.SQLite.SQLiteVirtualTableCursor,System.Int64@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleEnumerable.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)"/> method.
+            </summary>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)"/> method.
+            </param>
+            <param name="values">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)"/> method.
+            </param>
+            <param name="rowId">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Update(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteValue[],System.Int64@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleEnumerable.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)"/> method.
+            </summary>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)"/> method.
+            </param>
+            <param name="newName">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Rename(System.Data.SQLite.SQLiteVirtualTable,System.String)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleEnumerable.CheckDisposed">
+            <summary>
+            Throws an <see cref="T:System.ObjectDisposedException"/> if this object
+            instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteModuleEnumerable.Dispose(System.Boolean)">
+            <summary>
+            Disposes of this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this method is being called from the
+            <see cref="M:System.IDisposable.Dispose"/> method.  Zero if this method is
+            being called from the finalizer.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.Generic.SQLiteVirtualTableCursorEnumerator`1">
+            <summary>
+            This class represents a virtual table cursor to be used with the
+            <see cref="T:System.Data.SQLite.SQLiteModuleEnumerable"/> class.  It is not sealed and may
+            be used as the base class for any user-defined virtual table cursor
+            class that wraps an <see cref="T:System.Collections.Generic.IEnumerator`1"/> object instance.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.Generic.SQLiteVirtualTableCursorEnumerator`1.enumerator">
+            <summary>
+            The <see cref="T:System.Collections.Generic.IEnumerator`1"/> instance provided when this
+            cursor was created.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.Generic.SQLiteVirtualTableCursorEnumerator`1.#ctor(System.Data.SQLite.SQLiteVirtualTable,System.Collections.Generic.IEnumerator{`0})">
+            <summary>
+            Constructs an instance of this class.
+            </summary>
+            <param name="table">
+            The <see cref="T:System.Data.SQLite.SQLiteVirtualTable"/> object instance associated
+            with this object instance.
+            </param>
+            <param name="enumerator">
+            The <see cref="T:System.Collections.Generic.IEnumerator`1"/> instance to expose as a virtual
+            table cursor.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.Generic.SQLiteVirtualTableCursorEnumerator`1.Close">
+            <summary>
+            Closes the virtual table cursor.  This method must not throw any
+            exceptions.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.Generic.SQLiteVirtualTableCursorEnumerator`1.CheckDisposed">
+            <summary>
+            Throws an <see cref="T:System.ObjectDisposedException"/> if this object
+            instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.Generic.SQLiteVirtualTableCursorEnumerator`1.Dispose(System.Boolean)">
+            <summary>
+            Disposes of this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this method is being called from the
+            <see cref="M:System.IDisposable.Dispose"/> method.  Zero if this method is
+            being called from the finalizer.
+            </param>
+        </member>
+        <member name="P:System.Data.SQLite.Generic.SQLiteVirtualTableCursorEnumerator`1.System#Collections#Generic#IEnumerator{T}#Current">
+            <summary>
+            Returns the value for the current row of the virtual table cursor
+            using the <see cref="P:System.Collections.Generic.IEnumerator`1.Current"/> property of the
+            <see cref="T:System.Collections.Generic.IEnumerator`1"/> object instance.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.Generic.SQLiteModuleEnumerable`1">
+            <summary>
+            This class implements a virtual table module that exposes an
+            <see cref="T:System.Collections.Generic.IEnumerable`1"/> object instance as a read-only virtual
+            table.  It is not sealed and may be used as the base class for any
+            user-defined virtual table class that wraps an
+            <see cref="T:System.Collections.Generic.IEnumerable`1"/> object instance.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.Generic.SQLiteModuleEnumerable`1.enumerable">
+            <summary>
+            The <see cref="T:System.Collections.Generic.IEnumerable`1"/> instance containing the backing
+            data for the virtual table.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.Generic.SQLiteModuleEnumerable`1.#ctor(System.String,System.Collections.Generic.IEnumerable{`0})">
+            <summary>
+            Constructs an instance of this class.
+            </summary>
+            <param name="name">
+            The name of the module.  This parameter cannot be null.
+            </param>
+            <param name="enumerable">
+            The <see cref="T:System.Collections.Generic.IEnumerable`1"/> instance to expose as a virtual
+            table.  This parameter cannot be null.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.Generic.SQLiteModuleEnumerable`1.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)"/> method.
+            </summary>
+            <param name="table">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)"/> method.
+            </param>
+            <param name="cursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Open(System.Data.SQLite.SQLiteVirtualTable,System.Data.SQLite.SQLiteVirtualTableCursor@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.Generic.SQLiteModuleEnumerable`1.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)">
+            <summary>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)"/> method.
+            </summary>
+            <param name="cursor">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)"/> method.
+            </param>
+            <param name="context">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)"/> method.
+            </param>
+            <param name="index">
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)"/> method.
+            </param>
+            <returns>
+            See the <see cref="M:System.Data.SQLite.ISQLiteManagedModule.Column(System.Data.SQLite.SQLiteVirtualTableCursor,System.Data.SQLite.SQLiteContext,System.Int32)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.Generic.SQLiteModuleEnumerable`1.CheckDisposed">
+            <summary>
+            Throws an <see cref="T:System.ObjectDisposedException"/> if this object
+            instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.Generic.SQLiteModuleEnumerable`1.Dispose(System.Boolean)">
+            <summary>
+            Disposes of this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this method is being called from the
+            <see cref="M:System.IDisposable.Dispose"/> method.  Zero if this method is
+            being called from the finalizer.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteChangeSetConflictType">
+            <summary>
+            This enumerated type represents a type of conflict seen when apply
+            changes from a change set or patch set.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetConflictType.Data">
+            <summary>
+            This value is seen when processing a DELETE or UPDATE change if a
+            row with the required PRIMARY KEY fields is present in the
+            database, but one or more other (non primary-key) fields modified
+            by the update do not contain the expected "before" values.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetConflictType.NotFound">
+             <summary>
+             This value is seen when processing a DELETE or UPDATE change if a
+             row with the required PRIMARY KEY fields is not present in the
+             database.  There is no conflicting row in this case.
+            
+             The results of invoking the
+             <see cref="M:System.Data.SQLite.ISQLiteChangeSetMetadataItem.GetConflictValue(System.Int32)"/>
+             method are undefined.
+             </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetConflictType.Conflict">
+            <summary>
+            This value is seen when processing an INSERT change if the
+            operation would result in duplicate primary key values.
+            The conflicting row in this case is the database row with the
+            matching primary key.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetConflictType.Constraint">
+             <summary>
+             If a non-foreign key constraint violation occurs while applying a
+             change (i.e. a UNIQUE, CHECK or NOT NULL constraint), the conflict
+             callback will see this value.
+            
+             There is no conflicting row in this case. The results of invoking
+             the <see cref="M:System.Data.SQLite.ISQLiteChangeSetMetadataItem.GetConflictValue(System.Int32)"/>
+             method are undefined.
+             </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetConflictType.ForeignKey">
+             <summary>
+             If foreign key handling is enabled, and applying a changes leaves
+             the database in a state containing foreign key violations, this
+             value will be seen exactly once before the changes are committed.
+             If the conflict handler
+             <see cref="F:System.Data.SQLite.SQLiteChangeSetConflictResult.Omit"/>, the changes,
+             including those that caused the foreign key constraint violation,
+             are committed. Or, if it returns
+             <see cref="F:System.Data.SQLite.SQLiteChangeSetConflictResult.Abort"/>, the changes are
+             rolled back.
+            
+             No current or conflicting row information is provided. The only
+             method it is possible to call on the supplied
+             <see cref="T:System.Data.SQLite.ISQLiteChangeSetMetadataItem"/> object is
+             <see cref="P:System.Data.SQLite.ISQLiteChangeSetMetadataItem.NumberOfForeignKeyConflicts"/>.
+             </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteChangeSetConflictResult">
+            <summary>
+            This enumerated type represents the result of a user-defined conflict
+            resolution callback.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetConflictResult.Omit">
+            <summary>
+            If a conflict callback returns this value no special action is
+            taken. The change that caused the conflict is not applied. The
+            application of changes continues with the next change.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetConflictResult.Replace">
+             <summary>
+             This value may only be returned from a conflict callback if the
+             type of conflict was <see cref="F:System.Data.SQLite.SQLiteChangeSetConflictType.Data"/>
+             or <see cref="F:System.Data.SQLite.SQLiteChangeSetConflictType.Conflict"/>. If this is
+             not the case, any changes applied so far are rolled back and the
+             call to
+             <see cref="M:System.Data.SQLite.ISQLiteChangeSet.Apply(System.Data.SQLite.SessionConflictCallback,System.Data.SQLite.SessionTableFilterCallback,System.Object)"/>
+             will raise a <see cref="T:System.Data.SQLite.SQLiteException"/> with an error code of
+             <see cref="F:System.Data.SQLite.SQLiteErrorCode.Misuse"/>.
+            
+             If this value is returned for a
+             <see cref="F:System.Data.SQLite.SQLiteChangeSetConflictType.Data"/> conflict, then the
+             conflicting row is either updated or deleted, depending on the type
+             of change.
+            
+             If this value is returned for a
+             <see cref="F:System.Data.SQLite.SQLiteChangeSetConflictType.Conflict"/> conflict, then
+             the conflicting row is removed from the database and a second
+             attempt to apply the change is made. If this second attempt fails,
+             the original row is restored to the database before continuing.
+             </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetConflictResult.Abort">
+            <summary>
+            If this value is returned, any changes applied so far are rolled
+            back and the call to
+            <see cref="M:System.Data.SQLite.ISQLiteChangeSet.Apply(System.Data.SQLite.SessionConflictCallback,System.Data.SQLite.SessionTableFilterCallback,System.Object)"/>
+            will raise a <see cref="T:System.Data.SQLite.SQLiteException"/> with an error code of
+            <see cref="F:System.Data.SQLite.SQLiteErrorCode.Abort"/>.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteChangeSetStartFlags">
+            <summary>
+            This enumerated type represents possible flags that may be passed
+            to the appropriate overloads of various change set creation methods.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetStartFlags.None">
+            <summary>
+            No special handling.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetStartFlags.Invert">
+            <summary>
+            Invert the change set while iterating through it.
+            This is equivalent to inverting a change set using
+            <see cref="M:System.Data.SQLite.ISQLiteChangeSet.Invert"/> before
+            applying it. It is an error to specify this flag
+            with a patch set.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SessionTableFilterCallback">
+            <summary>
+            This callback is invoked when a determination must be made about
+            whether changes to a specific table should be tracked -OR- applied.
+            It will not be called for tables that are already attached to a
+            <see cref="T:System.Data.SQLite.ISQLiteSession"/>.
+            </summary>
+            <param name="clientData">
+            The optional application-defined context data that was originally
+            passed to the <see cref="M:System.Data.SQLite.ISQLiteSession.SetTableFilter(System.Data.SQLite.SessionTableFilterCallback,System.Object)"/> or
+            <see cref="M:System.Data.SQLite.ISQLiteChangeSet.Apply(System.Data.SQLite.SessionConflictCallback,System.Data.SQLite.SessionTableFilterCallback,System.Object)"/>
+            methods.  This value may be null.
+            </param>
+            <param name="name">
+            The name of the table.
+            </param>
+            <returns>
+            Non-zero if changes to the table should be considered; otherwise,
+            zero.  Throwing an exception from this callback will result in
+            undefined behavior.
+            </returns>
+        </member>
+        <member name="T:System.Data.SQLite.SessionConflictCallback">
+            <summary>
+            This callback is invoked when there is a conflict while apply changes
+            to a database.
+            </summary>
+            <param name="clientData">
+            The optional application-defined context data that was originally
+            passed to the
+            <see cref="M:System.Data.SQLite.ISQLiteChangeSet.Apply(System.Data.SQLite.SessionConflictCallback,System.Data.SQLite.SessionTableFilterCallback,System.Object)"/>
+            method.  This value may be null.
+            </param>
+            <param name="type">
+            The type of this conflict.
+            </param>
+            <param name="item">
+            The <see cref="T:System.Data.SQLite.ISQLiteChangeSetMetadataItem"/> object associated with
+            this conflict.  This value may not be null; however, only properties
+            that are applicable to the conflict type will be available.  Further
+            information on this is available within the descriptions of the
+            available <see cref="T:System.Data.SQLite.SQLiteChangeSetConflictType"/> values.
+            </param>
+            <returns>
+            A <see cref="T:System.Data.SQLite.SQLiteChangeSetConflictResult"/> value that indicates the
+            action to be taken in order to resolve the conflict.  Throwing an
+            exception from this callback will result in undefined behavior.
+            </returns>
+        </member>
+        <member name="T:System.Data.SQLite.ISQLiteChangeSet">
+            <summary>
+            This interface contains methods used to manipulate a set of changes for
+            a database.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteChangeSet.Invert">
+            <summary>
+            This method "inverts" the set of changes within this instance.
+            Applying an inverted set of changes to a database reverses the
+            effects of applying the uninverted changes.  Specifically:
+            <![CDATA[<ul>]]><![CDATA[<li>]]>
+            Each DELETE change is changed to an INSERT, and
+            <![CDATA[</li>]]><![CDATA[<li>]]>
+            Each INSERT change is changed to a DELETE, and
+            <![CDATA[</li>]]><![CDATA[<li>]]>
+            For each UPDATE change, the old.* and new.* values are exchanged.
+            <![CDATA[</li>]]><![CDATA[</ul>]]>
+            This method does not change the order in which changes appear
+            within the set of changes. It merely reverses the sense of each
+            individual change.
+            </summary>
+            <returns>
+            The new <see cref="T:System.Data.SQLite.ISQLiteChangeSet"/> instance that represents
+            the resulting set of changes -OR- null if it is not available.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteChangeSet.CombineWith(System.Data.SQLite.ISQLiteChangeSet)">
+            <summary>
+            This method combines the specified set of changes with the ones
+            contained in this instance.
+            </summary>
+            <param name="changeSet">
+            The changes to be combined with those in this instance.
+            </param>
+            <returns>
+            The new <see cref="T:System.Data.SQLite.ISQLiteChangeSet"/> instance that represents
+            the resulting set of changes -OR- null if it is not available.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteChangeSet.Apply(System.Data.SQLite.SessionConflictCallback,System.Object)">
+            <summary>
+            Attempts to apply the set of changes in this instance to the
+            associated database.
+            </summary>
+            <param name="conflictCallback">
+            The <see cref="T:System.Data.SQLite.SessionConflictCallback"/> delegate that will need
+            to handle any conflicting changes that may arise.
+            </param>
+            <param name="clientData">
+            The optional application-defined context data.  This value may be
+            null.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteChangeSet.Apply(System.Data.SQLite.SessionConflictCallback,System.Data.SQLite.SessionTableFilterCallback,System.Object)">
+            <summary>
+            Attempts to apply the set of changes in this instance to the
+            associated database.
+            </summary>
+            <param name="conflictCallback">
+            The <see cref="T:System.Data.SQLite.SessionConflictCallback"/> delegate that will need
+            to handle any conflicting changes that may arise.
+            </param>
+            <param name="tableFilterCallback">
+            The optional <see cref="T:System.Data.SQLite.SessionTableFilterCallback"/> delegate
+            that can be used to filter the list of tables impacted by the set
+            of changes.
+            </param>
+            <param name="clientData">
+            The optional application-defined context data.  This value may be
+            null.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.ISQLiteChangeGroup">
+            <summary>
+            This interface contains methods used to manipulate multiple sets of
+            changes for a database.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteChangeGroup.AddChangeSet(System.Byte[])">
+            <summary>
+            Attempts to add a change set (or patch set) to this change group
+            instance.  The underlying data must be contained entirely within
+            the <paramref name="rawData" /> byte array.
+            </summary>
+            <param name="rawData">
+            The raw byte data for the specified change set (or patch set).
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteChangeGroup.AddChangeSet(System.IO.Stream)">
+            <summary>
+            Attempts to add a change set (or patch set) to this change group
+            instance.  The underlying data will be read from the specified
+            <see cref="T:System.IO.Stream"/>.
+            </summary>
+            <param name="stream">
+            The <see cref="T:System.IO.Stream"/> instance containing the raw change set
+            (or patch set) data to read.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteChangeGroup.CreateChangeSet(System.Byte[]@)">
+            <summary>
+            Attempts to create and return, via <paramref name="rawData" />, the
+            combined set of changes represented by this change group instance.
+            </summary>
+            <param name="rawData">
+            Upon success, this will contain the raw byte data for all the
+            changes in this change group instance.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteChangeGroup.CreateChangeSet(System.IO.Stream)">
+            <summary>
+            Attempts to create and write, via <paramref name="stream"/>, the
+            combined set of changes represented by this change group instance.
+            </summary>
+            <param name="stream">
+            Upon success, the raw byte data for all the changes in this change
+            group instance will be written to this <see cref="T:System.IO.Stream"/>.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.ISQLiteChangeSetMetadataItem">
+            <summary>
+            This interface contains properties and methods used to fetch metadata
+            about one change within a set of changes for a database.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteChangeSetMetadataItem.GetOldValue(System.Int32)">
+            <summary>
+            Queries and returns the original value of a given column for this
+            change.  This method may only be called when the
+            <see cref="P:System.Data.SQLite.ISQLiteChangeSetMetadataItem.OperationCode"/> has a value of
+            <see cref="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Update"/> or
+            <see cref="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Delete"/>.
+            </summary>
+            <param name="columnIndex">
+            The index for the column.  This value must be between zero and one
+            less than the total number of columns for this table.
+            </param>
+            <returns>
+            The original value of a given column for this change.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteChangeSetMetadataItem.GetNewValue(System.Int32)">
+            <summary>
+            Queries and returns the updated value of a given column for this
+            change.  This method may only be called when the
+            <see cref="P:System.Data.SQLite.ISQLiteChangeSetMetadataItem.OperationCode"/> has a value of
+            <see cref="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Insert"/> or
+            <see cref="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Update"/>.
+            </summary>
+            <param name="columnIndex">
+            The index for the column.  This value must be between zero and one
+            less than the total number of columns for this table.
+            </param>
+            <returns>
+            The updated value of a given column for this change.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteChangeSetMetadataItem.GetConflictValue(System.Int32)">
+            <summary>
+            Queries and returns the conflicting value of a given column for
+            this change.  This method may only be called from within a
+            <see cref="T:System.Data.SQLite.SessionConflictCallback"/> delegate when the conflict
+            type is <see cref="F:System.Data.SQLite.SQLiteChangeSetConflictType.Data"/> or
+            <see cref="F:System.Data.SQLite.SQLiteChangeSetConflictType.Conflict"/>.
+            </summary>
+            <param name="columnIndex">
+            The index for the column.  This value must be between zero and one
+            less than the total number of columns for this table.
+            </param>
+            <returns>
+            The conflicting value of a given column for this change.
+            </returns>
+        </member>
+        <member name="P:System.Data.SQLite.ISQLiteChangeSetMetadataItem.TableName">
+            <summary>
+            The name of the table the change was made to.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.ISQLiteChangeSetMetadataItem.NumberOfColumns">
+            <summary>
+            The number of columns impacted by this change.  This value can be
+            used to determine the highest valid column index that may be used
+            with the <see cref="M:System.Data.SQLite.ISQLiteChangeSetMetadataItem.GetOldValue(System.Int32)"/>, <see cref="M:System.Data.SQLite.ISQLiteChangeSetMetadataItem.GetNewValue(System.Int32)"/>,
+            and <see cref="M:System.Data.SQLite.ISQLiteChangeSetMetadataItem.GetConflictValue(System.Int32)"/> methods of this interface.  It
+            will be this value minus one.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.ISQLiteChangeSetMetadataItem.OperationCode">
+            <summary>
+            This will contain the value
+            <see cref="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Insert"/>,
+            <see cref="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Update"/>, or
+            <see cref="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Delete"/>, corresponding to
+            the overall type of change this item represents.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.ISQLiteChangeSetMetadataItem.Indirect">
+            <summary>
+            Non-zero if this change is considered to be indirect (i.e. as
+            though they were made via a trigger or foreign key action).
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.ISQLiteChangeSetMetadataItem.PrimaryKeyColumns">
+            <summary>
+            This array contains a <see cref="T:System.Boolean"/> for each column in
+            the table associated with this change.  The element will be zero
+            if the column is not part of the primary key; otherwise, it will
+            be non-zero.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.ISQLiteChangeSetMetadataItem.NumberOfForeignKeyConflicts">
+            <summary>
+            This method may only be called from within a
+            <see cref="T:System.Data.SQLite.SessionConflictCallback"/> delegate when the conflict
+            type is <see cref="F:System.Data.SQLite.SQLiteChangeSetConflictType.ForeignKey"/>.  It
+            returns the total number of known foreign key violations in the
+            destination database.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.ISQLiteSession">
+            <summary>
+            This interface contains methods to query and manipulate the state of a
+            change tracking session for a database.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteSession.IsEnabled">
+            <summary>
+            Determines if this session is currently tracking changes to its
+            associated database.
+            </summary>
+            <returns>
+            Non-zero if changes to the associated database are being trakced;
+            otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteSession.SetToEnabled">
+            <summary>
+            Enables tracking of changes to the associated database.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteSession.SetToDisabled">
+            <summary>
+            Disables tracking of changes to the associated database.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteSession.IsIndirect">
+            <summary>
+            Determines if this session is currently set to mark changes as
+            indirect (i.e. as though they were made via a trigger or foreign
+            key action).
+            </summary>
+            <returns>
+            Non-zero if changes to the associated database are being marked as
+            indirect; otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteSession.SetToIndirect">
+            <summary>
+            Sets the indirect flag for this session.  Subsequent changes will
+            be marked as indirect until this flag is changed again.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteSession.SetToDirect">
+            <summary>
+            Clears the indirect flag for this session.  Subsequent changes will
+            be marked as direct until this flag is changed again.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteSession.IsEmpty">
+            <summary>
+            Determines if there are any tracked changes currently within the
+            data for this session.
+            </summary>
+            <returns>
+            Non-zero if there are no changes within the data for this session;
+            otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteSession.AttachTable(System.String)">
+            <summary>
+            Upon success, causes changes to the specified table(s) to start
+            being tracked.  Any tables impacted by calls to this method will
+            not cause the <see cref="T:System.Data.SQLite.SessionTableFilterCallback"/> callback
+            to be invoked.
+            </summary>
+            <param name="name">
+            The name of the table to be tracked -OR- null to track all
+            applicable tables within this database.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteSession.SetTableFilter(System.Data.SQLite.SessionTableFilterCallback,System.Object)">
+            <summary>
+            This method is used to set the table filter for this instance.
+            </summary>
+            <param name="callback">
+            The table filter callback -OR- null to clear any existing table
+            filter callback.
+            </param>
+            <param name="clientData">
+            The optional application-defined context data.  This value may be
+            null.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteSession.CreateChangeSet(System.Byte[]@)">
+            <summary>
+            Attempts to create and return, via <paramref name="rawData" />, the
+            combined set of changes represented by this session instance.
+            </summary>
+            <param name="rawData">
+            Upon success, this will contain the raw byte data for all the
+            changes in this session instance.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteSession.CreateChangeSet(System.IO.Stream)">
+            <summary>
+            Attempts to create and write, via <paramref name="stream"/>, the
+            combined set of changes represented by this session instance.
+            </summary>
+            <param name="stream">
+            Upon success, the raw byte data for all the changes in this session
+            instance will be written to this <see cref="T:System.IO.Stream"/>.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteSession.CreatePatchSet(System.Byte[]@)">
+            <summary>
+            Attempts to create and return, via <paramref name="rawData" />, the
+            combined set of changes represented by this session instance as a
+            patch set.
+            </summary>
+            <param name="rawData">
+            Upon success, this will contain the raw byte data for all the
+            changes in this session instance.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteSession.CreatePatchSet(System.IO.Stream)">
+            <summary>
+            Attempts to create and write, via <paramref name="stream"/>, the
+            combined set of changes represented by this session instance as a
+            patch set.
+            </summary>
+            <param name="stream">
+            Upon success, the raw byte data for all the changes in this session
+            instance will be written to this <see cref="T:System.IO.Stream"/>.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.ISQLiteSession.LoadDifferencesFromTable(System.String,System.String)">
+            <summary>
+            This method loads the differences between two tables [with the same
+            name, set of columns, and primary key definition] into this session
+            instance.
+            </summary>
+            <param name="fromDatabaseName">
+            The name of the database containing the table with the original
+            data (i.e. it will need updating in order to be identical to the
+            one within the database associated with this session instance).
+            </param>
+            <param name="tableName">
+            The name of the table.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteSessionHelpers">
+            <summary>
+            This class contains some static helper methods for use within this
+            subsystem.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSessionHelpers.CheckRawData(System.Byte[])">
+            <summary>
+            This method checks the byte array specified by the caller to make
+            sure it will be usable.
+            </summary>
+            <param name="rawData">
+            A byte array provided by the caller into one of the public methods
+            for the classes that belong to this subsystem.  This value cannot
+            be null or represent an empty array; otherwise, an appropriate
+            exception will be thrown.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteConnectionLock">
+            <summary>
+            This class is used to hold the native connection handle associated with
+            a <see cref="T:System.Data.SQLite.SQLiteConnection"/> open until this subsystem is totally
+            done with it.  This class is for internal use by this subsystem only.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionLock.LockNopSql">
+            <summary>
+            The SQL statement used when creating the native statement handle.
+            There are no special requirements for this other than counting as
+            an "open statement handle".
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionLock.StatementMessageFormat">
+            <summary>
+            The format of the error message used when reporting, during object
+            disposal, that the statement handle is still open (i.e. because
+            this situation is considered a fairly serious programming error).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionLock.handle">
+            <summary>
+            The wrapped native connection handle associated with this lock.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionLock.flags">
+            <summary>
+            The flags associated with the connection represented by the
+            <see cref="F:System.Data.SQLite.SQLiteConnectionLock.handle"/> value.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionLock.statement">
+            <summary>
+            The native statement handle for this lock.  The garbage collector
+            cannot cause this statement to be finalized; therefore, it will
+            serve to hold the associated native connection open until it is
+            freed manually using the <see cref="M:System.Data.SQLite.SQLiteConnectionLock.Unlock"/> method.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionLock.#ctor(System.Data.SQLite.SQLiteConnectionHandle,System.Data.SQLite.SQLiteConnectionFlags,System.Boolean)">
+            <summary>
+            Constructs a new instance of this class using the specified wrapped
+            native connection handle and associated flags.
+            </summary>
+            <param name="handle">
+            The wrapped native connection handle to be associated with this
+            lock.
+            </param>
+            <param name="flags">
+            The flags associated with the connection represented by the
+            <paramref name="handle"/> value.
+            </param>
+            <param name="autoLock">
+            Non-zero if the <see cref="M:System.Data.SQLite.SQLiteConnectionLock.Lock"/> method should be called prior
+            to returning from this constructor.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionLock.GetHandle">
+            <summary>
+            Queries and returns the wrapped native connection handle for this
+            instance.
+            </summary>
+            <returns>
+            The wrapped native connection handle for this instance -OR- null
+            if it is unavailable.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionLock.GetFlags">
+            <summary>
+            Queries and returns the flags associated with the connection for
+            this instance.
+            </summary>
+            <returns>
+            The <see cref="T:System.Data.SQLite.SQLiteConnectionFlags"/> value.  There is no return
+            value reserved to indicate an error.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionLock.GetIntPtr">
+            <summary>
+            Queries and returns the native connection handle for this instance.
+            </summary>
+            <returns>
+            The native connection handle for this instance.  If this value is
+            unavailable or invalid an exception will be thrown.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionLock.Lock">
+            <summary>
+            This method attempts to "lock" the associated native connection
+            handle by preparing a SQL statement that will not be finalized
+            until the <see cref="M:System.Data.SQLite.SQLiteConnectionLock.Unlock"/> method is called (i.e. and which
+            cannot be done by the garbage collector).  If the statement is
+            already prepared, nothing is done.  If the statement cannot be
+            prepared for any reason, an exception will be thrown.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionLock.Unlock">
+            <summary>
+            This method attempts to "unlock" the associated native connection
+            handle by finalizing the previously prepared statement.  If the
+            statement is already finalized, nothing is done.  If the statement
+            cannot be finalized for any reason, an exception will be thrown.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionLock.Dispose">
+            <summary>
+            Disposes of this object instance.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteConnectionLock.disposed">
+            <summary>
+            Non-zero if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionLock.CheckDisposed">
+            <summary>
+            Throws an exception if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionLock.Dispose(System.Boolean)">
+            <summary>
+            Disposes or finalizes this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this object is being disposed; otherwise, this object
+            is being finalized.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteConnectionLock.Finalize">
+            <summary>
+            Finalizes this object instance.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteChangeSetIterator">
+            <summary>
+            This class manages the native change set iterator.  It is used as the
+            base class for the <see cref="T:System.Data.SQLite.SQLiteMemoryChangeSetIterator"/> and
+            <see cref="T:System.Data.SQLite.SQLiteStreamChangeSetIterator"/> classes.  It knows how to
+            advance the native iterator handle as well as finalize it.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetIterator.iterator">
+            <summary>
+            The native change set (a.k.a. iterator) handle.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetIterator.ownHandle">
+            <summary>
+            Non-zero if this instance owns the native iterator handle in the
+            <see cref="F:System.Data.SQLite.SQLiteChangeSetIterator.iterator"/> field.  In that case, this instance will
+            finalize the native iterator handle upon being disposed or
+            finalized.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetIterator.#ctor(System.IntPtr,System.Boolean)">
+            <summary>
+            Constructs a new instance of this class using the specified native
+            iterator handle.
+            </summary>
+            <param name="iterator">
+            The native iterator handle to use.
+            </param>
+            <param name="ownHandle">
+            Non-zero if this instance is to take ownership of the native
+            iterator handle specified by <paramref name="iterator" />.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetIterator.CheckHandle">
+            <summary>
+            Throws an exception if the native iterator handle is invalid.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetIterator.GetIntPtr">
+            <summary>
+            Used to query the native iterator handle.  This method is only used
+            by the <see cref="T:System.Data.SQLite.SQLiteChangeSetMetadataItem"/> class.
+            </summary>
+            <returns>
+            The native iterator handle -OR- <see cref="F:System.IntPtr.Zero"/> if it
+            is not available.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetIterator.Next">
+            <summary>
+            Attempts to advance the native iterator handle to its next item.
+            </summary>
+            <returns>
+            Non-zero if the native iterator handle was advanced and contains
+            more data; otherwise, zero.  If the underlying native API returns
+            an unexpected value then an exception will be thrown.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetIterator.Attach(System.IntPtr)">
+            <summary>
+            Attempts to create an instance of this class that is associated
+            with the specified native iterator handle.  Ownership of the
+            native iterator handle is NOT transferred to the new instance of
+            this class.
+            </summary>
+            <param name="iterator">
+            The native iterator handle to use.
+            </param>
+            <returns>
+            The new instance of this class.  No return value is reserved to
+            indicate an error; however, if the native iterator handle is not
+            valid, any subsequent attempt to make use of it via the returned
+            instance of this class may throw exceptions.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetIterator.Dispose">
+            <summary>
+            Disposes of this object instance.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetIterator.disposed">
+            <summary>
+            Non-zero if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetIterator.CheckDisposed">
+            <summary>
+            Throws an exception if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetIterator.Dispose(System.Boolean)">
+            <summary>
+            Disposes or finalizes this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this object is being disposed; otherwise, this object
+            is being finalized.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetIterator.Finalize">
+            <summary>
+            Finalizes this object instance.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteMemoryChangeSetIterator">
+            <summary>
+            This class manages the native change set iterator for a set of changes
+            contained entirely in memory.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteMemoryChangeSetIterator.pData">
+            <summary>
+            The native memory buffer allocated to contain the set of changes
+            associated with this instance.  This will always be freed when this
+            instance is disposed or finalized.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemoryChangeSetIterator.#ctor(System.IntPtr,System.IntPtr,System.Boolean)">
+            <summary>
+            Constructs an instance of this class using the specified native
+            memory buffer and native iterator handle.
+            </summary>
+            <param name="pData">
+            The native memory buffer to use.
+            </param>
+            <param name="iterator">
+            The native iterator handle to use.
+            </param>
+            <param name="ownHandle">
+            Non-zero if this instance is to take ownership of the native
+            iterator handle specified by <paramref name="iterator" />.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemoryChangeSetIterator.Create(System.Byte[])">
+            <summary>
+            Attempts to create an instance of this class using the specified
+            raw byte data.
+            </summary>
+            <param name="rawData">
+            The raw byte data containing the set of changes for this native
+            iterator.
+            </param>
+            <returns>
+            The new instance of this class -OR- null if it cannot be created.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemoryChangeSetIterator.Create(System.Byte[],System.Data.SQLite.SQLiteChangeSetStartFlags)">
+            <summary>
+            Attempts to create an instance of this class using the specified
+            raw byte data.
+            </summary>
+            <param name="rawData">
+            The raw byte data containing the set of changes for this native
+            iterator.
+            </param>
+            <param name="flags">
+            The flags used to create the change set iterator.
+            </param>
+            <returns>
+            The new instance of this class -OR- null if it cannot be created.
+            </returns>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteMemoryChangeSetIterator.disposed">
+            <summary>
+            Non-zero if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemoryChangeSetIterator.CheckDisposed">
+            <summary>
+            Throws an exception if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemoryChangeSetIterator.Dispose(System.Boolean)">
+            <summary>
+            Disposes or finalizes this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this object is being disposed; otherwise, this object
+            is being finalized.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteStreamChangeSetIterator">
+            <summary>
+            This class manages the native change set iterator for a set of changes
+            backed by a <see cref="T:System.IO.Stream"/> instance.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStreamChangeSetIterator.streamAdapter">
+            <summary>
+            The <see cref="T:System.Data.SQLite.SQLiteStreamAdapter"/> instance that is managing
+            the underlying <see cref="T:System.IO.Stream"/> used as the backing store for
+            the set of changes associated with this native change set iterator.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamChangeSetIterator.#ctor(System.Data.SQLite.SQLiteStreamAdapter,System.IntPtr,System.Boolean)">
+            <summary>
+            Constructs an instance of this class using the specified native
+            iterator handle and <see cref="T:System.Data.SQLite.SQLiteStreamAdapter"/>.
+            </summary>
+            <param name="streamAdapter">
+            The <see cref="T:System.Data.SQLite.SQLiteStreamAdapter"/> instance to use.
+            </param>
+            <param name="iterator">
+            The native iterator handle to use.
+            </param>
+            <param name="ownHandle">
+            Non-zero if this instance is to take ownership of the native
+            iterator handle specified by <paramref name="iterator"/>.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamChangeSetIterator.Create(System.IO.Stream,System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Attempts to create an instance of this class using the specified
+            <see cref="T:System.IO.Stream"/>.
+            </summary>
+            <param name="stream">
+            The <see cref="T:System.IO.Stream"/> where the raw byte data for the set of
+            changes may be read.
+            </param>
+            <param name="connectionFlags">
+            The flags associated with the parent connection.
+            </param>
+            <returns>
+            The new instance of this class -OR- null if it cannot be created.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamChangeSetIterator.Create(System.IO.Stream,System.Data.SQLite.SQLiteConnectionFlags,System.Data.SQLite.SQLiteChangeSetStartFlags)">
+            <summary>
+            Attempts to create an instance of this class using the specified
+            <see cref="T:System.IO.Stream"/>.
+            </summary>
+            <param name="stream">
+            The <see cref="T:System.IO.Stream"/> where the raw byte data for the set of
+            changes may be read.
+            </param>
+            <param name="connectionFlags">
+            The flags associated with the parent connection.
+            </param>
+            <param name="startFlags">
+            The flags used to create the change set iterator.
+            </param>
+            <returns>
+            The new instance of this class -OR- null if it cannot be created.
+            </returns>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStreamChangeSetIterator.disposed">
+            <summary>
+            Non-zero if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamChangeSetIterator.CheckDisposed">
+            <summary>
+            Throws an exception if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamChangeSetIterator.Dispose(System.Boolean)">
+            <summary>
+            Disposes or finalizes this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this object is being disposed; otherwise, this object
+            is being finalized.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteStreamAdapter">
+            <summary>
+            This class is used to act as a bridge between a <see cref="T:System.IO.Stream"/>
+            instance and the delegates used with the native streaming API.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStreamAdapter.stream">
+            <summary>
+            The managed stream instance used to in order to service the native
+            delegates for both input and output.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStreamAdapter.flags">
+            <summary>
+            The flags associated with the connection.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStreamAdapter.xInput">
+            <summary>
+            The delegate used to provide input to the native streaming API.
+            It will be null -OR- point to the <see cref="M:System.Data.SQLite.SQLiteStreamAdapter.Input(System.IntPtr,System.IntPtr,System.Int32@)"/> method.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStreamAdapter.xOutput">
+            <summary>
+            The delegate used to provide output to the native streaming API.
+            It will be null -OR- point to the <see cref="M:System.Data.SQLite.SQLiteStreamAdapter.Output(System.IntPtr,System.IntPtr,System.Int32)"/> method.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamAdapter.#ctor(System.IO.Stream,System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Constructs a new instance of this class using the specified managed
+            stream and connection flags.
+            </summary>
+            <param name="stream">
+            The managed stream instance to be used in order to service the
+            native delegates for both input and output.
+            </param>
+            <param name="flags">
+            The flags associated with the parent connection.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamAdapter.GetFlags">
+            <summary>
+            Queries and returns the flags associated with the connection for
+            this instance.
+            </summary>
+            <returns>
+            The <see cref="T:System.Data.SQLite.SQLiteConnectionFlags"/> value.  There is no return
+            value reserved to indicate an error.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamAdapter.GetInputDelegate">
+            <summary>
+            Returns a delegate that wraps the <see cref="M:System.Data.SQLite.SQLiteStreamAdapter.Input(System.IntPtr,System.IntPtr,System.Int32@)"/> method,
+            creating it first if necessary.
+            </summary>
+            <returns>
+            A delegate that refers to the <see cref="M:System.Data.SQLite.SQLiteStreamAdapter.Input(System.IntPtr,System.IntPtr,System.Int32@)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamAdapter.GetOutputDelegate">
+            <summary>
+            Returns a delegate that wraps the <see cref="M:System.Data.SQLite.SQLiteStreamAdapter.Output(System.IntPtr,System.IntPtr,System.Int32)"/> method,
+            creating it first if necessary.
+            </summary>
+            <returns>
+            A delegate that refers to the <see cref="M:System.Data.SQLite.SQLiteStreamAdapter.Output(System.IntPtr,System.IntPtr,System.Int32)"/> method.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamAdapter.Input(System.IntPtr,System.IntPtr,System.Int32@)">
+            <summary>
+            This method attempts to read <paramref name="nData"/> bytes from
+            the managed stream, writing them to the <paramref name="pData"/>
+            buffer.
+            </summary>
+            <param name="context">
+            Optional extra context information.  Currently, this will always
+            have a value of <see cref="F:System.IntPtr.Zero"/>.
+            </param>
+            <param name="pData">
+            A preallocated native buffer to receive the requested input bytes.
+            It must be at least <paramref name="nData"/> bytes in size.
+            </param>
+            <param name="nData">
+            Upon entry, the number of bytes to read.  Upon exit, the number of
+            bytes actually read.  This value may be zero upon exit.
+            </param>
+            <returns>
+            The value <see cref="F:System.Data.SQLite.SQLiteErrorCode.Ok"/> upon success -OR- an
+            appropriate error code upon failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamAdapter.Output(System.IntPtr,System.IntPtr,System.Int32)">
+            <summary>
+            This method attempts to write <paramref name="nData"/> bytes to
+            the managed stream, reading them from the <paramref name="pData"/>
+            buffer.
+            </summary>
+            <param name="context">
+            Optional extra context information.  Currently, this will always
+            have a value of <see cref="F:System.IntPtr.Zero"/>.
+            </param>
+            <param name="pData">
+            A preallocated native buffer containing the requested output
+            bytes.  It must be at least <paramref name="nData"/> bytes in
+            size.
+            </param>
+            <param name="nData">
+            The number of bytes to write.
+            </param>
+            <returns>
+            The value <see cref="F:System.Data.SQLite.SQLiteErrorCode.Ok"/> upon success -OR- an
+            appropriate error code upon failure.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamAdapter.Dispose">
+            <summary>
+            Disposes of this object instance.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStreamAdapter.disposed">
+            <summary>
+            Non-zero if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamAdapter.CheckDisposed">
+            <summary>
+            Throws an exception if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamAdapter.Dispose(System.Boolean)">
+            <summary>
+            Disposes or finalizes this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this object is being disposed; otherwise, this object
+            is being finalized.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamAdapter.Finalize">
+            <summary>
+            Finalizes this object instance.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteSessionStreamManager">
+            <summary>
+            This class manages a collection of <see cref="T:System.Data.SQLite.SQLiteStreamAdapter"/>
+            instances. When used, it takes responsibility for creating, returning,
+            and disposing of its <see cref="T:System.Data.SQLite.SQLiteStreamAdapter"/> instances.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteSessionStreamManager.streamAdapters">
+            <summary>
+            The managed collection of <see cref="T:System.Data.SQLite.SQLiteStreamAdapter"/>
+            instances, keyed by their associated <see cref="T:System.IO.Stream"/>
+            instance.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteSessionStreamManager.flags">
+            <summary>
+            The flags associated with the connection.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSessionStreamManager.#ctor(System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Constructs a new instance of this class using the specified
+            connection flags.
+            </summary>
+            <param name="flags">
+            The flags associated with the parent connection.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSessionStreamManager.InitializeStreamAdapters">
+            <summary>
+            Makes sure the collection of <see cref="T:System.Data.SQLite.SQLiteStreamAdapter"/>
+            is created.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSessionStreamManager.DisposeStreamAdapters">
+            <summary>
+            Makes sure the collection of <see cref="T:System.Data.SQLite.SQLiteStreamAdapter"/>
+            is disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSessionStreamManager.GetAdapter(System.IO.Stream)">
+            <summary>
+            Attempts to return a <see cref="T:System.Data.SQLite.SQLiteStreamAdapter"/> instance
+            suitable for the specified <see cref="T:System.IO.Stream"/>.
+            </summary>
+            <param name="stream">
+            The <see cref="T:System.IO.Stream"/> instance.  If this value is null, a null
+            value will be returned.
+            </param>
+            <returns>
+            A <see cref="T:System.Data.SQLite.SQLiteStreamAdapter"/> instance.  Typically, these
+            are always freshly created; however, this method is designed to
+            return the existing <see cref="T:System.Data.SQLite.SQLiteStreamAdapter"/> instance
+            associated with the specified stream, should one exist.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSessionStreamManager.Dispose">
+            <summary>
+            Disposes of this object instance.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteSessionStreamManager.disposed">
+            <summary>
+            Non-zero if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSessionStreamManager.CheckDisposed">
+            <summary>
+            Throws an exception if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSessionStreamManager.Dispose(System.Boolean)">
+            <summary>
+            Disposes or finalizes this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this object is being disposed; otherwise, this object
+            is being finalized.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSessionStreamManager.Finalize">
+            <summary>
+            Finalizes this object instance.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteChangeGroup">
+            <summary>
+            This class represents a group of change sets (or patch sets).
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeGroup.streamManager">
+            <summary>
+            The <see cref="T:System.Data.SQLite.SQLiteSessionStreamManager"/> instance associated
+            with this change group.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeGroup.flags">
+            <summary>
+            The flags associated with the connection.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeGroup.changeGroup">
+            <summary>
+            The native handle for this change group.  This will be deleted when
+            this instance is disposed or finalized.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeGroup.#ctor(System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Constructs a new instance of this class using the specified
+            connection flags.
+            </summary>
+            <param name="flags">
+            The flags associated with the parent connection.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeGroup.CheckHandle">
+            <summary>
+            Throws an exception if the native change group handle is invalid.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeGroup.InitializeHandle">
+            <summary>
+            Makes sure the native change group handle is valid, creating it if
+            necessary.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeGroup.InitializeStreamManager">
+            <summary>
+            Makes sure the <see cref="T:System.Data.SQLite.SQLiteSessionStreamManager"/> instance
+            is available, creating it if necessary.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeGroup.GetStreamAdapter(System.IO.Stream)">
+            <summary>
+            Attempts to return a <see cref="T:System.Data.SQLite.SQLiteStreamAdapter"/> instance
+            suitable for the specified <see cref="T:System.IO.Stream"/>.
+            </summary>
+            <param name="stream">
+            The <see cref="T:System.IO.Stream"/> instance.  If this value is null, a null
+            value will be returned.
+            </param>
+            <returns>
+            A <see cref="T:System.Data.SQLite.SQLiteStreamAdapter"/> instance.  Typically, these
+            are always freshly created; however, this method is designed to
+            return the existing <see cref="T:System.Data.SQLite.SQLiteStreamAdapter"/> instance
+            associated with the specified stream, should one exist.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeGroup.AddChangeSet(System.Byte[])">
+            <summary>
+            Attempts to add a change set (or patch set) to this change group
+            instance.  The underlying data must be contained entirely within
+            the <paramref name="rawData" /> byte array.
+            </summary>
+            <param name="rawData">
+            The raw byte data for the specified change set (or patch set).
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeGroup.AddChangeSet(System.IO.Stream)">
+            <summary>
+            Attempts to add a change set (or patch set) to this change group
+            instance.  The underlying data will be read from the specified
+            <see cref="T:System.IO.Stream"/>.
+            </summary>
+            <param name="stream">
+            The <see cref="T:System.IO.Stream"/> instance containing the raw change set
+            (or patch set) data to read.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeGroup.CreateChangeSet(System.Byte[]@)">
+            <summary>
+            Attempts to create and return, via <paramref name="rawData" />, the
+            combined set of changes represented by this change group instance.
+            </summary>
+            <param name="rawData">
+            Upon success, this will contain the raw byte data for all the
+            changes in this change group instance.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeGroup.CreateChangeSet(System.IO.Stream)">
+            <summary>
+            Attempts to create and write, via <paramref name="stream"/>, the
+            combined set of changes represented by this change group instance.
+            </summary>
+            <param name="stream">
+            Upon success, the raw byte data for all the changes in this change
+            group instance will be written to this <see cref="T:System.IO.Stream"/>.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeGroup.Dispose">
+            <summary>
+            Disposes of this object instance.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeGroup.disposed">
+            <summary>
+            Non-zero if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeGroup.CheckDisposed">
+            <summary>
+            Throws an exception if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeGroup.Dispose(System.Boolean)">
+            <summary>
+            Disposes or finalizes this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this object is being disposed; otherwise, this object
+            is being finalized.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeGroup.Finalize">
+            <summary>
+            Finalizes this object instance.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteSession">
+            <summary>
+            This class represents the change tracking session associated with a
+            database.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteSession.streamManager">
+            <summary>
+            The <see cref="T:System.Data.SQLite.SQLiteSessionStreamManager"/> instance associated
+            with this session.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteSession.databaseName">
+            <summary>
+            The name of the database (e.g. "main") for this session.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteSession.session">
+            <summary>
+            The native handle for this session.  This will be deleted when
+            this instance is disposed or finalized.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteSession.xFilter">
+            <summary>
+            The delegate used to provide table filtering to the native API.
+            It will be null -OR- point to the <see cref="M:System.Data.SQLite.SQLiteSession.Filter(System.IntPtr,System.IntPtr)"/> method.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteSession.tableFilterCallback">
+            <summary>
+            The managed callback used to filter tables for this session.  Set
+            via the <see cref="M:System.Data.SQLite.SQLiteSession.SetTableFilter(System.Data.SQLite.SessionTableFilterCallback,System.Object)"/> method.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteSession.tableFilterClientData">
+            <summary>
+            The optional application-defined context data that was passed to
+            the <see cref="M:System.Data.SQLite.SQLiteSession.SetTableFilter(System.Data.SQLite.SessionTableFilterCallback,System.Object)"/> method.  This value may be null.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.#ctor(System.Data.SQLite.SQLiteConnectionHandle,System.Data.SQLite.SQLiteConnectionFlags,System.String)">
+            <summary>
+            Constructs a new instance of this class using the specified wrapped
+            native connection handle and associated flags.
+            </summary>
+            <param name="handle">
+            The wrapped native connection handle to be associated with this
+            session.
+            </param>
+            <param name="flags">
+            The flags associated with the connection represented by the
+            <paramref name="handle" /> value.
+            </param>
+            <param name="databaseName">
+            The name of the database (e.g. "main") for this session.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.CheckHandle">
+            <summary>
+            Throws an exception if the native session handle is invalid.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.InitializeHandle">
+            <summary>
+            Makes sure the native session handle is valid, creating it if
+            necessary.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.ApplyTableFilter(System.Data.SQLite.SessionTableFilterCallback,System.Object)">
+            <summary>
+            This method sets up the internal table filtering associated state
+            of this instance.
+            </summary>
+            <param name="callback">
+            The table filter callback -OR- null to clear any existing table
+            filter callback.
+            </param>
+            <param name="clientData">
+            The optional application-defined context data.  This value may be
+            null.
+            </param>
+            <returns>
+            The <see cref="T:System.Data.SQLite.UnsafeNativeMethods.xSessionFilter"/> native
+            delegate -OR- null to clear any existing table filter.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.InitializeStreamManager">
+            <summary>
+            Makes sure the <see cref="T:System.Data.SQLite.SQLiteSessionStreamManager"/> instance
+            is available, creating it if necessary.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.GetStreamAdapter(System.IO.Stream)">
+            <summary>
+            Attempts to return a <see cref="T:System.Data.SQLite.SQLiteStreamAdapter"/> instance
+            suitable for the specified <see cref="T:System.IO.Stream"/>.
+            </summary>
+            <param name="stream">
+            The <see cref="T:System.IO.Stream"/> instance.  If this value is null, a null
+            value will be returned.
+            </param>
+            <returns>
+            A <see cref="T:System.Data.SQLite.SQLiteStreamAdapter"/> instance.  Typically, these
+            are always freshly created; however, this method is designed to
+            return the existing <see cref="T:System.Data.SQLite.SQLiteStreamAdapter"/> instance
+            associated with the specified stream, should one exist.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.Filter(System.IntPtr,System.IntPtr)">
+            <summary>
+            This method is called when determining if a table needs to be
+            included in the tracked changes for the associated database.
+            </summary>
+            <param name="context">
+            Optional extra context information.  Currently, this will always
+            have a value of <see cref="F:System.IntPtr.Zero"/>.
+            </param>
+            <param name="pTblName">
+            The native pointer to the name of the table.
+            </param>
+            <returns>
+            Non-zero if changes to the specified table should be considered;
+            otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.IsEnabled">
+            <summary>
+            Determines if this session is currently tracking changes to its
+            associated database.
+            </summary>
+            <returns>
+            Non-zero if changes to the associated database are being trakced;
+            otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.SetToEnabled">
+            <summary>
+            Enables tracking of changes to the associated database.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.SetToDisabled">
+            <summary>
+            Disables tracking of changes to the associated database.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.IsIndirect">
+            <summary>
+            Determines if this session is currently set to mark changes as
+            indirect (i.e. as though they were made via a trigger or foreign
+            key action).
+            </summary>
+            <returns>
+            Non-zero if changes to the associated database are being marked as
+            indirect; otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.SetToIndirect">
+            <summary>
+            Sets the indirect flag for this session.  Subsequent changes will
+            be marked as indirect until this flag is changed again.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.SetToDirect">
+            <summary>
+            Clears the indirect flag for this session.  Subsequent changes will
+            be marked as direct until this flag is changed again.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.IsEmpty">
+            <summary>
+            Determines if there are any tracked changes currently within the
+            data for this session.
+            </summary>
+            <returns>
+            Non-zero if there are no changes within the data for this session;
+            otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.AttachTable(System.String)">
+            <summary>
+            Upon success, causes changes to the specified table(s) to start
+            being tracked.  Any tables impacted by calls to this method will
+            not cause the <see cref="T:System.Data.SQLite.SessionTableFilterCallback"/> callback
+            to be invoked.
+            </summary>
+            <param name="name">
+            The name of the table to be tracked -OR- null to track all
+            applicable tables within this database.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.SetTableFilter(System.Data.SQLite.SessionTableFilterCallback,System.Object)">
+            <summary>
+            This method is used to set the table filter for this instance.
+            </summary>
+            <param name="callback">
+            The table filter callback -OR- null to clear any existing table
+            filter callback.
+            </param>
+            <param name="clientData">
+            The optional application-defined context data.  This value may be
+            null.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.CreateChangeSet(System.Byte[]@)">
+            <summary>
+            Attempts to create and return, via <paramref name="rawData" />, the
+            set of changes represented by this session instance.
+            </summary>
+            <param name="rawData">
+            Upon success, this will contain the raw byte data for all the
+            changes in this session instance.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.CreateChangeSet(System.IO.Stream)">
+            <summary>
+            Attempts to create and write, via <paramref name="stream"/>, the
+            set of changes represented by this session instance.
+            </summary>
+            <param name="stream">
+            Upon success, the raw byte data for all the changes in this session
+            instance will be written to this <see cref="T:System.IO.Stream"/>.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.CreatePatchSet(System.Byte[]@)">
+            <summary>
+            Attempts to create and return, via <paramref name="rawData" />, the
+            set of changes represented by this session instance as a patch set.
+            </summary>
+            <param name="rawData">
+            Upon success, this will contain the raw byte data for all the
+            changes in this session instance.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.CreatePatchSet(System.IO.Stream)">
+            <summary>
+            Attempts to create and write, via <paramref name="stream"/>, the
+            set of changes represented by this session instance as a patch set.
+            </summary>
+            <param name="stream">
+            Upon success, the raw byte data for all the changes in this session
+            instance will be written to this <see cref="T:System.IO.Stream"/>.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.LoadDifferencesFromTable(System.String,System.String)">
+            <summary>
+            This method loads the differences between two tables [with the same
+            name, set of columns, and primary key definition] into this session
+            instance.
+            </summary>
+            <param name="fromDatabaseName">
+            The name of the database containing the table with the original
+            data (i.e. it will need updating in order to be identical to the
+            one within the database associated with this session instance).
+            </param>
+            <param name="tableName">
+            The name of the table.
+            </param>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteSession.disposed">
+            <summary>
+            Non-zero if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.CheckDisposed">
+            <summary>
+            Throws an exception if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteSession.Dispose(System.Boolean)">
+            <summary>
+            Disposes or finalizes this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this object is being disposed; otherwise, this object
+            is being finalized.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteChangeSetBase">
+            <summary>
+            This class represents the abstract concept of a set of changes.  It
+            acts as the base class for the <see cref="T:System.Data.SQLite.SQLiteMemoryChangeSet"/>
+            and <see cref="T:System.Data.SQLite.SQLiteStreamChangeSet"/> classes.  It derives from
+            the <see cref="T:System.Data.SQLite.SQLiteConnectionLock"/> class, which is used to hold
+            the underlying native connection handle open until the instances of
+            this class are disposed or finalized.  It also provides the ability
+            to construct wrapped native delegates of the
+            <see cref="T:System.Data.SQLite.UnsafeNativeMethods.xSessionFilter"/> and
+            <see cref="T:System.Data.SQLite.UnsafeNativeMethods.xSessionConflict"/> types.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetBase.#ctor(System.Data.SQLite.SQLiteConnectionHandle,System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Constructs an instance of this class using the specified wrapped
+            native connection handle.
+            </summary>
+            <param name="handle">
+            The wrapped native connection handle to be associated with this
+            change set.
+            </param>
+            <param name="flags">
+            The flags associated with the connection represented by the
+            <paramref name="handle" /> value.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetBase.CreateMetadataItem(System.IntPtr)">
+            <summary>
+            Creates and returns a concrete implementation of the
+            <see cref="T:System.Data.SQLite.ISQLiteChangeSetMetadataItem"/> interface.
+            </summary>
+            <param name="iterator">
+            The native iterator handle to use.
+            </param>
+            <returns>
+            An instance of the <see cref="T:System.Data.SQLite.ISQLiteChangeSetMetadataItem"/>
+            interface, which can be used to fetch metadata associated with
+            the current item in this set of changes.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetBase.GetDelegate(System.Data.SQLite.SessionTableFilterCallback,System.Object)">
+            <summary>
+            Attempts to create a
+            <see cref="T:System.Data.SQLite.UnsafeNativeMethods.xSessionFilter"/> native delegate
+            that invokes the specified
+            <see cref="T:System.Data.SQLite.SessionTableFilterCallback"/> delegate.
+            </summary>
+            <param name="tableFilterCallback">
+            The <see cref="T:System.Data.SQLite.SessionTableFilterCallback"/> to invoke when the
+            <see cref="T:System.Data.SQLite.UnsafeNativeMethods.xSessionFilter"/> native delegate
+            is called.  If this value is null then null is returned.
+            </param>
+            <param name="clientData">
+            The optional application-defined context data.  This value may be
+            null.
+            </param>
+            <returns>
+            The created <see cref="T:System.Data.SQLite.UnsafeNativeMethods.xSessionFilter"/>
+            native delegate -OR- null if it cannot be created.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetBase.GetDelegate(System.Data.SQLite.SessionConflictCallback,System.Object)">
+            <summary>
+            Attempts to create a
+            <see cref="T:System.Data.SQLite.UnsafeNativeMethods.xSessionConflict"/> native delegate
+            that invokes the specified
+            <see cref="T:System.Data.SQLite.SessionConflictCallback"/> delegate.
+            </summary>
+            <param name="conflictCallback">
+            The <see cref="T:System.Data.SQLite.SessionConflictCallback"/> to invoke when the
+            <see cref="T:System.Data.SQLite.UnsafeNativeMethods.xSessionConflict"/> native delegate
+            is called.  If this value is null then null is returned.
+            </param>
+            <param name="clientData">
+            The optional application-defined context data.  This value may be
+            null.
+            </param>
+            <returns>
+            The created <see cref="T:System.Data.SQLite.UnsafeNativeMethods.xSessionConflict"/>
+            native delegate -OR- null if it cannot be created.
+            </returns>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetBase.disposed">
+            <summary>
+            Non-zero if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetBase.CheckDisposed">
+            <summary>
+            Throws an exception if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetBase.Dispose(System.Boolean)">
+            <summary>
+            Disposes or finalizes this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this object is being disposed; otherwise, this object
+            is being finalized.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteMemoryChangeSet">
+            <summary>
+            This class represents a set of changes contained entirely in memory.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteMemoryChangeSet.rawData">
+            <summary>
+            The raw byte data for this set of changes.  Since this data must
+            be marshalled to a native memory buffer before being used, there
+            must be enough memory available to store at least two times the
+            amount of data contained within it.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteMemoryChangeSet.startFlags">
+            <summary>
+            The flags used to create the change set iterator.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemoryChangeSet.#ctor(System.Byte[],System.Data.SQLite.SQLiteConnectionHandle,System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Constructs an instance of this class using the specified raw byte
+            data and wrapped native connection handle.
+            </summary>
+            <param name="rawData">
+            The raw byte data for the specified change set (or patch set).
+            </param>
+            <param name="handle">
+            The wrapped native connection handle to be associated with this
+            set of changes.
+            </param>
+            <param name="connectionFlags">
+            The flags associated with the connection represented by the
+            <paramref name="handle" /> value.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemoryChangeSet.#ctor(System.Byte[],System.Data.SQLite.SQLiteConnectionHandle,System.Data.SQLite.SQLiteConnectionFlags,System.Data.SQLite.SQLiteChangeSetStartFlags)">
+            <summary>
+            Constructs an instance of this class using the specified raw byte
+            data and wrapped native connection handle.
+            </summary>
+            <param name="rawData">
+            The raw byte data for the specified change set (or patch set).
+            </param>
+            <param name="handle">
+            The wrapped native connection handle to be associated with this
+            set of changes.
+            </param>
+            <param name="connectionFlags">
+            The flags associated with the connection represented by the
+            <paramref name="handle" /> value.
+            </param>
+            <param name="startFlags">
+            The flags used to create the change set iterator.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemoryChangeSet.Invert">
+            <summary>
+            This method "inverts" the set of changes within this instance.
+            Applying an inverted set of changes to a database reverses the
+            effects of applying the uninverted changes.  Specifically:
+            <![CDATA[<ul>]]><![CDATA[<li>]]>
+            Each DELETE change is changed to an INSERT, and
+            <![CDATA[</li>]]><![CDATA[<li>]]>
+            Each INSERT change is changed to a DELETE, and
+            <![CDATA[</li>]]><![CDATA[<li>]]>
+            For each UPDATE change, the old.* and new.* values are exchanged.
+            <![CDATA[</li>]]><![CDATA[</ul>]]>
+            This method does not change the order in which changes appear
+            within the set of changes. It merely reverses the sense of each
+            individual change.
+            </summary>
+            <returns>
+            The new <see cref="T:System.Data.SQLite.ISQLiteChangeSet"/> instance that represents
+            the resulting set of changes.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemoryChangeSet.CombineWith(System.Data.SQLite.ISQLiteChangeSet)">
+            <summary>
+            This method combines the specified set of changes with the ones
+            contained in this instance.
+            </summary>
+            <param name="changeSet">
+            The changes to be combined with those in this instance.
+            </param>
+            <returns>
+            The new <see cref="T:System.Data.SQLite.ISQLiteChangeSet"/> instance that represents
+            the resulting set of changes.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemoryChangeSet.Apply(System.Data.SQLite.SessionConflictCallback,System.Object)">
+            <summary>
+            Attempts to apply the set of changes in this instance to the
+            associated database.
+            </summary>
+            <param name="conflictCallback">
+            The <see cref="T:System.Data.SQLite.SessionConflictCallback"/> delegate that will need
+            to handle any conflicting changes that may arise.
+            </param>
+            <param name="clientData">
+            The optional application-defined context data.  This value may be
+            null.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemoryChangeSet.Apply(System.Data.SQLite.SessionConflictCallback,System.Data.SQLite.SessionTableFilterCallback,System.Object)">
+            <summary>
+            Attempts to apply the set of changes in this instance to the
+            associated database.
+            </summary>
+            <param name="conflictCallback">
+            The <see cref="T:System.Data.SQLite.SessionConflictCallback"/> delegate that will need
+            to handle any conflicting changes that may arise.
+            </param>
+            <param name="tableFilterCallback">
+            The optional <see cref="T:System.Data.SQLite.SessionTableFilterCallback"/> delegate
+            that can be used to filter the list of tables impacted by the set
+            of changes.
+            </param>
+            <param name="clientData">
+            The optional application-defined context data.  This value may be
+            null.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemoryChangeSet.GetEnumerator">
+            <summary>
+            Creates an <see cref="T:System.Collections.IEnumerator"/> capable of iterating over the
+            items within this set of changes.
+            </summary>
+            <returns>
+            The new <see cref="T:System.Collections.Generic.IEnumerator`1"/>
+            instance.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemoryChangeSet.System#Collections#IEnumerable#GetEnumerator">
+            <summary>
+            Creates an <see cref="T:System.Collections.IEnumerator"/> capable of iterating over the
+            items within this set of changes.
+            </summary>
+            <returns>
+            The new <see cref="T:System.Collections.IEnumerator"/> instance.
+            </returns>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteMemoryChangeSet.disposed">
+            <summary>
+            Non-zero if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemoryChangeSet.CheckDisposed">
+            <summary>
+            Throws an exception if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemoryChangeSet.Dispose(System.Boolean)">
+            <summary>
+            Disposes or finalizes this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this object is being disposed; otherwise, this object
+            is being finalized.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteStreamChangeSet">
+            <summary>
+            This class represents a set of changes that are backed by a
+            <see cref="T:System.IO.Stream"/> instance.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStreamChangeSet.inputStreamAdapter">
+            <summary>
+            The <see cref="T:System.Data.SQLite.SQLiteStreamAdapter"/> instance that is managing
+            the underlying input <see cref="T:System.IO.Stream"/> used as the backing
+            store for the set of changes associated with this instance.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStreamChangeSet.outputStreamAdapter">
+            <summary>
+            The <see cref="T:System.Data.SQLite.SQLiteStreamAdapter"/> instance that is managing
+            the underlying output <see cref="T:System.IO.Stream"/> used as the backing
+            store for the set of changes generated by the <see cref="M:System.Data.SQLite.SQLiteStreamChangeSet.Invert"/>
+            or <see cref="M:System.Data.SQLite.SQLiteStreamChangeSet.CombineWith(System.Data.SQLite.ISQLiteChangeSet)"/> methods.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStreamChangeSet.inputStream">
+            <summary>
+            The <see cref="T:System.IO.Stream"/> instance used as the backing store for
+            the set of changes associated with this instance.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStreamChangeSet.outputStream">
+            <summary>
+            The <see cref="T:System.IO.Stream"/> instance used as the backing store for
+            the set of changes generated by the <see cref="M:System.Data.SQLite.SQLiteStreamChangeSet.Invert"/> or
+            <see cref="M:System.Data.SQLite.SQLiteStreamChangeSet.CombineWith(System.Data.SQLite.ISQLiteChangeSet)"/> methods.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStreamChangeSet.startFlags">
+            <summary>
+            The flags used to create the change set iterator.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamChangeSet.#ctor(System.IO.Stream,System.IO.Stream,System.Data.SQLite.SQLiteConnectionHandle,System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Constructs an instance of this class using the specified streams
+            and wrapped native connection handle.
+            </summary>
+            <param name="inputStream">
+            The <see cref="T:System.IO.Stream"/> where the raw byte data for the set of
+            changes may be read.
+            </param>
+            <param name="outputStream">
+            The <see cref="T:System.IO.Stream"/> where the raw byte data for resulting
+            sets of changes may be written.
+            </param>
+            <param name="handle">
+            The wrapped native connection handle to be associated with this
+            set of changes.
+            </param>
+            <param name="connectionFlags">
+            The flags associated with the connection represented by the
+            <paramref name="handle"/> value.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamChangeSet.#ctor(System.IO.Stream,System.IO.Stream,System.Data.SQLite.SQLiteConnectionHandle,System.Data.SQLite.SQLiteConnectionFlags,System.Data.SQLite.SQLiteChangeSetStartFlags)">
+            <summary>
+            Constructs an instance of this class using the specified streams
+            and wrapped native connection handle.
+            </summary>
+            <param name="inputStream">
+            The <see cref="T:System.IO.Stream"/> where the raw byte data for the set of
+            changes may be read.
+            </param>
+            <param name="outputStream">
+            The <see cref="T:System.IO.Stream"/> where the raw byte data for resulting
+            sets of changes may be written.
+            </param>
+            <param name="handle">
+            The wrapped native connection handle to be associated with this
+            set of changes.
+            </param>
+            <param name="connectionFlags">
+            The flags associated with the connection represented by the
+            <paramref name="handle"/> value.
+            </param>
+            <param name="startFlags">
+            The flags used to create the change set iterator.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamChangeSet.CheckInputStream">
+            <summary>
+            Throws an exception if the input stream or its associated stream
+            adapter are invalid.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamChangeSet.CheckOutputStream">
+            <summary>
+            Throws an exception if the output stream or its associated stream
+            adapter are invalid.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamChangeSet.Invert">
+            <summary>
+            This method "inverts" the set of changes within this instance.
+            Applying an inverted set of changes to a database reverses the
+            effects of applying the uninverted changes.  Specifically:
+            <![CDATA[<ul>]]><![CDATA[<li>]]>
+            Each DELETE change is changed to an INSERT, and
+            <![CDATA[</li>]]><![CDATA[<li>]]>
+            Each INSERT change is changed to a DELETE, and
+            <![CDATA[</li>]]><![CDATA[<li>]]>
+            For each UPDATE change, the old.* and new.* values are exchanged.
+            <![CDATA[</li>]]><![CDATA[</ul>]]>
+            This method does not change the order in which changes appear
+            within the set of changes. It merely reverses the sense of each
+            individual change.
+            </summary>
+            <returns>
+            Since the resulting set of changes is written to the output stream,
+            this method always returns null.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamChangeSet.CombineWith(System.Data.SQLite.ISQLiteChangeSet)">
+            <summary>
+            This method combines the specified set of changes with the ones
+            contained in this instance.
+            </summary>
+            <param name="changeSet">
+            The changes to be combined with those in this instance.
+            </param>
+            <returns>
+            Since the resulting set of changes is written to the output stream,
+            this method always returns null.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamChangeSet.Apply(System.Data.SQLite.SessionConflictCallback,System.Object)">
+            <summary>
+            Attempts to apply the set of changes in this instance to the
+            associated database.
+            </summary>
+            <param name="conflictCallback">
+            The <see cref="T:System.Data.SQLite.SessionConflictCallback"/> delegate that will need
+            to handle any conflicting changes that may arise.
+            </param>
+            <param name="clientData">
+            The optional application-defined context data.  This value may be
+            null.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamChangeSet.Apply(System.Data.SQLite.SessionConflictCallback,System.Data.SQLite.SessionTableFilterCallback,System.Object)">
+            <summary>
+            Attempts to apply the set of changes in this instance to the
+            associated database.
+            </summary>
+            <param name="conflictCallback">
+            The <see cref="T:System.Data.SQLite.SessionConflictCallback"/> delegate that will need
+            to handle any conflicting changes that may arise.
+            </param>
+            <param name="tableFilterCallback">
+            The optional <see cref="T:System.Data.SQLite.SessionTableFilterCallback"/> delegate
+            that can be used to filter the list of tables impacted by the set
+            of changes.
+            </param>
+            <param name="clientData">
+            The optional application-defined context data.  This value may be
+            null.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamChangeSet.GetEnumerator">
+            <summary>
+            Creates an <see cref="T:System.Collections.IEnumerator"/> capable of iterating over the
+            items within this set of changes.
+            </summary>
+            <returns>
+            The new <see cref="T:System.Collections.Generic.IEnumerator`1"/>
+            instance.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamChangeSet.System#Collections#IEnumerable#GetEnumerator">
+            <summary>
+            Creates an <see cref="T:System.Collections.IEnumerator"/> capable of iterating over the
+            items within this set of changes.
+            </summary>
+            <returns>
+            The new <see cref="T:System.Collections.IEnumerator"/> instance.
+            </returns>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStreamChangeSet.disposed">
+            <summary>
+            Non-zero if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamChangeSet.CheckDisposed">
+            <summary>
+            Throws an exception if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamChangeSet.Dispose(System.Boolean)">
+            <summary>
+            Disposes or finalizes this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this object is being disposed; otherwise, this object
+            is being finalized.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteChangeSetEnumerator">
+            <summary>
+            This class represents an <see cref="T:System.Collections.IEnumerator"/> that is capable of
+            enumerating over a set of changes.  It serves as the base class for the
+            <see cref="T:System.Data.SQLite.SQLiteMemoryChangeSetEnumerator"/> and
+            <see cref="T:System.Data.SQLite.SQLiteStreamChangeSetEnumerator"/> classes.  It manages and
+            owns an instance of the <see cref="T:System.Data.SQLite.SQLiteChangeSetIterator"/> class.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetEnumerator.iterator">
+            <summary>
+            This managed change set iterator is managed and owned by this
+            class.  It will be disposed when this class is disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetEnumerator.#ctor(System.Data.SQLite.SQLiteChangeSetIterator)">
+            <summary>
+            Constructs an instance of this class using the specified managed
+            change set iterator.
+            </summary>
+            <param name="iterator">
+            The managed iterator instance to use.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetEnumerator.CheckIterator">
+            <summary>
+            Throws an exception if the managed iterator instance is invalid.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetEnumerator.SetIterator(System.Data.SQLite.SQLiteChangeSetIterator)">
+            <summary>
+            Sets the managed iterator instance to a new value.
+            </summary>
+            <param name="iterator">
+            The new managed iterator instance to use.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetEnumerator.CloseIterator">
+            <summary>
+            Disposes of the managed iterator instance and sets its value to
+            null.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetEnumerator.ResetIterator(System.Data.SQLite.SQLiteChangeSetIterator)">
+            <summary>
+            Disposes of the existing managed iterator instance and then sets it
+            to a new value.
+            </summary>
+            <param name="iterator">
+            The new managed iterator instance to use.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetEnumerator.MoveNext">
+            <summary>
+            Attempts to advance to the next item in the set of changes.
+            </summary>
+            <returns>
+            Non-zero if more items are available; otherwise, zero.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetEnumerator.Reset">
+            <summary>
+            Throws <see cref="T:System.NotImplementedException"/> because not all the
+            derived classes are able to support reset functionality.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetEnumerator.Dispose">
+            <summary>
+            Disposes of this object instance.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetEnumerator.disposed">
+            <summary>
+            Non-zero if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetEnumerator.CheckDisposed">
+            <summary>
+            Throws an exception if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetEnumerator.Dispose(System.Boolean)">
+            <summary>
+            Disposes or finalizes this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this object is being disposed; otherwise, this object
+            is being finalized.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetEnumerator.Finalize">
+            <summary>
+            Finalizes this object instance.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteChangeSetEnumerator.Current">
+            <summary>
+            Returns the current change within the set of changes, represented
+            by a <see cref="T:System.Data.SQLite.ISQLiteChangeSetMetadataItem"/> instance.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteChangeSetEnumerator.System#Collections#IEnumerator#Current">
+            <summary>
+            Returns the current change within the set of changes, represented
+            by a <see cref="T:System.Data.SQLite.ISQLiteChangeSetMetadataItem"/> instance.
+            </summary>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteMemoryChangeSetEnumerator">
+            <summary>
+            This class represents an <see cref="T:System.Collections.IEnumerator"/> that is capable of
+            enumerating over a set of changes contained entirely in memory.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteMemoryChangeSetEnumerator.rawData">
+            <summary>
+            The raw byte data for this set of changes.  Since this data must
+            be marshalled to a native memory buffer before being used, there
+            must be enough memory available to store at least two times the
+            amount of data contained within it.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteMemoryChangeSetEnumerator.flags">
+            <summary>
+            The flags used to create the change set iterator.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemoryChangeSetEnumerator.#ctor(System.Byte[])">
+            <summary>
+            Constructs an instance of this class using the specified raw byte
+            data.
+            </summary>
+            <param name="rawData">
+            The raw byte data containing the set of changes for this
+            enumerator.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemoryChangeSetEnumerator.#ctor(System.Byte[],System.Data.SQLite.SQLiteChangeSetStartFlags)">
+            <summary>
+            Constructs an instance of this class using the specified raw byte
+            data.
+            </summary>
+            <param name="rawData">
+            The raw byte data containing the set of changes for this
+            enumerator.
+            </param>
+            <param name="flags">
+            The flags used to create the change set iterator.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemoryChangeSetEnumerator.Reset">
+            <summary>
+            Resets the enumerator to its initial position.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteMemoryChangeSetEnumerator.disposed">
+            <summary>
+            Non-zero if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemoryChangeSetEnumerator.CheckDisposed">
+            <summary>
+            Throws an exception if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteMemoryChangeSetEnumerator.Dispose(System.Boolean)">
+            <summary>
+            Disposes or finalizes this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this object is being disposed; otherwise, this object
+            is being finalized.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteStreamChangeSetEnumerator">
+            <summary>
+            This class represents an <see cref="T:System.Collections.IEnumerator"/> that is capable of
+            enumerating over a set of changes backed by a <see cref="T:System.IO.Stream"/>
+            instance.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamChangeSetEnumerator.#ctor(System.IO.Stream,System.Data.SQLite.SQLiteConnectionFlags)">
+            <summary>
+            Constructs an instance of this class using the specified stream.
+            </summary>
+            <param name="stream">
+            The <see cref="T:System.IO.Stream"/> where the raw byte data for the set of
+            changes may be read.
+            </param>
+            <param name="connectionFlags">
+            The flags associated with the parent connection.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamChangeSetEnumerator.#ctor(System.IO.Stream,System.Data.SQLite.SQLiteConnectionFlags,System.Data.SQLite.SQLiteChangeSetStartFlags)">
+            <summary>
+            Constructs an instance of this class using the specified stream.
+            </summary>
+            <param name="stream">
+            The <see cref="T:System.IO.Stream"/> where the raw byte data for the set of
+            changes may be read.
+            </param>
+            <param name="connectionFlags">
+            The flags associated with the parent connection.
+            </param>
+            <param name="startFlags">
+            The flags used to create the change set iterator.
+            </param>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteStreamChangeSetEnumerator.disposed">
+            <summary>
+            Non-zero if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamChangeSetEnumerator.CheckDisposed">
+            <summary>
+            Throws an exception if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteStreamChangeSetEnumerator.Dispose(System.Boolean)">
+            <summary>
+            Disposes or finalizes this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this object is being disposed; otherwise, this object
+            is being finalized.
+            </param>
+        </member>
+        <member name="T:System.Data.SQLite.SQLiteChangeSetMetadataItem">
+            <summary>
+            This interface implements properties and methods used to fetch metadata
+            about one change within a set of changes for a database.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetMetadataItem.iterator">
+            <summary>
+            The <see cref="T:System.Data.SQLite.SQLiteChangeSetIterator"/> instance to use.  This
+            will NOT be owned by this class and will not be disposed upon this
+            class being disposed or finalized.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetMetadataItem.#ctor(System.Data.SQLite.SQLiteChangeSetIterator)">
+            <summary>
+            Constructs an instance of this class using the specified iterator
+            instance.
+            </summary>
+            <param name="iterator">
+            The managed iterator instance to use.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetMetadataItem.CheckIterator">
+            <summary>
+            Throws an exception if the managed iterator instance is invalid.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetMetadataItem.PopulateOperationMetadata">
+            <summary>
+            Populates the underlying data for the <see cref="P:System.Data.SQLite.SQLiteChangeSetMetadataItem.TableName"/>,
+            <see cref="P:System.Data.SQLite.SQLiteChangeSetMetadataItem.NumberOfColumns"/>, <see cref="P:System.Data.SQLite.SQLiteChangeSetMetadataItem.OperationCode"/>, and
+            <see cref="P:System.Data.SQLite.SQLiteChangeSetMetadataItem.Indirect"/> properties, using the appropriate native
+            API.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetMetadataItem.PopulatePrimaryKeyColumns">
+            <summary>
+            Populates the underlying data for the
+            <see cref="P:System.Data.SQLite.SQLiteChangeSetMetadataItem.PrimaryKeyColumns"/> property using the appropriate
+            native API.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetMetadataItem.PopulateNumberOfForeignKeyConflicts">
+            <summary>
+            Populates the underlying data for the
+            <see cref="P:System.Data.SQLite.SQLiteChangeSetMetadataItem.NumberOfForeignKeyConflicts"/> property using the
+            appropriate native API.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetMetadataItem.tableName">
+            <summary>
+            Backing field for the <see cref="P:System.Data.SQLite.SQLiteChangeSetMetadataItem.TableName"/> property. This value
+            will be null if this field has not yet been populated via the
+            underlying native API.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetMetadataItem.numberOfColumns">
+            <summary>
+            Backing field for the <see cref="P:System.Data.SQLite.SQLiteChangeSetMetadataItem.NumberOfColumns"/> property. This
+            value will be null if this field has not yet been populated via the
+            underlying native API.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetMetadataItem.operationCode">
+            <summary>
+            Backing field for the <see cref="P:System.Data.SQLite.SQLiteChangeSetMetadataItem.OperationCode"/> property.  This
+            value will be null if this field has not yet been populated via the
+            underlying native API.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetMetadataItem.indirect">
+            <summary>
+            Backing field for the <see cref="P:System.Data.SQLite.SQLiteChangeSetMetadataItem.Indirect"/> property.  This value
+            will be null if this field has not yet been populated via the
+            underlying native API.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetMetadataItem.primaryKeyColumns">
+            <summary>
+            Backing field for the <see cref="P:System.Data.SQLite.SQLiteChangeSetMetadataItem.PrimaryKeyColumns"/> property.
+            This value will be null if this field has not yet been populated
+            via the underlying native API.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetMetadataItem.numberOfForeignKeyConflicts">
+            <summary>
+            Backing field for the <see cref="P:System.Data.SQLite.SQLiteChangeSetMetadataItem.NumberOfForeignKeyConflicts"/>
+            property.  This value will be null if this field has not yet been
+            populated via the underlying native API.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetMetadataItem.GetOldValue(System.Int32)">
+            <summary>
+            Queries and returns the original value of a given column for this
+            change.  This method may only be called when the
+            <see cref="P:System.Data.SQLite.SQLiteChangeSetMetadataItem.OperationCode"/> has a value of
+            <see cref="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Update"/> or
+            <see cref="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Delete"/>.
+            </summary>
+            <param name="columnIndex">
+            The index for the column.  This value must be between zero and one
+            less than the total number of columns for this table.
+            </param>
+            <returns>
+            The original value of a given column for this change.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetMetadataItem.GetNewValue(System.Int32)">
+            <summary>
+            Queries and returns the updated value of a given column for this
+            change.  This method may only be called when the
+            <see cref="P:System.Data.SQLite.SQLiteChangeSetMetadataItem.OperationCode"/> has a value of
+            <see cref="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Insert"/> or
+            <see cref="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Update"/>.
+            </summary>
+            <param name="columnIndex">
+            The index for the column.  This value must be between zero and one
+            less than the total number of columns for this table.
+            </param>
+            <returns>
+            The updated value of a given column for this change.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetMetadataItem.GetConflictValue(System.Int32)">
+            <summary>
+            Queries and returns the conflicting value of a given column for
+            this change.  This method may only be called from within a
+            <see cref="T:System.Data.SQLite.SessionConflictCallback"/> delegate when the conflict
+            type is <see cref="F:System.Data.SQLite.SQLiteChangeSetConflictType.Data"/> or
+            <see cref="F:System.Data.SQLite.SQLiteChangeSetConflictType.Conflict"/>.
+            </summary>
+            <param name="columnIndex">
+            The index for the column.  This value must be between zero and one
+            less than the total number of columns for this table.
+            </param>
+            <returns>
+            The conflicting value of a given column for this change.
+            </returns>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetMetadataItem.Dispose">
+            <summary>
+            Disposes of this object instance.
+            </summary>
+        </member>
+        <member name="F:System.Data.SQLite.SQLiteChangeSetMetadataItem.disposed">
+            <summary>
+            Non-zero if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetMetadataItem.CheckDisposed">
+            <summary>
+            Throws an exception if this object instance has been disposed.
+            </summary>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetMetadataItem.Dispose(System.Boolean)">
+            <summary>
+            Disposes or finalizes this object instance.
+            </summary>
+            <param name="disposing">
+            Non-zero if this object is being disposed; otherwise, this object
+            is being finalized.
+            </param>
+        </member>
+        <member name="M:System.Data.SQLite.SQLiteChangeSetMetadataItem.Finalize">
+            <summary>
+            Finalizes this object instance.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteChangeSetMetadataItem.TableName">
+            <summary>
+            The name of the table the change was made to.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteChangeSetMetadataItem.NumberOfColumns">
+            <summary>
+            The number of columns impacted by this change.  This value can be
+            used to determine the highest valid column index that may be used
+            with the <see cref="M:System.Data.SQLite.SQLiteChangeSetMetadataItem.GetOldValue(System.Int32)"/>, <see cref="M:System.Data.SQLite.SQLiteChangeSetMetadataItem.GetNewValue(System.Int32)"/>,
+            and <see cref="M:System.Data.SQLite.SQLiteChangeSetMetadataItem.GetConflictValue(System.Int32)"/> methods of this interface.  It
+            will be this value minus one.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteChangeSetMetadataItem.OperationCode">
+            <summary>
+            This will contain the value
+            <see cref="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Insert"/>,
+            <see cref="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Update"/>, or
+            <see cref="F:System.Data.SQLite.SQLiteAuthorizerActionCode.Delete"/>, corresponding to
+            the overall type of change this item represents.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteChangeSetMetadataItem.Indirect">
+            <summary>
+            Non-zero if this change is considered to be indirect (i.e. as
+            though they were made via a trigger or foreign key action).
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteChangeSetMetadataItem.PrimaryKeyColumns">
+            <summary>
+            This array contains a <see cref="T:System.Boolean"/> for each column in
+            the table associated with this change.  The element will be zero
+            if the column is not part of the primary key; otherwise, it will
+            be non-zero.
+            </summary>
+        </member>
+        <member name="P:System.Data.SQLite.SQLiteChangeSetMetadataItem.NumberOfForeignKeyConflicts">
+            <summary>
+            This method may only be called from within a
+            <see cref="T:System.Data.SQLite.SessionConflictCallback"/> delegate when the conflict
+            type is <see cref="F:System.Data.SQLite.SQLiteChangeSetConflictType.ForeignKey"/>.  It
+            returns the total number of known foreign key violations in the
+            destination database.
+            </summary>
+        </member>
+    </members>
+</doc>
diff --git a/VisionBuilder.Core/VisionBuilder.Core.csproj b/VisionBuilder.Core/VisionBuilder.Core.csproj
deleted file mode 100644
index f8dbc78..0000000
--- a/VisionBuilder.Core/VisionBuilder.Core.csproj
+++ /dev/null
@@ -1,52 +0,0 @@
-锘�<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{3E3BF44A-0B69-45C5-9512-528CB48A7106}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>VisionBuilder.Core</RootNamespace>
-    <AssemblyName>VisionBuilder.Core</AssemblyName>
-    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <Deterministic>true</Deterministic>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.Xml.Linq" />
-    <Reference Include="System.Data.DataSetExtensions" />
-    <Reference Include="Microsoft.CSharp" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Net.Http" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Api\IProgram.cs" />
-    <Compile Include="Api\ISequnce.cs" />
-    <Compile Include="Api\IStep.cs" />
-    <Compile Include="Api\IStepRunner.cs" />
-    <Compile Include="Entity\Param.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-</Project>
\ No newline at end of file
diff --git a/VisionBuilder.Engine/VisionBuilder.Engine.csproj b/VisionBuilder.Engine/VisionBuilder.Engine.csproj
index 3100f32..553239e 100644
--- a/VisionBuilder.Engine/VisionBuilder.Engine.csproj
+++ b/VisionBuilder.Engine/VisionBuilder.Engine.csproj
@@ -30,6 +30,24 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />
     <Reference Include="System.Core" />
@@ -45,9 +63,9 @@
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\VisionBuilder.Core\VisionBuilder.Core.csproj">
+    <ProjectReference Include="..\HMI.Core\HMI.Core.csproj">
       <Project>{3e3bf44a-0b69-45c5-9512-528cb48a7106}</Project>
-      <Name>VisionBuilder.Core</Name>
+      <Name>HMI.Core</Name>
     </ProjectReference>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
diff --git a/VisionBuilder.Engine/app.config b/VisionBuilder.Engine/app.config
new file mode 100644
index 0000000..d23a83e
--- /dev/null
+++ b/VisionBuilder.Engine/app.config
@@ -0,0 +1,19 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.2.1.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/VisionBuilder.Run/Properties/AssemblyInfo.cs b/VisionBuilder.Run/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..63a35d4
--- /dev/null
+++ b/VisionBuilder.Run/Properties/AssemblyInfo.cs
@@ -0,0 +1,52 @@
+锘縰sing System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
+[assembly: AssemblyTitle("VisionBuilder.Run")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Organization")]
+[assembly: AssemblyProduct("VisionBuilder.Run")]
+[assembly: AssemblyCopyright("Copyright 漏 Organization 2025")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏� ComVisible 璁剧疆涓� false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵� COM 缁勪欢涓嶅彲瑙併�傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�ц缃负 true銆�
+[assembly: ComVisible(false)]
+
+//鑻ヨ寮�濮嬬敓鎴愬彲鏈湴鍖栫殑搴旂敤绋嬪簭锛岃璁剧疆
+//.csproj 鏂囦欢涓殑 <UICulture>CultureYouAreCodingWith</UICulture>
+//鍦� <PropertyGroup> 涓�備緥濡傦紝濡傛灉浣犱娇鐢ㄧ殑鏄編鍥借嫳璇��
+//浣跨敤鐨勬槸缇庡浗鑻辫锛岃灏� <UICulture> 璁剧疆涓� en-US銆�  鐒跺悗鍙栨秷
+//瀵逛互涓� NeutralResourceLanguage 鐗规�х殑娉ㄩ噴銆�  鏇存柊
+//浠ヤ笅琛屼腑鐨勨�渆n-US鈥濅互鍖归厤椤圭洰鏂囦欢涓殑 UICulture 璁剧疆銆�
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly:ThemeInfo(
+    ResourceDictionaryLocation.None, //涓婚鐗瑰畾璧勬簮璇嶅吀鎵�澶勪綅缃�
+                             //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                             //鎴栧簲鐢ㄧ▼搴忚祫婧愬瓧鍏镐腑鎵惧埌鏃朵娇鐢�)
+    ResourceDictionaryLocation.SourceAssembly //甯歌璧勬簮璇嶅吀鎵�澶勪綅缃�
+                                      //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                                      //銆佸簲鐢ㄧ▼搴忔垨浠讳綍涓婚涓撶敤璧勬簮瀛楀吀涓壘鍒版椂浣跨敤)
+)]
+
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�肩粍鎴�: 
+//
+//      涓荤増鏈�
+//      娆$増鏈�
+//      鐢熸垚鍙�
+//      淇鍙�
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/VisionBuilder.Run/Properties/Resources.Designer.cs b/VisionBuilder.Run/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..d74c4aa
--- /dev/null
+++ b/VisionBuilder.Run/Properties/Resources.Designer.cs
@@ -0,0 +1,62 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
+//     杩愯鏃剁増鏈�: 4.0.30319.42000
+//
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳藉鑷翠笉姝g‘鐨勮涓猴紝濡傛灉
+//     閲嶆柊鐢熸垚浠g爜锛屽垯鎵�鍋氭洿鏀瑰皢涓㈠け銆�
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace VisionBuilder.Run.Properties {
+    
+    
+    /// <summary>
+    ///   寮虹被鍨嬭祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲瀛楃涓茬瓑銆�
+    /// </summary>
+    // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+    // 绫婚�氳繃绫讳技浜� ResGen 鎴� Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆�
+    // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈� .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛� ResGen
+    // (浠� /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆�
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   杩斿洖姝ょ被浣跨敤鐨勭紦瀛� ResourceManager 瀹炰緥銆�
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if ((resourceMan == null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("VisionBuilder.Run.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   閲嶅啓褰撳墠绾跨▼鐨� CurrentUICulture 灞炴�э紝瀵�
+        ///   浣跨敤姝ゅ己绫诲瀷璧勬簮绫荤殑鎵�鏈夎祫婧愭煡鎵炬墽琛岄噸鍐欍��
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}
diff --git a/VisionBuilder.Run/Properties/Resources.resx b/VisionBuilder.Run/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/VisionBuilder.Run/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/VisionBuilder.Run/Properties/Settings.Designer.cs b/VisionBuilder.Run/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..90546e5
--- /dev/null
+++ b/VisionBuilder.Run/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace VisionBuilder.Run.Properties
+{
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}
diff --git a/VisionBuilder.Run/Properties/Settings.settings b/VisionBuilder.Run/Properties/Settings.settings
new file mode 100644
index 0000000..033d7a5
--- /dev/null
+++ b/VisionBuilder.Run/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘�<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>
\ No newline at end of file
diff --git a/VisionBuilder.Run/VisionBuilder.Run.csproj b/VisionBuilder.Run/VisionBuilder.Run.csproj
new file mode 100644
index 0000000..023d44e
--- /dev/null
+++ b/VisionBuilder.Run/VisionBuilder.Run.csproj
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{7C299AED-88CC-437E-A68B-1550AA72E6B0}</ProjectGuid>
+    <OutputType>library</OutputType>
+    <RootNamespace>VisionBuilder.Run</RootNamespace>
+    <AssemblyName>VisionBuilder.Run</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <WarningLevel>4</WarningLevel>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xaml">
+      <RequiredTargetFramework>4.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="WindowsBase" />
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/VisionBuilder.Test/PluginOne.cs b/VisionBuilder.Test/PluginOne.cs
index c11bb3b..06f122a 100644
--- a/VisionBuilder.Test/PluginOne.cs
+++ b/VisionBuilder.Test/PluginOne.cs
@@ -1,6 +1,6 @@
 锘縰sing System.Collections.Generic;
-using VisionBuilder.Core.Api;
-using VisionBuilder.Core.Entity;
+using HMI.Core.Api;
+using HMI.Core.Entity;
 
 namespace VisionBuilder.Test
 {
diff --git a/VisionBuilder.Test/VisionBuilder.Test.csproj b/VisionBuilder.Test/VisionBuilder.Test.csproj
index e0e52f2..e9a3d64 100644
--- a/VisionBuilder.Test/VisionBuilder.Test.csproj
+++ b/VisionBuilder.Test/VisionBuilder.Test.csproj
@@ -30,6 +30,24 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />
     <Reference Include="System.Core" />
@@ -45,9 +63,9 @@
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\VisionBuilder.Core\VisionBuilder.Core.csproj">
+    <ProjectReference Include="..\HMI.Core\HMI.Core.csproj">
       <Project>{3e3bf44a-0b69-45c5-9512-528cb48a7106}</Project>
-      <Name>VisionBuilder.Core</Name>
+      <Name>HMI.Core</Name>
     </ProjectReference>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
diff --git a/VisionBuilder.Test/app.config b/VisionBuilder.Test/app.config
new file mode 100644
index 0000000..d23a83e
--- /dev/null
+++ b/VisionBuilder.Test/app.config
@@ -0,0 +1,19 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.2.1.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>
\ No newline at end of file
diff --git a/WPFProject/App.config b/WPFProject/App.config
index d17fa4e..6c4d0d1 100644
--- a/WPFProject/App.config
+++ b/WPFProject/App.config
@@ -1,11 +1,23 @@
-锘�<?xml version="1.0" encoding="utf-8" ?>
+锘�<?xml version="1.0" encoding="utf-8"?>
 <configuration>
     <startup> 
         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
     </startup>
 	<runtime>
 		<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
-			<probing privatePath="Libs;ThirdParty"/>
+			<probing privatePath="Libs;ThirdParty;Plugin;" />
+			<dependentAssembly>
+				<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+				<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
+			</dependentAssembly>
+			<dependentAssembly>
+				<assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+				<bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.2.1.0" />
+			</dependentAssembly>
+			<dependentAssembly>
+				<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
+				<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
+			</dependentAssembly>
 		</assemblyBinding>
 	</runtime>
 </configuration>
\ No newline at end of file
diff --git a/WPFProject/App.xaml b/WPFProject/App.xaml
index 292ccd8..bfd14e2 100644
--- a/WPFProject/App.xaml
+++ b/WPFProject/App.xaml
@@ -2,8 +2,24 @@
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              xmlns:local="clr-namespace:WPFProject"
+            xmlns:pw="https://opensource.panuon.com/wpf"
+            xmlns:pu="https://opensource.panuon.com/wpf-ui"
+             xmlns:uic="clr-namespace:HMI.UI.Converter;assembly=HMI.UI"
              Startup="Application_Startup">
     <Application.Resources>
-         
+        <ResourceDictionary>
+            <ResourceDictionary.MergedDictionaries>
+                <ResourceDictionary Source="/HMI.UI;component/Style/BaseWindow.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/FormStyle.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Resources/Font/Font.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/Colors.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/PanuonResource.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/MsgBoxStyle.xaml"/>
+            </ResourceDictionary.MergedDictionaries>
+
+            <Style TargetType="{x:Type pu:FormGroup}" BasedOn="{StaticResource InputFormGroupStyle}"></Style>
+            <uic:PathImageConverter x:Key="path2Image"/>
+            <uic:DataGridRowNumberConverter x:Key="rowNumber"/>
+        </ResourceDictionary>
     </Application.Resources>
 </Application>
diff --git a/WPFProject/App.xaml.cs b/WPFProject/App.xaml.cs
index 437e4c9..2715cec 100644
--- a/WPFProject/App.xaml.cs
+++ b/WPFProject/App.xaml.cs
@@ -5,6 +5,10 @@
 using System.Linq;
 using System.Threading.Tasks;
 using System.Windows;
+using HMI.UI.Util;
+using System.Windows.Markup;
+using log4net;
+using Panuon.WPF.UI;
 
 namespace WPFProject
 {
@@ -13,14 +17,26 @@
     /// </summary>
     public partial class App : Application
     {
-        public void test()
+        private ILog log;
+        public App()
         {
-           
+            log = LogManager.GetLogger("APP");
+            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
+        }
+
+        private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
+        {
+            log.Error("鏈煡寮傚父", e.ExceptionObject as Exception);
+            Dispatcher.Invoke(() =>
+            {
+                MsgBoxHelper.ErrorMessage(Current.MainWindow, $"鍙戠敓鏈煡寮傚父锛佺▼搴忓嵆灏嗗叧闂�", "閿欒", MessageBoxButton.OK,
+                    MessageBoxIcon.Error, DefaultButton.YesOK, 5);
+            });
         }
 
         private void Application_Startup(object sender, StartupEventArgs e)
         {
-            MainWindow window = new MainWindow();
+            LoadingWindow window = new LoadingWindow();
             window.Show();
         }
     }
diff --git a/WPFProject/Controls/IconTabItem.cs b/WPFProject/Controls/IconTabItem.cs
index 1c5faa3..2371f33 100644
--- a/WPFProject/Controls/IconTabItem.cs
+++ b/WPFProject/Controls/IconTabItem.cs
@@ -1,8 +1,8 @@
-锘縰sing System.ComponentModel;
+锘縰sing System.Collections.ObjectModel;
+using System.ComponentModel;
 using System.Runtime.CompilerServices;
 using System.Windows;
 using System.Windows.Controls;
-using System.Windows.Media;
 using System.Windows.Media.Imaging;
 
 namespace WPFProject.Controls
@@ -37,6 +37,13 @@
             set => _isFont = value;
         }
 
+        private string _Header;
+        public string Header
+        {
+            get => _Header;
+            set => _Header = value;
+        }
+
         private Window _Body;
         public Window Body
         {
@@ -44,6 +51,13 @@
             set => _Body = value;
         }
 
+        private ObservableCollection<IconTabItem> _Children;
+        public ObservableCollection<IconTabItem> Children
+        {
+            get => _Children;
+            set => RaiseAndSetIfChanged(ref _Children, value);
+        }
+
         public BitmapImage Icon
         {
             get { return (BitmapImage)GetValue(IconProperty); }
diff --git a/WPFProject/Controls/InnerWindow.xaml b/WPFProject/Controls/InnerWindow.xaml
index 293674d..a3c832e 100644
--- a/WPFProject/Controls/InnerWindow.xaml
+++ b/WPFProject/Controls/InnerWindow.xaml
@@ -14,8 +14,8 @@
     <UserControl.Resources>
         <ResourceDictionary>
             <ResourceDictionary.MergedDictionaries>
-                <ResourceDictionary Source="/WPFProject;component/Style/colors.xaml"/>
-                <ResourceDictionary Source="/WPFProject;component/Style/WindowResources.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/colors.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/WindowResources.xaml"/>
             </ResourceDictionary.MergedDictionaries>
 
             <Style x:Key="SliderThumbStyle" TargetType="{x:Type Thumb}">
diff --git a/WPFProject/Controls/MainTabControl.xaml b/WPFProject/Controls/MainTabControl.xaml
new file mode 100644
index 0000000..e2655f1
--- /dev/null
+++ b/WPFProject/Controls/MainTabControl.xaml
@@ -0,0 +1,113 @@
+锘�<UserControl x:Class="WPFProject.Controls.MainTabControl"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="clr-namespace:WPFProject.Controls"
+             mc:Ignorable="d" 
+             d:DesignHeight="450" d:DesignWidth="800">
+    <UserControl.Resources>
+        <ResourceDictionary>
+            <ResourceDictionary.MergedDictionaries>
+                <ResourceDictionary Source="/HMI.UI;component/Style/Colors.xaml"/>
+            </ResourceDictionary.MergedDictionaries>
+
+            <Style TargetType="ListBox" x:Key="ListBoxItemStyle1">
+                <Setter Property="Background" Value="{StaticResource MainMenu}"/>
+                <Setter Property="ItemContainerStyle">
+                    <Setter.Value>
+                        <Style TargetType="ListBoxItem">
+                            <Setter Property="Margin" Value="0"/>
+                            <Setter Property="Padding" Value="0"/>
+                            <Setter Property="Template">
+                                <Setter.Value>
+                                    <ControlTemplate TargetType="ListBoxItem">
+                                        <Border x:Name="border" Background="{StaticResource MainMenu}" 
+                                                Padding="10" Margin="0" BorderThickness="0,0,1,0" BorderBrush="Gray">
+                                            <!-- 鍐呭鍛堢幇鍣� -->
+                                            <StackPanel>
+                                                <ContentPresenter  Content="{TemplateBinding Content}" 
+                                                                   ContentStringFormat="{TemplateBinding ContentStringFormat}" 
+                                                                   ContentTemplate="{TemplateBinding ContentTemplate}"  />
+                                            </StackPanel>
+
+                                        </Border>
+
+                                        <ControlTemplate.Triggers>
+                                            <Trigger Property="IsSelected" Value="True">
+                                                <Setter TargetName="border" Property="Background" Value="{StaticResource ButtonSelected}" />
+                                            </Trigger>
+
+                                            <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=(ItemsControl.AlternationIndex)}" Value="0">
+                                                <Setter TargetName="border" Property="BorderThickness" Value="1,0,1,0" />
+                                            </DataTrigger>
+
+                                            <Trigger Property="IsMouseOver" Value="True">
+                                                <Setter TargetName="border" Property="Background" Value="Red" />
+                                            </Trigger>
+                                        </ControlTemplate.Triggers>
+                                    </ControlTemplate>
+                                </Setter.Value>
+                            </Setter>
+                        </Style>
+                    </Setter.Value>
+                </Setter>
+                <Setter Property="ItemsPanel">
+                    <Setter.Value>
+                        <ItemsPanelTemplate>
+                            <StackPanel HorizontalAlignment="Left" Orientation="Horizontal"/>
+                        </ItemsPanelTemplate>
+                    </Setter.Value>
+                </Setter>
+                <Setter Property="ItemTemplate">
+                    <Setter.Value>
+                        <DataTemplate>
+                            <StackPanel Orientation="Horizontal" VerticalAlignment="Center" >
+                                <Image Width="20" Height="20" Margin="5" Source="{Binding Icon}"/>
+                                <Label x:Name="txt" Visibility="Visible" BorderThickness="0" 
+                                       Foreground="{StaticResource PrimaryColorContract}"
+                                       FontWeight="Bold" 
+                                       FontSize="16"
+                                       VerticalContentAlignment="Center" 
+                                       HorizontalAlignment="Left"
+                                       Content="{Binding Name}" ToolTip="{Binding Name}"/>
+                            </StackPanel>
+                        </DataTemplate>
+                    </Setter.Value>
+                </Setter>
+            </Style>
+        </ResourceDictionary>
+    </UserControl.Resources>
+
+    <Grid x:Name="mainGrid">
+        <Grid.RowDefinitions>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition/>
+        </Grid.RowDefinitions>
+
+        <ListBox Grid.Row="0" x:Name="Menu" Margin="0" Padding="-1"
+                 Style="{StaticResource ListBoxItemStyle1}"
+                 BorderBrush="Gray"
+                 BorderThickness="0,1,0,1"
+                 Visibility="{Binding MenuVisibility}"
+                 SelectionChanged="Menu_SelectionChanged"
+                 SelectedItem="{Binding SelectedMenu}"
+                 AlternationCount="{Binding MenuItemsCount}" ItemsSource="{Binding MenuItems}">
+
+        </ListBox>
+
+        <ListBox Grid.Row="1" x:Name="SubMenu" Margin="0" Padding="-1"
+         Style="{StaticResource ListBoxItemStyle1}"
+         BorderBrush="Gray"
+                 Visibility="{Binding MenuVisibility}"
+                 SelectedItem="{Binding SelectedSubMenu}" AlternationCount="{Binding SubMenuItemsCount}"
+                 SelectionChanged="SubMenu_SelectionChanged"
+BorderThickness="0,0,0,1" ItemsSource="{Binding SubMenuItems}">
+        </ListBox>
+
+        <Border x:Name="page"  Grid.Row="2" BorderThickness="0" Margin="0" Padding="0">
+            
+        </Border>
+    </Grid>
+</UserControl>
diff --git a/WPFProject/Controls/MainTabControl.xaml.cs b/WPFProject/Controls/MainTabControl.xaml.cs
new file mode 100644
index 0000000..ea85aaf
--- /dev/null
+++ b/WPFProject/Controls/MainTabControl.xaml.cs
@@ -0,0 +1,156 @@
+锘縰sing System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
+using System.Windows;
+using System.Windows.Controls;
+using HMI.Base;
+using HMI.Core.Api;
+using WPFProject.UI;
+
+namespace WPFProject.Controls
+{
+    /// <summary>
+    /// MainTabControl.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class MainTabControl : UserControl, INotifyPropertyChanged
+    {
+        #region ...
+        public virtual event PropertyChangedEventHandler PropertyChanged;
+
+        protected virtual void RaisePropertyChanged(string name)
+        {
+
+            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
+        }
+
+        protected void RaiseAndSetIfChanged<T>(ref T old, T @new, [CallerMemberName] string propertyName = null)
+        {
+            old = @new;
+            if (propertyName != null)
+            {
+                RaisePropertyChanged(propertyName);
+            }
+        }
+        #endregion
+
+        public MainTabControl()
+        {
+            IPlugin plugin = new WorkControl();
+            MenuItems = PluginLoader.GetLoader().Menus;
+            SubMenuItems = MenuItems[0].Children;
+            this.DataContext = this;
+            InitializeComponent();
+        }
+
+        // Tab鍒囨崲浜嬩欢
+        public static readonly RoutedEvent OnTabChangeEvent =
+             EventManager.RegisterRoutedEvent("OnTabChange", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MenuTabControl));
+
+        public event RoutedEventHandler OnTabChange
+        {
+            add
+            {
+                AddHandler(OnTabChangeEvent, value);
+            }
+
+            remove
+            {
+                RemoveHandler(OnTabChangeEvent, value);
+            }
+        }
+
+        private ObservableCollection<PluginInfo> _MenuItems;
+
+        public ObservableCollection<PluginInfo> MenuItems
+        {
+            get { return _MenuItems; }
+            set
+            {
+                RaiseAndSetIfChanged(ref _MenuItems, value);
+                RaisePropertyChanged("MenuItemsCount");
+            }
+        }
+
+        public int MenuItemsCount
+        {
+            get => MenuItems == null ? 0 : MenuItems.Count;
+        }
+
+        private PluginInfo _SelectedMenu;
+
+        public PluginInfo SelectedMenu
+        {
+            get { return _SelectedMenu; }
+            set
+            {
+                RaiseAndSetIfChanged(ref _SelectedMenu, value);
+            }
+        }
+
+
+        private ObservableCollection<PluginInfo> _SubMenuItems;
+
+        public ObservableCollection<PluginInfo> SubMenuItems
+        {
+            get { return _SubMenuItems; }
+            set
+            {
+                RaiseAndSetIfChanged(ref _SubMenuItems, value);
+                RaisePropertyChanged("SubMenuItemsCount");
+            }
+        }
+
+        public int SubMenuItemsCount
+        {
+            get => MenuItems == null ? 0 : MenuItems.Count;
+        }
+
+        private PluginInfo _SelectedSubMenu;
+
+        public PluginInfo SelectedSubMenu
+        {
+            get { return _SelectedSubMenu; }
+            set => RaiseAndSetIfChanged(ref _SelectedSubMenu, value);
+        }
+
+        private Visibility _MenuVisibility = Visibility.Collapsed;
+        public Visibility MenuVisibility
+        {
+            get => _MenuVisibility;
+            set { RaiseAndSetIfChanged(ref _MenuVisibility, value); }
+        }
+
+        public void ChangeItemVisibility()
+        {
+            MenuVisibility = MenuVisibility == Visibility.Collapsed ? Visibility.Visible : Visibility.Collapsed;
+        }
+
+        private void Menu_SelectionChanged(object sender, SelectionChangedEventArgs e)
+        {
+            if (e.AddedItems?.Count > 0)
+            {
+                var data = (PluginInfo)e.AddedItems[0];
+                SubMenuItems = data?.Children;
+            }
+        }
+
+        private void SwithMenu(PluginInfo menu)
+        {
+
+        }
+
+
+        private void SubMenu_SelectionChanged(object sender, SelectionChangedEventArgs e)
+        {
+            if (e.AddedItems?.Count > 0)
+            {
+                var data = (PluginInfo)e.AddedItems[0];
+                var content = (UIElement)data.Content;
+                var last = (IPlugin)page.Child;
+                last?.DeActive();
+                page.Child = content;
+                ((IPlugin)content)?.Active();
+            }
+        }
+    }
+}
diff --git a/WPFProject/Controls/MenuTabControl.xaml b/WPFProject/Controls/MenuTabControl.xaml
index b9a6ce9..3b42b64 100644
--- a/WPFProject/Controls/MenuTabControl.xaml
+++ b/WPFProject/Controls/MenuTabControl.xaml
@@ -11,7 +11,7 @@
     <UserControl.Resources>
         <ResourceDictionary>
             <ResourceDictionary.MergedDictionaries>
-                <ResourceDictionary Source="/WPFProject;component/Style/colors.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/Colors.xaml"/>
             </ResourceDictionary.MergedDictionaries>
 
             <Style x:Key="tabItemStyle" TargetType="{x:Type ctl:IconTabItem}">
@@ -58,6 +58,88 @@
                 </Setter>
             </Style>
 
+            <Style x:Key="SubControlStyle" TargetType="{x:Type TabControl}">
+                <Setter Property="BorderThickness" Value="0"/>
+                <Setter Property="BorderBrush" Value="Transparent"/>
+                <Setter Property="ItemContainerStyle" Value="{StaticResource tabItemStyle}"/>
+                <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
+                <Setter Property="Template">
+                    <Setter.Value>
+                        <ControlTemplate TargetType="{x:Type TabControl}">
+                            <Grid x:Name="templateRoot" ClipToBounds="True" SnapsToDevicePixels="True" KeyboardNavigation.TabNavigation="Local">
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition x:Name="ColumnDefinition0" />
+                                    <ColumnDefinition x:Name="ColumnDefinition1" Width="0"/>
+                                </Grid.ColumnDefinitions>
+                                <Grid.RowDefinitions>
+                                    <RowDefinition x:Name="RowDefinition0" Height="Auto"/>
+                                    <RowDefinition x:Name="RowDefinition1" Height="*"/>
+                                </Grid.RowDefinitions>
+                                <!--<UniformGrid x:Name="HeaderPanel" Rows="1" Background="Transparent" Grid.Column="0" IsItemsHost="True" Margin="0" Grid.Row="0" KeyboardNavigation.TabIndex="1" Panel.ZIndex="1"/>-->
+                                <ScrollViewer Visibility="{Binding ShowMenu}" Grid.Row="0" Grid.Column="0" VerticalScrollBarVisibility="Auto" 
+                                  HorizontalScrollBarVisibility="Auto" >
+                                    <StackPanel Orientation="Horizontal" x:Name="HeaderPanel" 
+                                ScrollViewer.HorizontalScrollBarVisibility="Auto" 
+                                IsItemsHost="True"
+                                Margin="0" KeyboardNavigation.TabIndex="1" 
+                                Background="{StaticResource MainMenu}"
+                                Panel.ZIndex="1"/>
+                                </ScrollViewer>
+
+                                <!--<Line X1="0" X2="{Binding ActualWidth, RelativeSource={RelativeSource Self}}" 
+                      Stroke="Transparent" StrokeThickness="0.1" 
+                      VerticalAlignment="Bottom" Margin="0" SnapsToDevicePixels="True"/>-->
+                                <Border x:Name="ContentPanel" BorderBrush="{TemplateBinding BorderBrush}" 
+                        BorderThickness="{TemplateBinding BorderThickness}" 
+                        Background="{TemplateBinding Background}" 
+                        Grid.Column="0" KeyboardNavigation.DirectionalNavigation="Contained" 
+                        Grid.Row="1" KeyboardNavigation.TabIndex="2" KeyboardNavigation.TabNavigation="Local">
+
+                                    <ContentPresenter x:Name="PART_SelectedContentHost" 
+                            ContentTemplate="{TemplateBinding SelectedContentTemplate}" 
+                            Content="{TemplateBinding SelectedContent}" 
+                            ContentStringFormat="{TemplateBinding SelectedContentStringFormat}" 
+                            ContentSource="SelectedContent" Margin="0" 
+                            SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
+
+                                </Border>
+                            </Grid>
+                            <ControlTemplate.Triggers>
+                                <Trigger Property="TabStripPlacement" Value="Bottom">
+                                    <Setter Property="Grid.Row" TargetName="HeaderPanel" Value="1"/>
+                                    <Setter Property="Grid.Row" TargetName="ContentPanel" Value="0"/>
+                                    <Setter Property="Height" TargetName="RowDefinition0" Value="*"/>
+                                    <Setter Property="Height" TargetName="RowDefinition1" Value="Auto"/>
+                                </Trigger>
+                                <Trigger Property="TabStripPlacement" Value="Left">
+                                    <Setter Property="Grid.Row" TargetName="HeaderPanel" Value="0"/>
+                                    <Setter Property="Grid.Row" TargetName="ContentPanel" Value="0"/>
+                                    <Setter Property="Grid.Column" TargetName="HeaderPanel" Value="0"/>
+                                    <Setter Property="Grid.Column" TargetName="ContentPanel" Value="1"/>
+                                    <Setter Property="Width" TargetName="ColumnDefinition0" Value="Auto"/>
+                                    <Setter Property="Width" TargetName="ColumnDefinition1" Value="*"/>
+                                    <Setter Property="Height" TargetName="RowDefinition0" Value="*"/>
+                                    <Setter Property="Height" TargetName="RowDefinition1" Value="0"/>
+                                </Trigger>
+                                <Trigger Property="TabStripPlacement" Value="Right">
+                                    <Setter Property="Grid.Row" TargetName="HeaderPanel" Value="0"/>
+                                    <Setter Property="Grid.Row" TargetName="ContentPanel" Value="0"/>
+                                    <Setter Property="Grid.Column" TargetName="HeaderPanel" Value="1"/>
+                                    <Setter Property="Grid.Column" TargetName="ContentPanel" Value="0"/>
+                                    <Setter Property="Width" TargetName="ColumnDefinition0" Value="*"/>
+                                    <Setter Property="Width" TargetName="ColumnDefinition1" Value="Auto"/>
+                                    <Setter Property="Height" TargetName="RowDefinition0" Value="*"/>
+                                    <Setter Property="Height" TargetName="RowDefinition1" Value="0"/>
+                                </Trigger>
+                                <Trigger Property="IsEnabled" Value="False">
+                                    <Setter Property="TextElement.Foreground" TargetName="templateRoot" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
+                                </Trigger>
+                            </ControlTemplate.Triggers>
+                        </ControlTemplate>
+                    </Setter.Value>
+                </Setter>
+            </Style>
+
             <Style x:Key="ControlStyle" TargetType="{x:Type TabControl}">
                 <Setter Property="BorderThickness" Value="0"/>
                 <Setter Property="BorderBrush" Value="Transparent"/>
@@ -94,12 +176,21 @@
                                     Background="{TemplateBinding Background}" 
                                     Grid.Column="0" KeyboardNavigation.DirectionalNavigation="Contained" 
                                     Grid.Row="1" KeyboardNavigation.TabIndex="2" KeyboardNavigation.TabNavigation="Local">
-                                    <ContentPresenter x:Name="PART_SelectedContentHost" 
-                                                  ContentTemplate="{TemplateBinding SelectedContentTemplate}" 
-                                                  Content="{TemplateBinding SelectedContent}" 
-                                                  ContentStringFormat="{TemplateBinding SelectedContentStringFormat}" 
-                                                  ContentSource="SelectedContent" Margin="0" 
-                                                  SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
+
+                                    <TabControl x:Name="contentTab"
+                                                Style="{StaticResource SubControlStyle}"
+                                                ItemsSource="{Binding TabSelectedItem.Children,Mode=TwoWay}">
+
+
+                                    </TabControl>
+
+                                    <!--<ContentPresenter x:Name="PART_SelectedContentHost" 
+                                        ContentTemplate="{TemplateBinding SelectedContentTemplate}" 
+                                        Content="{TemplateBinding SelectedContent}" 
+                                        ContentStringFormat="{TemplateBinding SelectedContentStringFormat}" 
+                                        ContentSource="SelectedContent" Margin="0" 
+                                        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>-->
+
                                 </Border>
                             </Grid>
                             <ControlTemplate.Triggers>
@@ -142,10 +233,12 @@
 
     <Grid>
         <TabControl x:Name="tabLevel_1" 
+                    Grid.Row="0"
                     Style="{StaticResource ControlStyle}" ItemsSource="{Binding Items}" 
-                    SelectedItem="{Binding SelectedItem,Mode=TwoWay}"
+                    SelectedItem="{Binding TabSelectedItem,Mode=TwoWay}"
                     SelectionChanged="tabLevel_1_SelectionChanged">
 
         </TabControl>
+        
     </Grid>
 </UserControl>
diff --git a/WPFProject/Controls/MenuTabControl.xaml.cs b/WPFProject/Controls/MenuTabControl.xaml.cs
index d257500..9a765d1 100644
--- a/WPFProject/Controls/MenuTabControl.xaml.cs
+++ b/WPFProject/Controls/MenuTabControl.xaml.cs
@@ -4,9 +4,8 @@
 using System.Runtime.CompilerServices;
 using System.Windows;
 using System.Windows.Controls;
-using WPFProject.Events;
+using HMI.Core.Api;
 using WPFProject.UI;
-using WPFProject.Utils;
 
 namespace WPFProject.Controls
 {
@@ -70,12 +69,20 @@
             set => RaiseAndSetIfChanged(ref _Items, value);
         }
 
-        private IconTabItem _SelectedItem;
+        private ObservableCollection<IconTabItem> _Items_Level2;
 
-        public IconTabItem SelectedItem
+        public ObservableCollection<IconTabItem> Items_Level2
         {
-            get { return _SelectedItem; }
-            set => RaiseAndSetIfChanged(ref _SelectedItem, value);
+            get { return _Items_Level2; }
+            set => RaiseAndSetIfChanged(ref _Items_Level2, value);
+        }
+
+        private IconTabItem _TabSelectedItem;
+
+        public IconTabItem TabSelectedItem
+        {
+            get { return _TabSelectedItem; }
+            set => RaiseAndSetIfChanged(ref _TabSelectedItem, value);
         }
 
 
@@ -99,13 +106,18 @@
             InitializeComponent();
             Items = new ObservableCollection<IconTabItem> {
             new IconTabItem(){
-                Header="123",
-                Content = plugin
+                Header="111",
+                Children = new ObservableCollection<IconTabItem>{
+                    new IconTabItem(){
+                        Header = "112",
+                        Content = plugin
+                    }
+                }
             },
             new IconTabItem(){
-                Header="321"
-            },
-
+                Header="222",
+                Children = new ObservableCollection<IconTabItem>()
+            }
             };
         }
 
@@ -144,6 +156,11 @@
             foreach (IconTabItem item in Items)
             {
                 item.Visibility = ItemVisibility;
+                if (item.Children != null) {
+                    foreach (var child in item.Children) {
+                        child.Visibility = ItemVisibility;
+                    }
+                }
             }
         }
     }
diff --git a/WPFProject/Controls/MinInnerWindow.xaml b/WPFProject/Controls/MinInnerWindow.xaml
index 666c587..03defd0 100644
--- a/WPFProject/Controls/MinInnerWindow.xaml
+++ b/WPFProject/Controls/MinInnerWindow.xaml
@@ -10,8 +10,8 @@
     <UserControl.Resources>
         <ResourceDictionary>
             <ResourceDictionary.MergedDictionaries>
-                <ResourceDictionary Source="/WPFProject;component/Style/colors.xaml"/>
-                <ResourceDictionary Source="/WPFProject;component/Style/WindowResources.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/colors.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/WindowResources.xaml"/>
             </ResourceDictionary.MergedDictionaries>
         </ResourceDictionary>
     </UserControl.Resources>
diff --git a/WPFProject/Entity/PluginLoadMessage.cs b/WPFProject/Entity/PluginLoadMessage.cs
new file mode 100644
index 0000000..6b2e6b4
--- /dev/null
+++ b/WPFProject/Entity/PluginLoadMessage.cs
@@ -0,0 +1,18 @@
+锘縩amespace WPFProject.Entity
+{
+    public enum PluginLoadMessageType
+    {
+        Message, Completed, Error
+    }
+
+    public class PluginLoadMessage
+    {
+        public PluginLoadMessageType Type { get; set; }
+        public string Message { get; set; }
+        public int Total { get; set; }
+        public int Completed { get; set; }
+        public int Error { get; set; }
+        public bool Success { get; set; }
+        public PluginLoadMessage() { }
+    }
+}
diff --git a/WPFProject/Entity/PluginSettingInfo.cs b/WPFProject/Entity/PluginSettingInfo.cs
new file mode 100644
index 0000000..4a61b29
--- /dev/null
+++ b/WPFProject/Entity/PluginSettingInfo.cs
@@ -0,0 +1,15 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WPFProject.Entity
+{
+    public class PluginSettingInfo
+    {
+        public string Name { get; set; }
+        public object View { get; set; }
+        public object Setting { get; set; }
+    }
+}
diff --git a/WPFProject/Icon/xinzeng_1.png b/WPFProject/Icon/xinzeng_1.png
new file mode 100644
index 0000000..0b16aa2
--- /dev/null
+++ b/WPFProject/Icon/xinzeng_1.png
Binary files differ
diff --git a/WPFProject/LoadingWindow.xaml b/WPFProject/LoadingWindow.xaml
new file mode 100644
index 0000000..a9c532f
--- /dev/null
+++ b/WPFProject/LoadingWindow.xaml
@@ -0,0 +1,20 @@
+锘�<Window x:Class="WPFProject.LoadingWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:WPFProject"
+        mc:Ignorable="d"
+        WindowStartupLocation="CenterScreen"
+        WindowStyle="None"
+        Loaded="Window_Loaded"
+        Title="LoadingWindow" Height="450" Width="800">
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition/>
+            <RowDefinition Height="Auto"/>
+        </Grid.RowDefinitions>
+        <TextBox x:Name="Console" IsReadOnly="True"/>
+        <Button Grid.Row="1" Content="涓嬩竴姝�" Click="Button_Click"/>
+    </Grid>
+</Window>
diff --git a/WPFProject/LoadingWindow.xaml.cs b/WPFProject/LoadingWindow.xaml.cs
new file mode 100644
index 0000000..a9755db
--- /dev/null
+++ b/WPFProject/LoadingWindow.xaml.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Windows;
+using HMI.Base;
+
+namespace WPFProject
+{
+    /// <summary>
+    /// LoadingWindow.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class LoadingWindow : Window
+    {
+        public LoadingWindow()
+        {
+            InitializeComponent();
+        }
+
+        private void Window_Loaded(object sender, RoutedEventArgs e)
+        {
+            PluginLoader loader = PluginLoader.GetLoader();
+            loader.LoadMessageAppend += Loader_LoadMessageAppend;
+            loader.LoadMenuAndPlugin();
+            Button_Click(null,null);
+        }
+
+        private void Loader_LoadMessageAppend(object sender, string e)
+        {
+            Console.Text += $"{e}\r\n";
+        }
+
+        private void Button_Click(object sender, RoutedEventArgs e)
+        {
+            PanuonWindow window = new PanuonWindow();
+            window.Show();
+            this.Close();
+        }
+    }
+}
diff --git a/WPFProject/MainWindow.xaml b/WPFProject/MainWindow.xaml
index 1db740a..1b5359a 100644
--- a/WPFProject/MainWindow.xaml
+++ b/WPFProject/MainWindow.xaml
@@ -17,8 +17,8 @@
     <Window.Resources>
         <ResourceDictionary>
             <ResourceDictionary.MergedDictionaries>
-                <ResourceDictionary Source="/WPFProject;component/Style/colors.xaml"/>
-                <ResourceDictionary Source="/WPFProject;component/Style/WindowResources.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/colors.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/WindowResources.xaml"/>
             </ResourceDictionary.MergedDictionaries>
         </ResourceDictionary>
     </Window.Resources>
@@ -39,15 +39,19 @@
             <StackPanel Grid.Column="0"></StackPanel>
             <StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right">
                 <Button Style="{StaticResource WindowButton}" x:Name="openCloseButton"  Click="Button_Click_2">&#xe60e;</Button>
-                <Button Style="{StaticResource WindowButton}" Click="Button_Click">&#xe650;</Button>
-                <Button Style="{StaticResource WindowButton}" Click="Button_Click">&#xe602;</Button>
-                <Button Style="{StaticResource WindowCloseButton}" Click="Button_Click_1">&#xe609;</Button>
+                <Button Style="{StaticResource WindowButton}" Click="Min_Click">&#xe650;</Button>
+                <Button Style="{StaticResource WindowButton}" Click="Max_Click">&#xe602;</Button>
+                <Button Style="{StaticResource WindowCloseButton}" Click="Close_Click">&#xe609;</Button>
             </StackPanel>
         </Grid>
 
-        <ctl:MenuTabControl Grid.Row="1" x:Name="mainControl" OnTabChange="mainControl_OnTabChange">
+        <ctl:MainTabControl Grid.Row="1" x:Name="menuTab" OnTabChange="menuTab_OnTabChange">
 
-        </ctl:MenuTabControl>
+        </ctl:MainTabControl>
+
+        <!--<ctl:MenuTabControl Grid.Row="1" x:Name="menuTab" OnTabChange="menuTab_OnTabChange">
+
+        </ctl:MenuTabControl>-->
 
 
         <StatusBar Grid.Row="2" Background="{StaticResource MainStatusBar}">99999</StatusBar>
diff --git a/WPFProject/MainWindow.xaml.cs b/WPFProject/MainWindow.xaml.cs
index 337c43e..d458e3c 100644
--- a/WPFProject/MainWindow.xaml.cs
+++ b/WPFProject/MainWindow.xaml.cs
@@ -1,8 +1,6 @@
 锘縰sing System;
 using System.Windows;
 using System.Windows.Media;
-using WPFProject.Events;
-using WPFProject.Utils;
 
 namespace WPFProject
 {
@@ -16,12 +14,17 @@
             InitializeComponent();
         }
 
-        private void Button_Click(object sender, RoutedEventArgs e)
+        private void Min_Click(object sender, RoutedEventArgs e)
+        {
+            WindowState = WindowState.Minimized;
+        }
+
+        private void Max_Click(object sender, RoutedEventArgs e)
         {
             WindowState = WindowState == WindowState.Maximized ? WindowState.Normal : WindowState.Maximized;
         }
 
-        private void Button_Click_1(object sender, RoutedEventArgs e)
+        private void Close_Click(object sender, RoutedEventArgs e)
         {
             Application.Current.Shutdown();
         }
@@ -31,19 +34,19 @@
             // Resize.SetIsResizeable(this, true);
         }
 
-        private void mainControl_OnTabChange(object sender, RoutedEventArgs e)
+        private void menuTab_OnTabChange(object sender, RoutedEventArgs e)
         {
-            
+
         }
 
         private void Button_Click_2(object sender, RoutedEventArgs e)
         {
-            
+
             double temp = openCloseButton.RenderTransform.Value.Determinant;
             openCloseButton.RenderTransformOrigin = new Point(0.5, 0.5);
-            ScaleTransform verticalFlipTransform = new ScaleTransform(1, temp*-1);
+            ScaleTransform verticalFlipTransform = new ScaleTransform(1, temp * -1);
             openCloseButton.RenderTransform = verticalFlipTransform;
-            mainControl.ChangeItemVisibility();
+            menuTab.ChangeItemVisibility();
         }
     }
 }
diff --git a/WPFProject/MigrationBackup/fde93b81/VisionBuilder.Core/NuGetUpgradeLog.html b/WPFProject/MigrationBackup/fde93b81/VisionBuilder.Core/NuGetUpgradeLog.html
new file mode 100644
index 0000000..990a35a
--- /dev/null
+++ b/WPFProject/MigrationBackup/fde93b81/VisionBuilder.Core/NuGetUpgradeLog.html
@@ -0,0 +1,167 @@
+<!DOCTYPE html>
+<!-- saved from url=(0014)about:internet -->
+
+    <html xmlns:msxsl="urn:schemas-microsoft-com:xslt"><head><meta content="en-us" http-equiv="Content-Language" /><meta content="text/html; charset=utf-16" http-equiv="Content-Type" /><title _locID="NuGetUpgradeReportTitle">
+          NuGetMigrationLog
+        </title><style>
+            
+                    /* Body style, for the entire document */
+                    body
+                    {
+                        background: #F3F3F4;
+                        color: #1E1E1F;
+                        font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
+                        font-size: 12pt;
+                        padding: 0;
+                        margin: 0;
+                    }
+
+                    /* Header1 style, used for the main title */
+                    h1
+                    {
+                        padding: 10px 0px 10px 10px;
+                        font-size: 21pt;
+                        background-color: #E2E2E2;
+                        border-bottom: 1px #C1C1C2 solid; 
+                        color: #201F20;
+                        margin: 0;
+                        font-weight: normal;
+                    }
+
+                    /* Header2 style, used for "Overview" and other sections */
+                    h2
+                    {
+                        font-size: 18pt;
+                        font-weight: normal;
+                        padding: 15px 0 5px 0;
+                        margin: 0;
+                    }
+
+                    /* Header3 style, used for sub-sections, such as project name */
+                    h3
+                    {
+                        font-weight: normal;
+                        font-size: 15pt;
+                        margin: 0;
+                        padding: 15px 0 5px 0;
+                        background-color: transparent;
+                    }
+
+                    .info-text
+                    {
+                        margin: 0px 0 0.75em 0;
+                    }
+
+                    /* Color all hyperlinks one color */
+                    a
+                    {
+                        color: #1382CE;
+                    }
+
+                    /* Table styles */ 
+                    table
+                    {
+                        border-spacing: 0 0;
+                        border-collapse: collapse;
+                        font-size: 11pt;
+                    }
+
+                    table th
+                    {
+                        background: #E7E7E8;
+                        text-align: left;
+                        text-decoration: none;
+                        font-weight: normal;
+                        padding: 3px 6px 3px 6px;
+                    }
+
+                    table td
+                    {
+                        vertical-align: top;
+                        padding: 3px 6px 5px 5px;
+                        margin: 0px;
+                        border: 1px solid #E7E7E8;
+                        background: #F7F7F8;
+                    }
+
+                    /* Local link is a style for hyperlinks that link to file:/// content, there are lots so color them as 'normal' text until the user mouse overs */
+                    .localLink
+                    {
+                        color: #1E1E1F;
+                        background: #EEEEED;
+                        text-decoration: none;
+                    }
+
+                    .localLink:hover
+                    {
+                        color: #1382CE;
+                        background: #FFFF99;
+                        text-decoration: none;
+                    }
+
+                    .issueCell
+                    {
+                        width: 100%;
+                    }
+
+                    .packageIssue
+                    {
+                        margin-left: 25px;
+                    }
+
+                    /* Padding around the content after the h1 */ 
+                    #content 
+                    {
+	                    padding: 0px 20px 20px 20px; 
+                    }
+
+                    .issues table
+                    {
+                        width: 97%;
+                    }
+
+                    /* All Icons */
+                    .IconSuccessEncoded, .IconInfoEncoded, .IconWarningEncoded, .IconErrorEncoded
+                    {
+                        min-width:18px;
+                        min-height:18px; 
+                        background-repeat:no-repeat;
+                        background-position:center;
+                    }
+
+                    .IconSuccessEncoded
+                    {
+                        background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABcElEQVR4Xq2TsUsCURzHv15g8ZJcBWlyiYYgCIWcb9DFRRwMW5TA2c0/QEFwFkxxUQdxVlBwCYWOi6IhWgQhBLHJUCkhLr/BW8S7gvrAg+N+v8/v+x68Z8MGy+XSCyABQAXgBgHGALoASkIIDWSLeLBetdHryMjd5IxQPWT4rn1c/P7+xxp72Cs9m5SZ0Bq2vPnbPFafK2zDvmNHypdC0BPkLlQhxJsCAhQoZwdZU5mwxh720qGo8MzTxTTKZDPCx2HoVzp6lz0Q9tKhyx0kGs8Ny+TkWRKk8lCROwEduhyg9l/6lunOPSfmH3NUH6uQ0KHLAe7JYvJjevm+DAMGJHToKtigE+vwvIidxLamb8IBY9e+C5LiXREkfho3TSd06HJA13/oh6T51MTsfQbHrsMynQ5dDihFjiK8JJAU9AKIWTp76dCVN7HWHrajmUEGvyF9nkbAE6gLIS7kTUyuf2gscLoJrElZo/Mvj+nPz/kLTmfnEwP3tB0AAAAASUVORK5CYII=);
+                    }
+
+                    .IconInfoEncoded
+                    {
+                        background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABHElEQVR4Xs2TsUoDQRRF7wwoziokjZUKadInhdhukR9YP8DMX1hYW+QvdsXa/QHBbcXC7W0CamWTQnclFutceIQJwwaWNLlwm5k5d94M76mmaeCrrmsLYOocY12FcxZFUeozCqKqqgYA8uevv1H6VuPxcwlfk5N92KHBxfFeCSAxxswlYAW/Xr989x/mv9gkhtyMDhcAxgzRsp7flj8B/HF1RsMXq+NZMkopaHe7lbKxQUEIGbKsYNoGn969060hZBkQex/W8oRQwsQaW2o3Ago2SVcJUzAgY3N0lTCZZm+zPS8HB51gMmS1DEYyOz9acKO1D8JWTlafKIMxdhvlfdyT94Vv5h7P8Ky7nQzACmhvKq3zk3PjW9asz9D/1oigecsioooAAAAASUVORK5CYII=);
+                    }
+
+                    .IconWarningEncoded
+                    {
+                        background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAx0lEQVR4XpWSMQ7CMAxFf4xAyBMLCxMrO8dhaBcuwdCJS3RJBw7SA/QGTCxdWJgiQYWKXJWKIXHIlyw5lqr34tQgEOdcBsCOx5yZK3hCCKdYXneQkh4pEfqzLfu+wVDSyyzFoJjfz9NB+pAF+eizx2Vruts0k15mPgvS6GYvpVtQhB61IB/dk6AF6fS4Ben0uIX5odtFe8Q/eW1KvFeH4e8khT6+gm5B+t3juyDt7n0jpe+CANTd+oTUjN/U3yVaABnSUjFz/gFq44JaVSCXeQAAAABJRU5ErkJggg==);
+                    }
+
+                    .IconErrorEncoded
+                    {
+                        background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABQElEQVR4XqWTvUoEQRCE6wYPZUA80AfwAQz23uCMjA7MDRQEIzPBVEyNTQUFIw00vcQTTMzuAh/AxEQQT8HF/3G/oGGnEUGuoNnd6qoZuqltyKEsyzVJq5I6rnUp6SjGeGhESikzzlc1eL7opfuVbrqbU1Zw9NCgtQMaZpY0eNnaaL2fHusvTK5vKu7sjSS1Y4y3QUA6K3e3Mau5UFDyMP7tYF9o8cAHZv68vipoIJg971PZIZ5HiwdvYGGvFVFHmGmZ2MxwmQYPXubPl9Up0tfoMQGetXd6mRbvhBw+boZ6WF7Mbv1+GsHRk0fQmPAH1GfmZirbCfDJ61tw3Px8/8pZsPAG4jlVhcPgZ7adwNWBB68lkRQWFiTgFlbnLY3DGGM7izIJIyT/jjIvEJw6fdJTc6krDzh6aMwMP9bvDH4ADSsa9uSWVJkAAAAASUVORK5CYII=);
+                    }
+                
+          </style></head><body><h1>
+          NuGet Migration Report - VisionBuilder.Core</h1><div id="content"><h2 _locID="OverviewTitle">Overview</h2><div class="info-text">Migration to PackageReference was completed successfully. Please build and run your solution to verify that all packages are available.</div><div class="info-text">
+            If you run into any problems, have feedback, questions, or concerns, please
+            <a href="https://github.com/NuGet/Home/issues/">file an issue on the NuGet GitHub repository.</a></div><div class="info-text">
+            Changed files and this report have been backed up here:
+            <a href="C:\Main\Workspace\VisualStudio\WPFProject\WPFProject\MigrationBackup\fde93b81\VisionBuilder.Core">C:\Main\Workspace\VisualStudio\WPFProject\WPFProject\MigrationBackup\fde93b81\VisionBuilder.Core</a></div><div class="info-text"><a href="https://aka.ms/nuget-pc2pr-migrator-rollback">Help me rollback to packages.config</a></div><h2 _locID="PackagesTitle">Packages processed</h2><h3 _locID="IncludePackagesTitle">Top-level dependencies:</h3><div class="issues"><table><tr><th class="issueCell">Package Id</th><th>Version</th></tr><tr><td class="issueCell"><span>CommunityToolkit.Mvvm</span></td><td><span>
+                v8.2.2</span></td></tr></table></div><p /><h3 _locID="IncludePackagesTitle">Transitive dependencies:</h3><div class="issues"><table><tr><th class="issueCell">Package Id</th><th>Version</th></tr><tr><td class="issueCell"><span>Microsoft.Bcl.AsyncInterfaces</span></td><td><span>
+                v7.0.0</span></td></tr><tr><td class="issueCell"><span>System.Buffers</span></td><td><span>
+                v4.5.1</span></td></tr><tr><td class="issueCell"><span>System.ComponentModel.Annotations</span></td><td><span>
+                v5.0.0</span></td></tr><tr><td class="issueCell"><span>System.Memory</span></td><td><span>
+                v4.5.5</span></td></tr><tr><td class="issueCell"><span>System.Numerics.Vectors</span></td><td><span>
+                v4.5.0</span></td></tr><tr><td class="issueCell"><span>System.Runtime.CompilerServices.Unsafe</span></td><td><span>
+                v6.0.0</span></td></tr><tr><td class="issueCell"><span>System.Threading.Tasks.Extensions</span></td><td><span>
+                v4.5.4</span></td></tr></table></div><h2 _locID="IssuesTitle">Package compatibility issues</h2><div class="issues"><table><tr><th /><th class="issueCell" _locID="DescriptionTableHeader">Description</th></tr><tr><td class="IconInfoEncoded" /><td class="issueCell">
+                No issues were found.
+              </td></tr></table></div></div></body></html>
\ No newline at end of file
diff --git a/WPFProject/MigrationBackup/fde93b81/VisionBuilder.Core/VisionBuilder.Core.csproj b/WPFProject/MigrationBackup/fde93b81/VisionBuilder.Core/VisionBuilder.Core.csproj
new file mode 100644
index 0000000..df6199c
--- /dev/null
+++ b/WPFProject/MigrationBackup/fde93b81/VisionBuilder.Core/VisionBuilder.Core.csproj
@@ -0,0 +1,93 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{3E3BF44A-0B69-45C5-9512-528CB48A7106}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>VisionBuilder.Core</RootNamespace>
+    <AssemblyName>VisionBuilder.Core</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <Deterministic>true</Deterministic>
+    <NuGetPackageImportStamp>
+    </NuGetPackageImportStamp>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="CommunityToolkit.Mvvm, Version=8.2.0.0, Culture=neutral, PublicKeyToken=4aff67a105548ee2, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\CommunityToolkit.Mvvm.8.2.2\lib\netstandard2.0\CommunityToolkit.Mvvm.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=7.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\Microsoft.Bcl.AsyncInterfaces.7.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
+    </Reference>
+    <Reference Include="System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\System.ComponentModel.Annotations.5.0.0\lib\net461\System.ComponentModel.Annotations.dll</HintPath>
+    </Reference>
+    <Reference Include="System.ComponentModel.DataAnnotations" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Numerics" />
+    <Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\WPFProject\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Api\IProgram.cs" />
+    <Compile Include="Api\ISequnce.cs" />
+    <Compile Include="Api\IStep.cs" />
+    <Compile Include="Api\IStepRunner.cs" />
+    <Compile Include="Entity\Param.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="TestModel.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+    <None Include="packages.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Import Project="..\WPFProject\packages\CommunityToolkit.Mvvm.8.2.2\build\netstandard2.0\CommunityToolkit.Mvvm.targets" Condition="Exists('..\WPFProject\packages\CommunityToolkit.Mvvm.8.2.2\build\netstandard2.0\CommunityToolkit.Mvvm.targets')" />
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+      <ErrorText>杩欏彴璁$畻鏈轰笂缂哄皯姝ら」鐩紩鐢ㄧ殑 NuGet 绋嬪簭鍖呫�備娇鐢ㄢ�淣uGet 绋嬪簭鍖呰繕鍘熲�濆彲涓嬭浇杩欎簺绋嬪簭鍖呫�傛湁鍏虫洿澶氫俊鎭紝璇峰弬瑙� http://go.microsoft.com/fwlink/?LinkID=322105銆傜己灏戠殑鏂囦欢鏄� {0}銆�</ErrorText>
+    </PropertyGroup>
+    <Error Condition="!Exists('..\WPFProject\packages\CommunityToolkit.Mvvm.8.2.2\build\netstandard2.0\CommunityToolkit.Mvvm.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\WPFProject\packages\CommunityToolkit.Mvvm.8.2.2\build\netstandard2.0\CommunityToolkit.Mvvm.targets'))" />
+  </Target>
+</Project>
\ No newline at end of file
diff --git a/WPFProject/MigrationBackup/fde93b81/VisionBuilder.Core/packages.config b/WPFProject/MigrationBackup/fde93b81/VisionBuilder.Core/packages.config
new file mode 100644
index 0000000..eb9f3e3
--- /dev/null
+++ b/WPFProject/MigrationBackup/fde93b81/VisionBuilder.Core/packages.config
@@ -0,0 +1,11 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="CommunityToolkit.Mvvm" version="8.2.2" targetFramework="net472" />
+  <package id="Microsoft.Bcl.AsyncInterfaces" version="7.0.0" targetFramework="net472" />
+  <package id="System.Buffers" version="4.5.1" targetFramework="net472" />
+  <package id="System.ComponentModel.Annotations" version="5.0.0" targetFramework="net472" />
+  <package id="System.Memory" version="4.5.5" targetFramework="net472" />
+  <package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
+  <package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net472" />
+  <package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" />
+</packages>
\ No newline at end of file
diff --git a/WPFProject/Models/Program.cs b/WPFProject/Models/Program.cs
index 2d42db7..e3b126c 100644
--- a/WPFProject/Models/Program.cs
+++ b/WPFProject/Models/Program.cs
@@ -2,8 +2,8 @@
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Xml.Serialization;
-using VisionBuilder.Core.Api;
-using VisionBuilder.Core.Entity;
+using HMI.Core.Api;
+using HMI.Core.Entity;
 
 namespace WPFProject.Models
 {
diff --git a/WPFProject/Models/Sequence.cs b/WPFProject/Models/Sequence.cs
index f563b94..52b1492 100644
--- a/WPFProject/Models/Sequence.cs
+++ b/WPFProject/Models/Sequence.cs
@@ -1,7 +1,5 @@
-锘縰sing System.Collections.Generic;
-using System.Collections.ObjectModel;
+锘縰sing System.Collections.ObjectModel;
 using System.Xml.Serialization;
-using VisionBuilder.Core.Api;
 
 namespace WPFProject.Models
 {
diff --git a/WPFProject/Models/Step.cs b/WPFProject/Models/Step.cs
index 2e4fbab..4e26b1d 100644
--- a/WPFProject/Models/Step.cs
+++ b/WPFProject/Models/Step.cs
@@ -2,7 +2,7 @@
 using System.Collections.Generic;
 using System.Reflection;
 using System.Xml.Serialization;
-using VisionBuilder.Core.Api;
+using HMI.Core.Api;
 
 namespace WPFProject.Models
 {
diff --git a/WPFProject/PanuonWindow.xaml b/WPFProject/PanuonWindow.xaml
new file mode 100644
index 0000000..4f54589
--- /dev/null
+++ b/WPFProject/PanuonWindow.xaml
@@ -0,0 +1,58 @@
+锘�<pu:WindowX x:Class="WPFProject.PanuonWindow"
+            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+            xmlns:local="clr-namespace:WPFProject"
+            xmlns:pw="https://opensource.panuon.com/wpf"
+            xmlns:pu="https://opensource.panuon.com/wpf-ui"
+            xmlns:ctl="clr-namespace:WPFProject.Controls"
+            mc:Ignorable="d"
+            WindowStartupLocation="CenterOwner"
+            WindowState="Maximized"
+            x:Name="window"
+            BorderBrush="{StaticResource MainBorder}"
+            Loaded="window_Loaded"
+            pu:WindowXCaption.Background="{StaticResource MainBorder}"
+            pu:WindowXCaption.Foreground="#FFF" d:DesignHeight="115.146" d:DesignWidth="341.223">
+
+    <pu:WindowXCaption.HeaderTemplate>
+        <DataTemplate>
+            <StackPanel DataContext="{Binding ElementName=window}" Orientation="Horizontal"
+                    Margin="5,0,0,0">
+                <Image Source="{Binding WindowLogo}"
+                   RenderOptions.BitmapScalingMode="HighQuality"
+                   Height="{StaticResource TitleFontSize}" />
+                <TextBlock FontSize="{StaticResource TitleFontSize}" VerticalAlignment="Center" Text="{Binding WindowTitle}"/>
+            </StackPanel>
+        </DataTemplate>
+    </pu:WindowXCaption.HeaderTemplate>
+
+    <pu:WindowXCaption.ExtendControl>
+        <StackPanel Orientation="Horizontal">
+            <Button x:Name="BtnSwitchTheme"
+                FontSize="18"
+                ToolTip="Light / Dark"
+                Style="{StaticResource {x:Static pu:WindowXCaption.MinimizeButtonStyleKey}}"
+                FontFamily="/HMI.UI;component/Resources/Font/#iconfont"
+                Content="&#xe60e;"
+                Click="Button_Click_2"/>
+        </StackPanel>
+    </pu:WindowXCaption.ExtendControl>
+
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition/>
+            <RowDefinition Height="30"/>
+        </Grid.RowDefinitions>
+
+        <ctl:MainTabControl Grid.Row="0" x:Name="menuTab">
+
+        </ctl:MainTabControl>
+
+        <!--<ctl:MenuTabControl Grid.Row="1" x:Name="menuTab" OnTabChange="menuTab_OnTabChange"> </ctl:MenuTabControl>-->
+
+
+        <StatusBar Grid.Row="1" Background="{StaticResource MainStatusBar}">99999</StatusBar>
+    </Grid>
+</pu:WindowX>
diff --git a/WPFProject/PanuonWindow.xaml.cs b/WPFProject/PanuonWindow.xaml.cs
new file mode 100644
index 0000000..d59e870
--- /dev/null
+++ b/WPFProject/PanuonWindow.xaml.cs
@@ -0,0 +1,93 @@
+锘縰sing System;
+using System.IO;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using HandyControl.Tools.Extension;
+using HMI.Core.Api;
+using HMI.Core.Setting;
+using HMI.Core.Util;
+using HMI.UI.Util;
+using Panuon.WPF.UI;
+using WPFProject.Utils;
+
+namespace WPFProject
+{
+    /// <summary>
+    /// PanuonWindow.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class PanuonWindow : WindowX
+    {
+        public PanuonWindow()
+        {
+            ToastHelper.Register(new MainToastHandler());
+            DataContext = this;
+            RefrshConfig();
+            InitializeComponent();
+        }
+
+        private void RefrshConfig()
+        {
+            WindowTitle = SystemSetting.Instance.WindowTitle;
+            try
+            {
+                WindowLogo = new BitmapImage(new Uri(Path.Combine(PathHelper.IconFolder,
+                    SystemSetting.Instance.LogoPath)));
+            }
+            catch (Exception ex)
+            {
+                WindowLogo = null;
+            }
+        }
+
+        private string windowTitle;
+
+        public string WindowTitle
+        {
+            get { return windowTitle; }
+            set { Set(ref windowTitle, value); }
+        }
+
+        private BitmapImage windowLogo;
+
+        public BitmapImage WindowLogo
+        {
+            get { return windowLogo; }
+            set { Set(ref windowLogo, value); }
+        }
+
+        private void Button_Click_2(object sender, RoutedEventArgs e)
+        {
+            Button btn = (Button)sender;
+            double temp = btn.RenderTransform.Value.Determinant;
+            btn.RenderTransformOrigin = new Point(0.5, 0.5);
+            ScaleTransform verticalFlipTransform = new ScaleTransform(1, temp * -1);
+            btn.RenderTransform = verticalFlipTransform;
+            menuTab.ChangeItemVisibility();
+        }
+
+        private void window_Loaded(object sender, RoutedEventArgs e)
+        {
+            SystemSetting.SystemSettingChanged += SystemSetting_SystemSettingChanged;
+        }
+
+        private void SystemSetting_SystemSettingChanged(object sender, SystemSetting e)
+        {
+            RefrshConfig();
+        }
+
+        //private void BaseWindow_Loaded(object sender, RoutedEventArgs e)
+        //{
+        //    var s = (Style)this.Resources["WindowButton"];
+        //    Button button = new Button
+        //    {
+        //        Content = "\ue60e",
+        //        Style = (Style)this.Resources["WindowButton"]
+        //    };
+        //    WindowChrome.SetIsHitTestVisibleInChrome(button, true);
+        //    button.Click += Button_Click_2;
+        //    this.InsertButton(button, 0);
+        //}
+    }
+}
diff --git a/WPFProject/Properties/AssemblyInfo.cs b/WPFProject/Properties/AssemblyInfo.cs
index 77f7d3a..d748efd 100644
--- a/WPFProject/Properties/AssemblyInfo.cs
+++ b/WPFProject/Properties/AssemblyInfo.cs
@@ -3,6 +3,8 @@
 using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;
 using System.Windows;
+using log4net;
+using log4net.Config;
 
 // 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
 // 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
@@ -53,3 +55,4 @@
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("1.0.0.0")]
 [assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
\ No newline at end of file
diff --git a/WPFProject/Style/Colors.xaml b/WPFProject/Style/Colors.xaml
deleted file mode 100644
index 845ba16..0000000
--- a/WPFProject/Style/Colors.xaml
+++ /dev/null
@@ -1,17 +0,0 @@
-锘�<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
-    <Brush x:Key="MainBorder">#0d4d84</Brush>
-    <Brush x:Key="MainMenu">#1d6eb2</Brush>
-    <Brush x:Key="ChildBorder">#3692e1</Brush>
-    <Brush x:Key="MainStatusBar">#1d6eb2</Brush>
-
-    <Brush x:Key="SecondaryImportant">Orange</Brush>
-    <Brush x:Key="Important">#e17933</Brush>
-    <Brush x:Key="ImportantFont">#FFF</Brush>
-
-
-    <Brush x:Key="ButtonColor">#103156</Brush>
-    <Brush x:Key="ButtonSelected">#02579E</Brush>
-    <Brush x:Key="ButtonFont">White</Brush>
-    <Brush x:Key="ButtonFontSelected">White</Brush>
-</ResourceDictionary>
\ No newline at end of file
diff --git a/WPFProject/Style/CommonTree.xaml b/WPFProject/Style/CommonTree.xaml
index 7055e27..0d1cb1e 100644
--- a/WPFProject/Style/CommonTree.xaml
+++ b/WPFProject/Style/CommonTree.xaml
@@ -5,7 +5,7 @@
                     >
     <ResourceDictionary.MergedDictionaries>
         <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml"/>
-        <ResourceDictionary Source="/WPFProject;component/Style/colors.xaml"/>
+        <ResourceDictionary Source="/HMI.UI;component/Style/colors.xaml"/>
     </ResourceDictionary.MergedDictionaries>
 
     <Style TargetType="TreeViewItem" BasedOn="{StaticResource TreeViewItemBaseStyle}">
diff --git a/WPFProject/Style/MainTab.xaml b/WPFProject/Style/MainTab.xaml
index 129964b..b90c76d 100644
--- a/WPFProject/Style/MainTab.xaml
+++ b/WPFProject/Style/MainTab.xaml
@@ -2,7 +2,7 @@
                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                     >
     <ResourceDictionary.MergedDictionaries>
-        <ResourceDictionary Source="/WPFProject;component/Style/colors.xaml"/>
+        <ResourceDictionary Source="/HMI.UI;component/Style/colors.xaml"/>
     </ResourceDictionary.MergedDictionaries>
 
     <Style x:Key="tabItemStyle" TargetType="TabItem">
diff --git a/WPFProject/TestWindow.xaml b/WPFProject/TestWindow.xaml
new file mode 100644
index 0000000..0e9ddb6
--- /dev/null
+++ b/WPFProject/TestWindow.xaml
@@ -0,0 +1,37 @@
+锘�<ui:BaseWindow x:Class="WPFProject.TestWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:WPFProject"
+        xmlns:ui="clr-namespace:HMI.UI;assembly=HMI.UI"
+        xmlns:ctl="clr-namespace:WPFProject.Controls"
+        mc:Ignorable="d"
+        Loaded="BaseWindow_Loaded"
+        WindowState="Maximized"
+        Style="{StaticResource BaseWindow}"
+        Title="TestWindow">
+    <Window.Resources>
+        <ResourceDictionary>
+            <ResourceDictionary.MergedDictionaries>
+                <ResourceDictionary Source="/HMI.UI;component/Style/WindowResources.xaml"/>
+            </ResourceDictionary.MergedDictionaries>
+        </ResourceDictionary>
+    </Window.Resources>
+
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition/>
+            <RowDefinition Height="30"/>
+        </Grid.RowDefinitions>
+
+        <ctl:MainTabControl Grid.Row="0" x:Name="menuTab" OnTabChange="menuTab_OnTabChange">
+
+        </ctl:MainTabControl>
+
+        <!--<ctl:MenuTabControl Grid.Row="1" x:Name="menuTab" OnTabChange="menuTab_OnTabChange"> </ctl:MenuTabControl>-->
+
+
+        <StatusBar Grid.Row="1" Background="{StaticResource MainStatusBar}">99999</StatusBar>
+    </Grid>
+</ui:BaseWindow>
diff --git a/WPFProject/TestWindow.xaml.cs b/WPFProject/TestWindow.xaml.cs
new file mode 100644
index 0000000..9feb282
--- /dev/null
+++ b/WPFProject/TestWindow.xaml.cs
@@ -0,0 +1,57 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+using HMI.UI;
+
+namespace WPFProject
+{
+    /// <summary>
+    /// TestWindow.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class TestWindow : BaseWindow
+    {
+        public TestWindow()
+        {
+            InitializeComponent();
+        }
+
+        private void Button_Click_2(object sender, RoutedEventArgs e)
+        {
+            Button btn = (Button)sender;
+            double temp = btn.RenderTransform.Value.Determinant;
+            btn.RenderTransformOrigin = new Point(0.5, 0.5);
+            ScaleTransform verticalFlipTransform = new ScaleTransform(1, temp * -1);
+            btn.RenderTransform = verticalFlipTransform;
+            menuTab.ChangeItemVisibility();
+        }
+
+        private void menuTab_OnTabChange(object sender, RoutedEventArgs e)
+        {
+
+        }
+
+        private void BaseWindow_Loaded(object sender, RoutedEventArgs e)
+        {
+            var s = (Style)this.Resources["WindowButton"];
+            Button button = new Button
+            {
+                Content = "\ue60e",
+                Style = (Style)this.Resources["WindowButton"]
+            };
+            WindowChrome.SetIsHitTestVisibleInChrome(button, true);
+            button.Click += Button_Click_2;
+            this.InsertButton(button,0);
+        }
+    }
+}
diff --git a/WPFProject/UI/BottomBar.xaml.cs b/WPFProject/UI/BottomBar.xaml.cs
index 0d2d80d..fccca99 100644
--- a/WPFProject/UI/BottomBar.xaml.cs
+++ b/WPFProject/UI/BottomBar.xaml.cs
@@ -15,8 +15,6 @@
             InitializeComponent();
         }
 
-
-
         public void AddMinWindow(MinInnerWindow min)
         {
             stackPanel.Children.Add(min);
diff --git a/WPFProject/UI/StepSetting.xaml b/WPFProject/UI/StepSetting.xaml
index 5650b51..8c8cb5c 100644
--- a/WPFProject/UI/StepSetting.xaml
+++ b/WPFProject/UI/StepSetting.xaml
@@ -12,7 +12,7 @@
             <ResourceDictionary.MergedDictionaries>
                 <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/>
                 <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml"/>
-                <ResourceDictionary Source="/WPFProject;component/Style/colors.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/colors.xaml"/>
                 <ResourceDictionary Source="/WPFProject;component/Style/MainTab.xaml"/>
             </ResourceDictionary.MergedDictionaries>
 
diff --git a/WPFProject/UI/Test/FunctionSetting.xaml b/WPFProject/UI/Test/FunctionSetting.xaml
index a54d9e2..794b0ea 100644
--- a/WPFProject/UI/Test/FunctionSetting.xaml
+++ b/WPFProject/UI/Test/FunctionSetting.xaml
@@ -16,7 +16,7 @@
             <ResourceDictionary.MergedDictionaries>
                 <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/>
                 <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml"/>
-                <ResourceDictionary Source="/WPFProject;component/Style/colors.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/Colors.xaml"/>
                 <ResourceDictionary Source="/WPFProject;component/Style/CommonTree.xaml"/>
                 <ResourceDictionary Source="/WPFProject;component/Style/MainTab.xaml"/>
             </ResourceDictionary.MergedDictionaries>
diff --git a/WPFProject/UI/Test/SequnceList.xaml b/WPFProject/UI/Test/SequnceList.xaml
index dc3d834..2a47d96 100644
--- a/WPFProject/UI/Test/SequnceList.xaml
+++ b/WPFProject/UI/Test/SequnceList.xaml
@@ -15,8 +15,8 @@
             <ResourceDictionary.MergedDictionaries>
                 <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/>
                 <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml"/>
-                <ResourceDictionary Source="/WPFProject;component/Style/colors.xaml"/>
-                <ResourceDictionary Source="/WPFProject;component/Style/WindowResources.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/Colors.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/WindowResources.xaml"/>
                 <ResourceDictionary Source="/WPFProject;component/Style/ListViewStyle.xaml"/>
             </ResourceDictionary.MergedDictionaries>
 
@@ -193,7 +193,7 @@
                       
                       ItemsSource="{Binding Steps}">
                 <DataGrid.Columns>
-                    <DataGridTextColumn IsReadOnly="True" Binding="{Binding Index}" Header="搴忓彿"/>
+                    <DataGridTextColumn IsReadOnly="True" Binding="{Binding Index}" Header="#"/>
 
                     <DataGridTextColumn Header="鏍囬1" Binding="{Binding Name}"></DataGridTextColumn>
                     <DataGridTextColumn Header="鏍囬2" Binding="{Binding Name}"></DataGridTextColumn>
diff --git a/WPFProject/UI/WorkControl.xaml b/WPFProject/UI/WorkControl.xaml
index e549395..84bb897 100644
--- a/WPFProject/UI/WorkControl.xaml
+++ b/WPFProject/UI/WorkControl.xaml
@@ -1,9 +1,10 @@
-锘�<UserControl x:Class="WPFProject.UI.WorkControl"
+锘�<hb:PluginControl x:Class="WPFProject.UI.WorkControl"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
-             xmlns:local="clr-namespace:WPFProject.UI"
+             xmlns:hb="clr-namespace:HMI.Base;assembly=HMI.Base"
+             xmlns:ui="clr-namespace:WPFProject.UI"
              xmlns:vm="clr-namespace:WPFProject.ViewModels"
              xmlns:view="clr-namespace:WPFProject.UI"
              xmlns:utils="clr-namespace:WPFProject.Utils"
@@ -13,18 +14,18 @@
     <UserControl.Resources>
         <ResourceDictionary>
             <ResourceDictionary.MergedDictionaries>
-                <ResourceDictionary Source="/WPFProject;component/Style/colors.xaml"/>
+                <ResourceDictionary Source="/HMI.UI;component/Style/Colors.xaml"/>
             </ResourceDictionary.MergedDictionaries>
         </ResourceDictionary>
     </UserControl.Resources>
 
     <Grid>
         <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
-            <Canvas x:Name="WorkArea" Background="{StaticResource MainMenu}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
+            <Canvas x:Name="WorkArea" Background="#FFF" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                 <!--<vt:ProgramList BorderThickness="1" BorderBrush="#000" Canvas.Left="335" Canvas.Top="121" utils:Resize.IsResizeable="True"></vt:ProgramList>
                 <vt:ProgramList BorderThickness="1" BorderBrush="#000" Canvas.Left="600" Canvas.Top="121" FocusableChanged="ProgramList_FocusableChanged"></vt:ProgramList>-->
 
-                <local:BottomBar x:Name="BottomBar" Canvas.Bottom="0" Panel.ZIndex="9999999"/>
+                <ui:BottomBar x:Name="BottomBar" Canvas.Bottom="0" Panel.ZIndex="9999999"/>
             </Canvas>
         </ScrollViewer>
 
@@ -66,4 +67,4 @@
             <vt:ProgramList Grid.Row="2" BorderThickness="1" BorderBrush="#000"></vt:ProgramList>
         </Grid>-->
     </Grid>
-</UserControl>
+</hb:PluginControl>
diff --git a/WPFProject/UI/WorkControl.xaml.cs b/WPFProject/UI/WorkControl.xaml.cs
index 755b5d2..725407c 100644
--- a/WPFProject/UI/WorkControl.xaml.cs
+++ b/WPFProject/UI/WorkControl.xaml.cs
@@ -2,10 +2,10 @@
 using System.Collections.Generic;
 using System.Windows;
 using System.Windows.Controls;
-using System.Windows.Media;
+using HMI.Base;
+using log4net;
 using WPFProject.Controls;
 using WPFProject.Models;
-using WPFProject.UI.Test;
 using WPFProject.Utils;
 
 namespace WPFProject.UI
@@ -13,8 +13,9 @@
     /// <summary>
     /// WorkControl.xaml 鐨勪氦浜掗�昏緫
     /// </summary>
-    public partial class WorkControl : UserControl, IPlugin
+    public partial class WorkControl : PluginControl
     {
+        private ILog log;
         public WorkControl()
         {
             InitializeComponent();
@@ -68,49 +69,49 @@
 
         private void UserControl_Loaded(object sender, RoutedEventArgs e)
         {
-            List<CanvasPosition> pos = InitGridSize();
-            ProgramList programList = new ProgramList();
-            InnerWindow p = new InnerWindow(pos[0])
-            {
-                Title = "绋嬪簭鍒楄〃",
-                Content = programList
-            };
-            HandleInnerWindow(p);
+            //List<CanvasPosition> pos = InitGridSize();
+            //ProgramList programList = new ProgramList();
+            //InnerWindow p = new InnerWindow(pos[0])
+            //{
+            //    Title = "绋嬪簭鍒楄〃",
+            //    Content = programList
+            //};
+            //HandleInnerWindow(p);
 
-            InnerWindow p1 = new InnerWindow(pos[1])
-            {
-                Title = "鍥剧墖",
-            };
-            HandleInnerWindow(p1);
+            //InnerWindow p1 = new InnerWindow(pos[1])
+            //{
+            //    Title = "鍥剧墖",
+            //};
+            //HandleInnerWindow(p1);
 
-            SequnceList sequnceList = new SequnceList();
-            programList.ProgramChanged += sequnceList.Selected_Program_Changed;
+            //SequnceList sequnceList = new SequnceList();
+            //programList.ProgramChanged += sequnceList.Selected_Program_Changed;
 
-            InnerWindow p2 = new InnerWindow(pos[2])
-            {
-                Title = "搴忓垪",
-                Content = sequnceList
-            };
-            HandleInnerWindow(p2);
+            //InnerWindow p2 = new InnerWindow(pos[2])
+            //{
+            //    Title = "搴忓垪",
+            //    Content = sequnceList
+            //};
+            //HandleInnerWindow(p2);
 
-            FunctionSetting functionSetting = new FunctionSetting();
-            InnerWindow p3 = new InnerWindow(pos[3])
-            {
-                Title = "鍑芥暟",
-                Content = functionSetting
-            };
-            HandleInnerWindow(p3);
+            //FunctionSetting functionSetting = new FunctionSetting();
+            //InnerWindow p3 = new InnerWindow(pos[3])
+            //{
+            //    Title = "鍑芥暟",
+            //    Content = functionSetting
+            //};
+            //HandleInnerWindow(p3);
 
-            StepSetting stepSetting = new StepSetting();
-            InnerWindow p4 = new InnerWindow(pos[4])
-            {
-                Title = "鍗曟璁剧疆",
-                Content = stepSetting
-            };
-            HandleInnerWindow(p4);
+            //StepSetting stepSetting = new StepSetting();
+            //InnerWindow p4 = new InnerWindow(pos[4])
+            //{
+            //    Title = "鍗曟璁剧疆",
+            //    Content = stepSetting
+            //};
+            //HandleInnerWindow(p4);
 
 
-            SizeChanged += WorkControl_SizeChanged;
+            //SizeChanged += WorkControl_SizeChanged;
             Loaded -= UserControl_Loaded;
 
         }
@@ -283,5 +284,30 @@
                 }
             }
         }
+
+        public object Active()
+        {
+            return null;
+        }
+
+        public object DeActive()
+        {
+            return null;
+        }
+
+        public void OnTabChange(object sender, object args)
+        {
+
+        }
+
+        public object Init()
+        {
+            return null;
+        }
+
+        public void SetLogger(ILog logger)
+        {
+            log = logger;
+        }
     }
 }
\ No newline at end of file
diff --git a/WPFProject/Utils/IPlugin.cs b/WPFProject/Utils/IPlugin.cs
deleted file mode 100644
index fd72209..0000000
--- a/WPFProject/Utils/IPlugin.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Controls;
-
-namespace WPFProject.Utils
-{
-    public interface IPlugin
-    {
-        public void OnTabChange(object sender, SelectionChangedEventArgs args);
-    }
-}
diff --git a/WPFProject/Utils/MainToastHandler.cs b/WPFProject/Utils/MainToastHandler.cs
new file mode 100644
index 0000000..ed44805
--- /dev/null
+++ b/WPFProject/Utils/MainToastHandler.cs
@@ -0,0 +1,42 @@
+锘縰sing System.Windows;
+using Panuon.WPF.UI;
+using Panuon.WPF.UI.Configurations;
+using HMI.UI.Util;
+
+namespace WPFProject.Utils
+{
+    public class MainToastHandler : ToastHandler
+    {
+        public void Success(Window window, string message,
+            MessageBoxIcon icon, ToastPosition position,
+            double offset, int durationMs, ToastWindow targetWindow)
+        {
+            var setting = Application.Current.FindResource("toastSuccess") as ToastSetting;
+            if (window is PanuonWindow pw)
+            {
+                double num = 20 + (pw.menuTab.MenuVisibility == Visibility.Visible ? pw.menuTab.Menu.ActualHeight + pw.menuTab.SubMenu.ActualHeight : 0);
+                Toast.Show(pw, message, icon, position, num, durationMs, setting);
+            }
+            else if (window is WindowX wx)
+            {
+                Toast.Show(wx, message, icon, position, 0, durationMs, setting);
+            }
+        }
+
+        public void Warning(Window window, string message,
+            MessageBoxIcon icon, ToastPosition position,
+            double offset, int durationMs, ToastWindow targetWindow)
+        {
+            var setting = Application.Current.FindResource("toastWarning") as ToastSetting;
+            if (window is PanuonWindow pw)
+            {
+                double num = 20 + (pw.menuTab.MenuVisibility == Visibility.Visible ? pw.menuTab.Menu.ActualHeight + pw.menuTab.SubMenu.ActualHeight : 0);
+                Toast.Show(pw, message, icon, position, num, durationMs, setting);
+            }
+            else if (window is WindowX wx)
+            {
+                Toast.Show(wx, message, icon, position, 0, durationMs, setting);
+            }
+        }
+    }
+}
diff --git a/WPFProject/Utils/Resize.cs b/WPFProject/Utils/Resize.cs
index bafa586..d2004f0 100644
--- a/WPFProject/Utils/Resize.cs
+++ b/WPFProject/Utils/Resize.cs
@@ -44,7 +44,7 @@
             {
                 FrameworkElement element = d as FrameworkElement;
                 if (element == null) return;
-                var resize = GetResizeable(element);
+                Resizeable resize = GetResizeable(element);
                 if (resize == null) return;
                 resize.Detach();
                 resize.Attach();
diff --git a/WPFProject/WPFProject.csproj b/WPFProject/WPFProject.csproj
index a49ab0d..354471f 100644
--- a/WPFProject/WPFProject.csproj
+++ b/WPFProject/WPFProject.csproj
@@ -35,6 +35,26 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>latest</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <Prefer32Bit>true</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>latest</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <Prefer32Bit>true</Prefer32Bit>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="AIStudio.Wpf.Controls, Version=1.2.2.0, Culture=neutral, processorArchitecture=MSIL">
       <HintPath>packages\AIStudio.Wpf.Controls.1.2.2\lib\net461\AIStudio.Wpf.Controls.dll</HintPath>
@@ -45,16 +65,26 @@
     <Reference Include="HandyControl, Version=3.4.0.0, Culture=neutral, PublicKeyToken=45be8712787a1e5b, processorArchitecture=MSIL">
       <HintPath>packages\HandyControl.3.4.0\lib\net472\HandyControl.dll</HintPath>
     </Reference>
+    <Reference Include="log4net, Version=3.0.3.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
+      <HintPath>packages\log4net.3.0.3\lib\net462\log4net.dll</HintPath>
+    </Reference>
     <Reference Include="Microsoft.Xaml.Behaviors, Version=1.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
       <HintPath>packages\Microsoft.Xaml.Behaviors.Wpf.1.1.39\lib\net45\Microsoft.Xaml.Behaviors.dll</HintPath>
     </Reference>
     <Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
       <HintPath>packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
     </Reference>
+    <Reference Include="Panuon.WPF, Version=1.1.2.2, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>packages\Panuon.WPF.1.1.2.2\lib\net472\Panuon.WPF.dll</HintPath>
+    </Reference>
+    <Reference Include="Panuon.WPF.UI, Version=1.2.4.8, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>packages\Panuon.WPF.UI.1.2.4.9\lib\net472\Panuon.WPF.UI.dll</HintPath>
+    </Reference>
     <Reference Include="PresentationFramework.Aero" />
     <Reference Include="System" />
     <Reference Include="System.ComponentModel.Composition" />
     <Reference Include="System.ComponentModel.DataAnnotations" />
+    <Reference Include="System.Configuration" />
     <Reference Include="System.Data" />
     <Reference Include="System.Drawing" />
     <Reference Include="System.IO, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
@@ -121,15 +151,22 @@
     <Compile Include="Controls\InnerWindow.xaml.cs">
       <DependentUpon>InnerWindow.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Controls\MainTabControl.xaml.cs">
+      <DependentUpon>MainTabControl.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Controls\MinInnerWindow.xaml.cs">
       <DependentUpon>MinInnerWindow.xaml</DependentUpon>
     </Compile>
-    <Compile Include="Events\TabChange.cs" />
+    <Compile Include="Entity\PluginLoadMessage.cs" />
+    <Compile Include="Entity\PluginSettingInfo.cs" />
     <Compile Include="Forms\Form1.cs">
       <SubType>Form</SubType>
     </Compile>
     <Compile Include="Forms\Form1.Designer.cs">
       <DependentUpon>Form1.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LoadingWindow.xaml.cs">
+      <DependentUpon>LoadingWindow.xaml</DependentUpon>
     </Compile>
     <Compile Include="Models\CanvasPosition.cs" />
     <Compile Include="Models\FuncModel.cs" />
@@ -138,6 +175,12 @@
     <Compile Include="Models\Program.cs" />
     <Compile Include="Models\Sequence.cs" />
     <Compile Include="Models\Step.cs" />
+    <Compile Include="PanuonWindow.xaml.cs">
+      <DependentUpon>PanuonWindow.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="TestWindow.xaml.cs">
+      <DependentUpon>TestWindow.xaml</DependentUpon>
+    </Compile>
     <Compile Include="UI\BottomBar.xaml.cs">
       <DependentUpon>BottomBar.xaml</DependentUpon>
     </Compile>
@@ -165,12 +208,16 @@
     <Compile Include="Utils\CanvasHelper.cs" />
     <Compile Include="Utils\DdDragHandler.cs" />
     <Compile Include="Utils\DdDropHandler.cs" />
-    <Compile Include="Utils\IPlugin.cs" />
+    <Compile Include="Utils\MainToastHandler.cs" />
     <Compile Include="Utils\Resize.cs" />
     <Compile Include="Utils\Win32Helper.cs" />
     <Compile Include="Utils\XmlUtil.cs" />
     <Compile Include="ViewModels\ProgramListViewModel.cs" />
     <Page Include="Controls\InnerWindow.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Page Include="Controls\MainTabControl.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
     </Page>
@@ -179,6 +226,10 @@
       <Generator>MSBuild:Compile</Generator>
     </Page>
     <Page Include="Controls\MinInnerWindow.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
+    <Page Include="LoadingWindow.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
     </Page>
@@ -198,15 +249,47 @@
       <DependentUpon>MainWindow.xaml</DependentUpon>
       <SubType>Code</SubType>
     </Compile>
+    <Page Include="PanuonWindow.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
+    <Page Include="UI\BottomBar.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Page Include="UI\StepSetting.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Page Include="UI\TestWindow.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Page Include="UI\Test\FunctionSetting.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Page Include="UI\Test\ProgramList.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Page Include="UI\Test\SequnceList.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Page Include="UI\WorkControl.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Page Include="UI\WorkWindow.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
     <Resource Include="Resources\Font\Font.xaml">
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Resource>
-    <Page Include="Style\Colors.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
     <Page Include="Style\ListViewStyle.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
@@ -219,39 +302,7 @@
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
     </Page>
-    <Page Include="Style\WindowResources.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="UI\BottomBar.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="UI\StepSetting.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="UI\TestWindow.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="UI\Test\FunctionSetting.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="UI\Test\ProgramList.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="UI\Test\SequnceList.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="UI\WorkControl.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="UI\WorkWindow.xaml">
+    <Page Include="TestWindow.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
     </Page>
@@ -277,6 +328,9 @@
       <Generator>ResXFileCodeGenerator</Generator>
       <LastGenOutput>Resources.Designer.cs</LastGenOutput>
     </EmbeddedResource>
+    <Content Include="log4net.config">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
     <None Include="packages.config" />
     <None Include="Properties\Settings.settings">
       <Generator>SettingsSingleFileGenerator</Generator>
@@ -296,10 +350,49 @@
     <Resource Include="Resources\Icon\xinzeng_1.png" />
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\VisionBuilder.Core\VisionBuilder.Core.csproj">
+    <ProjectReference Include="..\HMI.AlermInfoManage\HMI.AlermInfoManage.csproj">
+      <Project>{945c2577-4558-45e3-891a-096cb3047304}</Project>
+      <Name>HMI.AlermInfoManage</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HMI.Base\HMI.Base.csproj">
+      <Project>{2a6f9720-a890-4036-9d73-41a0dae28341}</Project>
+      <Name>HMI.Base</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HMI.IOMonitor\HMI.IOMonitor.csproj">
+      <Project>{f7663c79-7047-42f3-b129-73a2575ee7c6}</Project>
+      <Name>HMI.IOMonitor</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HMI.ParameterManage\HMI.ParameterManage.csproj">
+      <Project>{736cd77d-b81e-4866-bb00-84b0b57110f0}</Project>
+      <Name>HMI.ParameterManage</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HMI.SettingControl\HMI.SettingControl.csproj">
+      <Project>{3dd748ac-9708-49ad-b846-659214035588}</Project>
+      <Name>HMI.SettingControl</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HMI.UI\HMI.UI.csproj">
+      <Project>{f17de6b5-af1d-48c6-94a0-6b763a6546a6}</Project>
+      <Name>HMI.UI</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HMI.Core\HMI.Core.csproj">
       <Project>{3e3bf44a-0b69-45c5-9512-528cb48a7106}</Project>
-      <Name>VisionBuilder.Core</Name>
+      <Name>HMI.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HMI.MenuManage\HMI.MenuManage.csproj">
+      <Project>{de4205c6-5923-46fd-a4b9-65169bf61c75}</Project>
+      <Name>HMI.MenuManage</Name>
     </ProjectReference>
   </ItemGroup>
+  <ItemGroup>
+    <Content Include="Icon\xinzeng_1.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>copy /Y "$(TargetDir)HMI.MenuManage.dll" "$(TargetDir)\Plugin\HMI.MenuManage.dll" 
+copy /Y "$(TargetDir)HMI.MenuManage.pdb" "$(TargetDir)\Plugin\HMI.MenuManage.pdb"
+copy /Y "$(TargetDir)HMI.AlermInfoManage.dll" "$(TargetDir)\Plugin\HMI.AlermInfoManage.dll" 
+copy /Y "$(TargetDir)HMI.AlermInfoManage.pdb" "$(TargetDir)\Plugin\HMI.AlermInfoManage.pdb"</PostBuildEvent>
+  </PropertyGroup>
 </Project>
\ No newline at end of file
diff --git a/WPFProject/WPFProject.sln b/WPFProject/WPFProject.sln
index 59fbd83..4201d5e 100644
--- a/WPFProject/WPFProject.sln
+++ b/WPFProject/WPFProject.sln
@@ -1,38 +1,156 @@
 锘�
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.33328.57
+# Visual Studio Version 17
+VisualStudioVersion = 17.9.34728.123
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPFProject", "WPFProject.csproj", "{D47D2314-5DD5-4899-ADF9-15ED057289D3}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisionBuilder.Core", "..\VisionBuilder.Core\VisionBuilder.Core.csproj", "{3E3BF44A-0B69-45C5-9512-528CB48A7106}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HMI.Core", "..\HMI.Core\HMI.Core.csproj", "{3E3BF44A-0B69-45C5-9512-528CB48A7106}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisionBuilder.Test", "..\VisionBuilder.Test\VisionBuilder.Test.csproj", "{6E1CC97A-B3CB-4E9F-94E0-F264DE0D8298}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisionBuilder.Engine", "..\VisionBuilder.Engine\VisionBuilder.Engine.csproj", "{8E5E8A68-0B9D-4A6A-B325-730C64603FDF}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HMI.UI", "..\HMI.UI\HMI.UI.csproj", "{F17DE6B5-AF1D-48C6-94A0-6B763A6546A6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HMI.MenuManage", "..\HMI.MenuManage\HMI.MenuManage.csproj", "{DE4205C6-5923-46FD-A4B9-65169BF61C75}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisionBuilder.Run", "..\VisionBuilder.Run\VisionBuilder.Run.csproj", "{7C299AED-88CC-437E-A68B-1550AA72E6B0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HMI.UnitTest", "..\HMI.UnitTest\HMI.UnitTest.csproj", "{325A7F52-FE51-44F0-B3AC-5F42F5356605}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HMI.AlermInfoManage", "..\HMI.AlermInfoManage\HMI.AlermInfoManage.csproj", "{945C2577-4558-45E3-891A-096CB3047304}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HMI.SettingControl", "..\HMI.SettingControl\HMI.SettingControl.csproj", "{3DD748AC-9708-49AD-B846-659214035588}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HMI.Base", "..\HMI.Base\HMI.Base.csproj", "{2A6F9720-A890-4036-9D73-41A0DAE28341}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HMI.DataViewer", "..\HMI.DataViewer\HMI.DataViewer.csproj", "{A580DE4A-34E7-4EFE-AD2C-0871396000E9}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HMI.IOMonitor", "..\HMI.IOMonitor\HMI.IOMonitor.csproj", "{F7663C79-7047-42F3-B129-73A2575EE7C6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HMI.ParameterManage", "..\HMI.ParameterManage\HMI.ParameterManage.csproj", "{736CD77D-B81E-4866-BB00-84B0B57110F0}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
+		Debug|x64 = Debug|x64
 		Release|Any CPU = Release|Any CPU
+		Release|x64 = Release|x64
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 		{D47D2314-5DD5-4899-ADF9-15ED057289D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{D47D2314-5DD5-4899-ADF9-15ED057289D3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D47D2314-5DD5-4899-ADF9-15ED057289D3}.Debug|x64.ActiveCfg = Debug|x64
+		{D47D2314-5DD5-4899-ADF9-15ED057289D3}.Debug|x64.Build.0 = Debug|x64
 		{D47D2314-5DD5-4899-ADF9-15ED057289D3}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{D47D2314-5DD5-4899-ADF9-15ED057289D3}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D47D2314-5DD5-4899-ADF9-15ED057289D3}.Release|x64.ActiveCfg = Release|x64
+		{D47D2314-5DD5-4899-ADF9-15ED057289D3}.Release|x64.Build.0 = Release|x64
 		{3E3BF44A-0B69-45C5-9512-528CB48A7106}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{3E3BF44A-0B69-45C5-9512-528CB48A7106}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3E3BF44A-0B69-45C5-9512-528CB48A7106}.Debug|x64.ActiveCfg = Debug|x64
+		{3E3BF44A-0B69-45C5-9512-528CB48A7106}.Debug|x64.Build.0 = Debug|x64
 		{3E3BF44A-0B69-45C5-9512-528CB48A7106}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{3E3BF44A-0B69-45C5-9512-528CB48A7106}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3E3BF44A-0B69-45C5-9512-528CB48A7106}.Release|x64.ActiveCfg = Release|x64
+		{3E3BF44A-0B69-45C5-9512-528CB48A7106}.Release|x64.Build.0 = Release|x64
 		{6E1CC97A-B3CB-4E9F-94E0-F264DE0D8298}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{6E1CC97A-B3CB-4E9F-94E0-F264DE0D8298}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6E1CC97A-B3CB-4E9F-94E0-F264DE0D8298}.Debug|x64.ActiveCfg = Debug|x64
+		{6E1CC97A-B3CB-4E9F-94E0-F264DE0D8298}.Debug|x64.Build.0 = Debug|x64
 		{6E1CC97A-B3CB-4E9F-94E0-F264DE0D8298}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{6E1CC97A-B3CB-4E9F-94E0-F264DE0D8298}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6E1CC97A-B3CB-4E9F-94E0-F264DE0D8298}.Release|x64.ActiveCfg = Release|x64
+		{6E1CC97A-B3CB-4E9F-94E0-F264DE0D8298}.Release|x64.Build.0 = Release|x64
 		{8E5E8A68-0B9D-4A6A-B325-730C64603FDF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{8E5E8A68-0B9D-4A6A-B325-730C64603FDF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8E5E8A68-0B9D-4A6A-B325-730C64603FDF}.Debug|x64.ActiveCfg = Debug|x64
+		{8E5E8A68-0B9D-4A6A-B325-730C64603FDF}.Debug|x64.Build.0 = Debug|x64
 		{8E5E8A68-0B9D-4A6A-B325-730C64603FDF}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{8E5E8A68-0B9D-4A6A-B325-730C64603FDF}.Release|Any CPU.Build.0 = Release|Any CPU
+		{8E5E8A68-0B9D-4A6A-B325-730C64603FDF}.Release|x64.ActiveCfg = Release|x64
+		{8E5E8A68-0B9D-4A6A-B325-730C64603FDF}.Release|x64.Build.0 = Release|x64
+		{F17DE6B5-AF1D-48C6-94A0-6B763A6546A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F17DE6B5-AF1D-48C6-94A0-6B763A6546A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F17DE6B5-AF1D-48C6-94A0-6B763A6546A6}.Debug|x64.ActiveCfg = Debug|x64
+		{F17DE6B5-AF1D-48C6-94A0-6B763A6546A6}.Debug|x64.Build.0 = Debug|x64
+		{F17DE6B5-AF1D-48C6-94A0-6B763A6546A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F17DE6B5-AF1D-48C6-94A0-6B763A6546A6}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F17DE6B5-AF1D-48C6-94A0-6B763A6546A6}.Release|x64.ActiveCfg = Release|Any CPU
+		{F17DE6B5-AF1D-48C6-94A0-6B763A6546A6}.Release|x64.Build.0 = Release|Any CPU
+		{DE4205C6-5923-46FD-A4B9-65169BF61C75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{DE4205C6-5923-46FD-A4B9-65169BF61C75}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{DE4205C6-5923-46FD-A4B9-65169BF61C75}.Debug|x64.ActiveCfg = Debug|x64
+		{DE4205C6-5923-46FD-A4B9-65169BF61C75}.Debug|x64.Build.0 = Debug|x64
+		{DE4205C6-5923-46FD-A4B9-65169BF61C75}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{DE4205C6-5923-46FD-A4B9-65169BF61C75}.Release|Any CPU.Build.0 = Release|Any CPU
+		{DE4205C6-5923-46FD-A4B9-65169BF61C75}.Release|x64.ActiveCfg = Release|Any CPU
+		{DE4205C6-5923-46FD-A4B9-65169BF61C75}.Release|x64.Build.0 = Release|Any CPU
+		{7C299AED-88CC-437E-A68B-1550AA72E6B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7C299AED-88CC-437E-A68B-1550AA72E6B0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7C299AED-88CC-437E-A68B-1550AA72E6B0}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{7C299AED-88CC-437E-A68B-1550AA72E6B0}.Debug|x64.Build.0 = Debug|Any CPU
+		{7C299AED-88CC-437E-A68B-1550AA72E6B0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{7C299AED-88CC-437E-A68B-1550AA72E6B0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{7C299AED-88CC-437E-A68B-1550AA72E6B0}.Release|x64.ActiveCfg = Release|Any CPU
+		{7C299AED-88CC-437E-A68B-1550AA72E6B0}.Release|x64.Build.0 = Release|Any CPU
+		{325A7F52-FE51-44F0-B3AC-5F42F5356605}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{325A7F52-FE51-44F0-B3AC-5F42F5356605}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{325A7F52-FE51-44F0-B3AC-5F42F5356605}.Debug|x64.ActiveCfg = Debug|x64
+		{325A7F52-FE51-44F0-B3AC-5F42F5356605}.Debug|x64.Build.0 = Debug|x64
+		{325A7F52-FE51-44F0-B3AC-5F42F5356605}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{325A7F52-FE51-44F0-B3AC-5F42F5356605}.Release|Any CPU.Build.0 = Release|Any CPU
+		{325A7F52-FE51-44F0-B3AC-5F42F5356605}.Release|x64.ActiveCfg = Release|Any CPU
+		{325A7F52-FE51-44F0-B3AC-5F42F5356605}.Release|x64.Build.0 = Release|Any CPU
+		{945C2577-4558-45E3-891A-096CB3047304}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{945C2577-4558-45E3-891A-096CB3047304}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{945C2577-4558-45E3-891A-096CB3047304}.Debug|x64.ActiveCfg = Debug|x64
+		{945C2577-4558-45E3-891A-096CB3047304}.Debug|x64.Build.0 = Debug|x64
+		{945C2577-4558-45E3-891A-096CB3047304}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{945C2577-4558-45E3-891A-096CB3047304}.Release|Any CPU.Build.0 = Release|Any CPU
+		{945C2577-4558-45E3-891A-096CB3047304}.Release|x64.ActiveCfg = Release|Any CPU
+		{945C2577-4558-45E3-891A-096CB3047304}.Release|x64.Build.0 = Release|Any CPU
+		{3DD748AC-9708-49AD-B846-659214035588}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{3DD748AC-9708-49AD-B846-659214035588}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3DD748AC-9708-49AD-B846-659214035588}.Debug|x64.ActiveCfg = Debug|x64
+		{3DD748AC-9708-49AD-B846-659214035588}.Debug|x64.Build.0 = Debug|x64
+		{3DD748AC-9708-49AD-B846-659214035588}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{3DD748AC-9708-49AD-B846-659214035588}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3DD748AC-9708-49AD-B846-659214035588}.Release|x64.ActiveCfg = Release|Any CPU
+		{3DD748AC-9708-49AD-B846-659214035588}.Release|x64.Build.0 = Release|Any CPU
+		{2A6F9720-A890-4036-9D73-41A0DAE28341}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2A6F9720-A890-4036-9D73-41A0DAE28341}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2A6F9720-A890-4036-9D73-41A0DAE28341}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{2A6F9720-A890-4036-9D73-41A0DAE28341}.Debug|x64.Build.0 = Debug|Any CPU
+		{2A6F9720-A890-4036-9D73-41A0DAE28341}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{2A6F9720-A890-4036-9D73-41A0DAE28341}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2A6F9720-A890-4036-9D73-41A0DAE28341}.Release|x64.ActiveCfg = Release|Any CPU
+		{2A6F9720-A890-4036-9D73-41A0DAE28341}.Release|x64.Build.0 = Release|Any CPU
+		{A580DE4A-34E7-4EFE-AD2C-0871396000E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A580DE4A-34E7-4EFE-AD2C-0871396000E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A580DE4A-34E7-4EFE-AD2C-0871396000E9}.Debug|x64.ActiveCfg = Debug|x64
+		{A580DE4A-34E7-4EFE-AD2C-0871396000E9}.Debug|x64.Build.0 = Debug|x64
+		{A580DE4A-34E7-4EFE-AD2C-0871396000E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A580DE4A-34E7-4EFE-AD2C-0871396000E9}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A580DE4A-34E7-4EFE-AD2C-0871396000E9}.Release|x64.ActiveCfg = Release|Any CPU
+		{A580DE4A-34E7-4EFE-AD2C-0871396000E9}.Release|x64.Build.0 = Release|Any CPU
+		{F7663C79-7047-42F3-B129-73A2575EE7C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F7663C79-7047-42F3-B129-73A2575EE7C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F7663C79-7047-42F3-B129-73A2575EE7C6}.Debug|x64.ActiveCfg = Debug|x64
+		{F7663C79-7047-42F3-B129-73A2575EE7C6}.Debug|x64.Build.0 = Debug|x64
+		{F7663C79-7047-42F3-B129-73A2575EE7C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F7663C79-7047-42F3-B129-73A2575EE7C6}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F7663C79-7047-42F3-B129-73A2575EE7C6}.Release|x64.ActiveCfg = Release|Any CPU
+		{F7663C79-7047-42F3-B129-73A2575EE7C6}.Release|x64.Build.0 = Release|Any CPU
+		{736CD77D-B81E-4866-BB00-84B0B57110F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{736CD77D-B81E-4866-BB00-84B0B57110F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{736CD77D-B81E-4866-BB00-84B0B57110F0}.Debug|x64.ActiveCfg = Debug|x64
+		{736CD77D-B81E-4866-BB00-84B0B57110F0}.Debug|x64.Build.0 = Debug|x64
+		{736CD77D-B81E-4866-BB00-84B0B57110F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{736CD77D-B81E-4866-BB00-84B0B57110F0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{736CD77D-B81E-4866-BB00-84B0B57110F0}.Release|x64.ActiveCfg = Release|Any CPU
+		{736CD77D-B81E-4866-BB00-84B0B57110F0}.Release|x64.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/WPFProject/log4net.config b/WPFProject/log4net.config
new file mode 100644
index 0000000..cc9e4f9
--- /dev/null
+++ b/WPFProject/log4net.config
@@ -0,0 +1,38 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<log4net>
+	<!-- 鎺у埗鍙版棩蹇楅厤缃� -->
+	<appender name="Console" type="log4net.Appender.ConsoleAppender">
+		<!-- 鏃ュ織杈撳嚭鏍煎紡 -->
+		<layout type="log4net.Layout.PatternLayout">
+			<conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
+		</layout>
+	</appender>
+
+	<!-- 鏂囦欢瀛樺偍鏃ュ織閰嶇疆 -->
+	<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
+		<appendToFile value="true" />
+		<rollingStyle value="Date" />
+		<datePattern value="'log_'yyyyMMdd'.log'"/>
+		<staticLogFileName value="false"/>
+
+		<!-- 淇濆瓨鏂囦欢鐨勫悕绉� -->
+		<file value="./Log/" />
+
+		<!-- 鏂囦欢鐨勭紪鐮佹柟寮� -->
+		<param name="Encoding" value="UTF-8"/>
+		<!-- 姣忎釜鏂囦欢鐨勫ぇ灏� -->
+		<maximumFileSize value="100KB" />
+		<!-- 淇濆瓨鏂囦欢鏁伴噺 -->
+		<maxSizeRollBackups value="2" />
+		<!-- 鏃ュ織杈撳嚭鏍煎紡 -->
+		<layout type="log4net.Layout.PatternLayout">
+			<conversionPattern value="%logger: [%date] [%thread] [%level] [%class:%L] - %message%newline" />
+		</layout>
+	</appender>
+
+	<root>
+		<level value="INFO" />
+		<appender-ref ref="Console" />
+		<appender-ref ref="RollingFile" />
+	</root>
+</log4net>
\ No newline at end of file
diff --git a/WPFProject/packages.config b/WPFProject/packages.config
index 1143c77..761d92d 100644
--- a/WPFProject/packages.config
+++ b/WPFProject/packages.config
@@ -3,8 +3,11 @@
   <package id="AIStudio.Wpf.Controls" version="1.2.2" targetFramework="net472" />
   <package id="gong-wpf-dragdrop" version="3.2.1" targetFramework="net472" />
   <package id="HandyControl" version="3.4.0" targetFramework="net472" />
+  <package id="log4net" version="3.0.3" targetFramework="net472" />
   <package id="Microsoft.Xaml.Behaviors.Wpf" version="1.1.39" targetFramework="net472" />
   <package id="Newtonsoft.Json" version="13.0.1" targetFramework="net472" />
+  <package id="Panuon.WPF" version="1.1.2.2" targetFramework="net472" />
+  <package id="Panuon.WPF.UI" version="1.2.4.9" targetFramework="net472" />
   <package id="System.IO" version="4.3.0" targetFramework="net472" />
   <package id="System.Net.Http" version="4.3.4" targetFramework="net472" />
   <package id="System.Runtime" version="4.3.0" targetFramework="net472" />

--
Gitblit v1.9.1