System.Data.SQLite
Check-in [bc7c43a0b4]
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Improve automatic detection and handling of the Entity Framework 6 assembly by the design-time components installer. Pursuant to [e634e330a6].
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: bc7c43a0b49fd09ca5e1bb409c9a607d1d648e38
User & Date: mistachkin 2014-07-31 05:48:57
References
2014-07-31
05:50 Pending ticket [e634e330a6]: Support for EF 6.1.0 EDMX Wizard broken plus 4 other changes artifact: 30889897eb user: mistachkin
Context
2014-07-31
19:25
Update the master release archive manifest. check-in: fa5d926c64 user: mistachkin tags: trunk
05:48
Improve automatic detection and handling of the Entity Framework 6 assembly by the design-time components installer. Pursuant to [e634e330a6]. check-in: bc7c43a0b4 user: mistachkin tags: trunk
05:48
Cleanup the NuGet package configuration transform files. check-in: b4069b4c09 user: mistachkin tags: trunk
Changes
Hide Diffs Side-by-Side Diffs Ignore Whitespace Patch

Changes to Doc/Extra/Provider/version.html.

    43     43       <div id="mainSection">
    44     44       <div id="mainBody">
    45     45       <h1 class="heading">Version History</h1>
    46     46       <p><b>1.0.94.0 - August XX, 2014 <font color="red">(release scheduled)</font></b></p>
    47     47       <ul>
    48     48         <li>Updated to <a href="http://www.nuget.org/packages/EntityFramework/6.1.1">Entity Framework 6.1.1</a>.</li>
    49     49         <li>Add RefreshFlags method to the SQLiteDataReader class to forcibly refresh its connection flags.</li>
           50  +      <li>Improve automatic detection and handling of the Entity Framework 6 assembly by the design-time components installer. Pursuant to <a href="http://system.data.sqlite.org/index.html/info/e634e330a6">[e634e330a6]</a>.&nbsp;<b>** Potentially Incompatible Change **</b></li>
    50     51         <li>Improve SQLiteDataReader performance slightly by caching the connection flags.&nbsp;<b>** Potentially Incompatible Change **</b></li>
    51     52         <li>Minimize usage of the &quot;Use_SQLiteConvert_DefaultDbType&quot; and &quot;Use_SQLiteConvert_DefaultTypeName&quot; settings. Fix for <a href="http://system.data.sqlite.org/index.html/info/58ed318f2f">[58ed318f2f]</a>.&nbsp;<b>** Potentially Incompatible Change **</b></li>
    52     53       </ul>
    53     54       <p><b>1.0.93.0 - June 23, 2014</b></p>
    54     55       <ul>
    55     56         <li>Updated to <a href="http://www.sqlite.org/releaselog/3_8_5.html">SQLite 3.8.5</a>.</li>
    56     57         <li>Updated to <a href="http://www.nuget.org/packages/EntityFramework/6.1">Entity Framework 6.1</a>.</li>

Changes to Tests/data/Installer_Test_Vs2010.log.

     1      1   Installer.exe: #1: Configuration.Process: No actual changes will be made to this system because "what-if" mode is enabled.
     2         -Installer.exe: #2: Installer.Main: GacInstall: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.dll]]"
     3         -Installer.exe: #3: Installer.Main: GacInstall: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.Linq.dll]]"
     4         -Installer.exe: #4: Configuration.IsEf6AssemblyAvailable: Entity Framework 6 assembly was resolved.
            2  +Installer.exe: #2: Configuration.IsSystemEf6AssemblyAvailable: Entity Framework 6 assembly was resolved.
            3  +Installer.exe: #3: Installer.Main: GacInstall: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.dll]]"
            4  +Installer.exe: #4: Installer.Main: GacInstall: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.Linq.dll]]"
     5      5   Installer.exe: #5: Installer.Main: GacInstall: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.EF6.dll]]"
     6      6   Installer.exe: #6: Installer.Main: GacInstall: assemblyPath = "[file nativename [file join [getBuildDirectory] SQLite.Designer.dll]]"
     7      7   Installer.exe: #7: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework\v4.0.30319", writable = False
     8      8   Installer.exe: #8: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework\v4.0.30319\AssemblyFoldersEx", writable = True
     9      9   Installer.exe: #9: RegistryHelper.DeleteSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\.NETFramework\v4.0.30319\AssemblyFoldersEx", subKeyName = "SQLite"
    10     10   Installer.exe: #10: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework\v4.0.30319\AssemblyFoldersEx", writable = True
    11     11   Installer.exe: #11: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\.NETFramework\v4.0.30319\AssemblyFoldersEx", subKeyName = "System.Data.SQLite"
    12     12   Installer.exe: #12: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\.NETFramework\v4.0.30319\AssemblyFoldersEx\System.Data.SQLite", name = <null>, value = "[file nativename [getBuildDirectory]]"
    13     13   Installer.exe: #13: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework\v4.0.30319", writable = False
    14     14   Installer.exe: #14: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework", writable = False
    15     15   Installer.exe: #15: RegistryHelper.GetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\.NETFramework", name = "InstallRoot", defaultValue = <null>
    16     16   Installer.exe: #16: Installer.RemoveDbProviderFactory: addElement = <null>, removeElement = <null>
    17         -Installer.exe: #17: Installer.AddDbProviderFactory: addElement = <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=[file version $systemDataSQLiteDllFile], Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
           17  +Installer.exe: #17: Installer.AddDbProviderFactory: addElement = <add name="SQLite Data Provider" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6, Version=[file version $systemDataSQLiteDllFile], Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    18     18   Installer.exe: #18: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\10.0", writable = False
    19     19   Installer.exe: #19: RegistryHelper.GetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0", name = "InstallDir", defaultValue = <null>
    20     20   Installer.exe: #20: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\10.0", writable = False
    21     21   Installer.exe: #21: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0", subKeyName = "Packages", writable = True
    22     22   Installer.exe: #22: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0\Packages", subKeyName = "{dcbe6c8d-0e57-4099-a183-98ff74c64d9c}"
    23     23   Installer.exe: #23: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0\Packages\{dcbe6c8d-0e57-4099-a183-98ff74c64d9c}", name = <null>, value = "System.Data.SQLite Designer Package"
    24     24   Installer.exe: #24: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0\Packages\{dcbe6c8d-0e57-4099-a183-98ff74c64d9c}", name = "Class", value = "SQLite.Designer.SQLitePackage"
................................................................................
    49     49   Installer.exe: #49: RegistryHelper.GetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0", name = "InstallDir", defaultValue = <null>
    50     50   Installer.exe: #50: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\10.0", writable = False
    51     51   Installer.exe: #51: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0", subKeyName = "DataProviders", writable = True
    52     52   Installer.exe: #52: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0\DataProviders", subKeyName = "{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}"
    53     53   Installer.exe: #53: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = <null>, value = ".NET Framework Data Provider for SQLite"
    54     54   Installer.exe: #54: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = "Assembly", value = "SQLite.Designer, Version=[file version $sqliteDesignerDllFile], Culture=neutral, PublicKeyToken=db937bc2d44ff139"
    55     55   Installer.exe: #55: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = "AssociatedSource", value = "{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c71}"
    56         -Installer.exe: #56: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = "InvariantName", value = "System.Data.SQLite"
           56  +Installer.exe: #56: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = "InvariantName", value = "System.Data.SQLite.EF6"
    57     57   Installer.exe: #57: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = "Technology", value = "{77ab9a9d-78b9-4ba7-91ac-873f5338f1d2}"
    58     58   Installer.exe: #58: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = "CodeBase", value = "[file nativename [file join [getBuildDirectory] SQLite.Designer.dll]]"
    59     59   Installer.exe: #59: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = "FactoryService", value = "{dcbe6c8d-0e57-4099-a183-98ff74c64d9d}"
    60     60   Installer.exe: #60: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataConnectionUIControl"
    61     61   Installer.exe: #61: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataConnectionProperties"
    62     62   Installer.exe: #62: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataConnectionSupport"
    63     63   Installer.exe: #63: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataObjectSupport"

Changes to Tests/data/Installer_Test_Vs2012.log.

     1      1   Installer.exe: #1: Configuration.Process: No actual changes will be made to this system because "what-if" mode is enabled.
     2         -Installer.exe: #2: Installer.Main: GacInstall: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.dll]]"
     3         -Installer.exe: #3: Installer.Main: GacInstall: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.Linq.dll]]"
     4         -Installer.exe: #4: Configuration.IsEf6AssemblyAvailable: Entity Framework 6 assembly was resolved.
            2  +Installer.exe: #2: Configuration.IsSystemEf6AssemblyAvailable: Entity Framework 6 assembly was resolved.
            3  +Installer.exe: #3: Installer.Main: GacInstall: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.dll]]"
            4  +Installer.exe: #4: Installer.Main: GacInstall: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.Linq.dll]]"
     5      5   Installer.exe: #5: Installer.Main: GacInstall: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.EF6.dll]]"
     6      6   Installer.exe: #6: Installer.Main: GacInstall: assemblyPath = "[file nativename [file join [getBuildDirectory] SQLite.Designer.dll]]"
     7      7   Installer.exe: #7: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework\v4.5.50709", writable = False
     8      8   Installer.exe: #8: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework\v4.5.50709\AssemblyFoldersEx", writable = True
     9      9   Installer.exe: #9: RegistryHelper.DeleteSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\.NETFramework\v4.5.50709\AssemblyFoldersEx", subKeyName = "SQLite"
    10     10   Installer.exe: #10: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework\v4.5.50709\AssemblyFoldersEx", writable = True
    11     11   Installer.exe: #11: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\.NETFramework\v4.5.50709\AssemblyFoldersEx", subKeyName = "System.Data.SQLite"
    12     12   Installer.exe: #12: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\.NETFramework\v4.5.50709\AssemblyFoldersEx\System.Data.SQLite", name = <null>, value = "[file nativename [getBuildDirectory]]"
    13     13   Installer.exe: #13: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework\v4.0.30319", writable = False
    14     14   Installer.exe: #14: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework", writable = False
    15     15   Installer.exe: #15: RegistryHelper.GetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\.NETFramework", name = "InstallRoot", defaultValue = <null>
    16     16   Installer.exe: #16: Installer.RemoveDbProviderFactory: addElement = <null>, removeElement = <null>
    17         -Installer.exe: #17: Installer.AddDbProviderFactory: addElement = <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=[file version $systemDataSQLiteDllFile], Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
           17  +Installer.exe: #17: Installer.AddDbProviderFactory: addElement = <add name="SQLite Data Provider" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6, Version=[file version $systemDataSQLiteDllFile], Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    18     18   Installer.exe: #18: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\11.0", writable = False
    19     19   Installer.exe: #19: RegistryHelper.GetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0", name = "InstallDir", defaultValue = <null>
    20     20   Installer.exe: #20: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\11.0", writable = False
    21     21   Installer.exe: #21: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0", subKeyName = "Packages", writable = True
    22     22   Installer.exe: #22: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0\Packages", subKeyName = "{dcbe6c8d-0e57-4099-a183-98ff74c64d9c}"
    23     23   Installer.exe: #23: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0\Packages\{dcbe6c8d-0e57-4099-a183-98ff74c64d9c}", name = <null>, value = "System.Data.SQLite Designer Package"
    24     24   Installer.exe: #24: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0\Packages\{dcbe6c8d-0e57-4099-a183-98ff74c64d9c}", name = "Class", value = "SQLite.Designer.SQLitePackage"
................................................................................
    49     49   Installer.exe: #49: RegistryHelper.GetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0", name = "InstallDir", defaultValue = <null>
    50     50   Installer.exe: #50: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\11.0", writable = False
    51     51   Installer.exe: #51: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0", subKeyName = "DataProviders", writable = True
    52     52   Installer.exe: #52: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0\DataProviders", subKeyName = "{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}"
    53     53   Installer.exe: #53: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = <null>, value = ".NET Framework Data Provider for SQLite"
    54     54   Installer.exe: #54: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = "Assembly", value = "SQLite.Designer, Version=[file version $sqliteDesignerDllFile], Culture=neutral, PublicKeyToken=db937bc2d44ff139"
    55     55   Installer.exe: #55: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = "AssociatedSource", value = "{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c71}"
    56         -Installer.exe: #56: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = "InvariantName", value = "System.Data.SQLite"
           56  +Installer.exe: #56: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = "InvariantName", value = "System.Data.SQLite.EF6"
    57     57   Installer.exe: #57: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = "Technology", value = "{77ab9a9d-78b9-4ba7-91ac-873f5338f1d2}"
    58     58   Installer.exe: #58: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = "CodeBase", value = "[file nativename [file join [getBuildDirectory] SQLite.Designer.dll]]"
    59     59   Installer.exe: #59: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = "FactoryService", value = "{dcbe6c8d-0e57-4099-a183-98ff74c64d9d}"
    60     60   Installer.exe: #60: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataConnectionUIControl"
    61     61   Installer.exe: #61: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataConnectionProperties"
    62     62   Installer.exe: #62: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataConnectionSupport"
    63     63   Installer.exe: #63: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataObjectSupport"

Changes to Tests/data/Installer_Test_Vs2013.log.

     1      1   Installer.exe: #1: Configuration.Process: No actual changes will be made to this system because "what-if" mode is enabled.
     2         -Installer.exe: #2: Installer.Main: GacInstall: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.dll]]"
     3         -Installer.exe: #3: Installer.Main: GacInstall: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.Linq.dll]]"
     4         -Installer.exe: #4: Configuration.IsEf6AssemblyAvailable: Entity Framework 6 assembly was resolved.
            2  +Installer.exe: #2: Configuration.IsSystemEf6AssemblyAvailable: Entity Framework 6 assembly was resolved.
            3  +Installer.exe: #3: Installer.Main: GacInstall: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.dll]]"
            4  +Installer.exe: #4: Installer.Main: GacInstall: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.Linq.dll]]"
     5      5   Installer.exe: #5: Installer.Main: GacInstall: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.EF6.dll]]"
     6      6   Installer.exe: #6: Installer.Main: GacInstall: assemblyPath = "[file nativename [file join [getBuildDirectory] SQLite.Designer.dll]]"
     7      7   Installer.exe: #7: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework\v4.5.1", writable = False
     8      8   Installer.exe: #8: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework\v4.5.1\AssemblyFoldersEx", writable = True
     9      9   Installer.exe: #9: RegistryHelper.DeleteSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\.NETFramework\v4.5.1\AssemblyFoldersEx", subKeyName = "SQLite"
    10     10   Installer.exe: #10: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework\v4.5.1\AssemblyFoldersEx", writable = True
    11     11   Installer.exe: #11: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\.NETFramework\v4.5.1\AssemblyFoldersEx", subKeyName = "System.Data.SQLite"
    12     12   Installer.exe: #12: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\.NETFramework\v4.5.1\AssemblyFoldersEx\System.Data.SQLite", name = <null>, value = "[file nativename [getBuildDirectory]]"
    13     13   Installer.exe: #13: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework\v4.0.30319", writable = False
    14     14   Installer.exe: #14: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework", writable = False
    15     15   Installer.exe: #15: RegistryHelper.GetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\.NETFramework", name = "InstallRoot", defaultValue = <null>
    16     16   Installer.exe: #16: Installer.RemoveDbProviderFactory: addElement = <null>, removeElement = <null>
    17         -Installer.exe: #17: Installer.AddDbProviderFactory: addElement = <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=[file version $systemDataSQLiteDllFile], Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
           17  +Installer.exe: #17: Installer.AddDbProviderFactory: addElement = <add name="SQLite Data Provider" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6, Version=[file version $systemDataSQLiteDllFile], Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    18     18   Installer.exe: #18: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\12.0", writable = False
    19     19   Installer.exe: #19: RegistryHelper.GetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0", name = "InstallDir", defaultValue = <null>
    20     20   Installer.exe: #20: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\12.0", writable = False
    21     21   Installer.exe: #21: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0", subKeyName = "Packages", writable = True
    22     22   Installer.exe: #22: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0\Packages", subKeyName = "{dcbe6c8d-0e57-4099-a183-98ff74c64d9c}"
    23     23   Installer.exe: #23: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0\Packages\{dcbe6c8d-0e57-4099-a183-98ff74c64d9c}", name = <null>, value = "System.Data.SQLite Designer Package"
    24     24   Installer.exe: #24: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0\Packages\{dcbe6c8d-0e57-4099-a183-98ff74c64d9c}", name = "Class", value = "SQLite.Designer.SQLitePackage"
................................................................................
    49     49   Installer.exe: #49: RegistryHelper.GetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0", name = "InstallDir", defaultValue = <null>
    50     50   Installer.exe: #50: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\12.0", writable = False
    51     51   Installer.exe: #51: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0", subKeyName = "DataProviders", writable = True
    52     52   Installer.exe: #52: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0\DataProviders", subKeyName = "{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}"
    53     53   Installer.exe: #53: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = <null>, value = ".NET Framework Data Provider for SQLite"
    54     54   Installer.exe: #54: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = "Assembly", value = "SQLite.Designer, Version=[file version $sqliteDesignerDllFile], Culture=neutral, PublicKeyToken=db937bc2d44ff139"
    55     55   Installer.exe: #55: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = "AssociatedSource", value = "{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c71}"
    56         -Installer.exe: #56: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = "InvariantName", value = "System.Data.SQLite"
           56  +Installer.exe: #56: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = "InvariantName", value = "System.Data.SQLite.EF6"
    57     57   Installer.exe: #57: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = "Technology", value = "{77ab9a9d-78b9-4ba7-91ac-873f5338f1d2}"
    58     58   Installer.exe: #58: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = "CodeBase", value = "[file nativename [file join [getBuildDirectory] SQLite.Designer.dll]]"
    59     59   Installer.exe: #59: RegistryHelper.SetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", name = "FactoryService", value = "{dcbe6c8d-0e57-4099-a183-98ff74c64d9d}"
    60     60   Installer.exe: #60: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataConnectionUIControl"
    61     61   Installer.exe: #61: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataConnectionProperties"
    62     62   Installer.exe: #62: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataConnectionSupport"
    63     63   Installer.exe: #63: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataObjectSupport"

Changes to Tests/data/Uninstaller_Test_Vs2010.log.

     1      1   Installer.exe: #1: Configuration.Process: No actual changes will be made to this system because "what-if" mode is enabled.
     2         -Installer.exe: #2: Installer.Main: GacRemove: assemblyPath = "[file nativename [file join [getBuildDirectory] SQLite.Designer.dll]]"
     3         -Installer.exe: #3: Configuration.IsEf6AssemblyAvailable: Entity Framework 6 assembly was resolved.
            2  +Installer.exe: #2: Configuration.IsSystemEf6AssemblyAvailable: Entity Framework 6 assembly was resolved.
            3  +Installer.exe: #3: Installer.Main: GacRemove: assemblyPath = "[file nativename [file join [getBuildDirectory] SQLite.Designer.dll]]"
     4      4   Installer.exe: #4: Installer.Main: GacRemove: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.EF6.dll]]"
     5      5   Installer.exe: #5: Installer.Main: GacRemove: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.Linq.dll]]"
     6      6   Installer.exe: #6: Installer.Main: GacRemove: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.dll]]"
     7      7   Installer.exe: #7: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework\v4.0.30319", writable = False
     8      8   Installer.exe: #8: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework\v4.0.30319\AssemblyFoldersEx", writable = True
     9      9   Installer.exe: #9: RegistryHelper.DeleteSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\.NETFramework\v4.0.30319\AssemblyFoldersEx", subKeyName = "System.Data.SQLite"
    10     10   Installer.exe: #10: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework\v4.0.30319", writable = False

Changes to Tests/data/Uninstaller_Test_Vs2012.log.

     1      1   Installer.exe: #1: Configuration.Process: No actual changes will be made to this system because "what-if" mode is enabled.
     2         -Installer.exe: #2: Installer.Main: GacRemove: assemblyPath = "[file nativename [file join [getBuildDirectory] SQLite.Designer.dll]]"
     3         -Installer.exe: #3: Configuration.IsEf6AssemblyAvailable: Entity Framework 6 assembly was resolved.
            2  +Installer.exe: #2: Configuration.IsSystemEf6AssemblyAvailable: Entity Framework 6 assembly was resolved.
            3  +Installer.exe: #3: Installer.Main: GacRemove: assemblyPath = "[file nativename [file join [getBuildDirectory] SQLite.Designer.dll]]"
     4      4   Installer.exe: #4: Installer.Main: GacRemove: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.EF6.dll]]"
     5      5   Installer.exe: #5: Installer.Main: GacRemove: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.Linq.dll]]"
     6      6   Installer.exe: #6: Installer.Main: GacRemove: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.dll]]"
     7      7   Installer.exe: #7: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework\v4.5.50709", writable = False
     8      8   Installer.exe: #8: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework\v4.5.50709\AssemblyFoldersEx", writable = True
     9      9   Installer.exe: #9: RegistryHelper.DeleteSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\.NETFramework\v4.5.50709\AssemblyFoldersEx", subKeyName = "System.Data.SQLite"
    10     10   Installer.exe: #10: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework\v4.0.30319", writable = False

Changes to Tests/data/Uninstaller_Test_Vs2013.log.

     1      1   Installer.exe: #1: Configuration.Process: No actual changes will be made to this system because "what-if" mode is enabled.
     2         -Installer.exe: #2: Installer.Main: GacRemove: assemblyPath = "[file nativename [file join [getBuildDirectory] SQLite.Designer.dll]]"
     3         -Installer.exe: #3: Configuration.IsEf6AssemblyAvailable: Entity Framework 6 assembly was resolved.
            2  +Installer.exe: #2: Configuration.IsSystemEf6AssemblyAvailable: Entity Framework 6 assembly was resolved.
            3  +Installer.exe: #3: Installer.Main: GacRemove: assemblyPath = "[file nativename [file join [getBuildDirectory] SQLite.Designer.dll]]"
     4      4   Installer.exe: #4: Installer.Main: GacRemove: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.EF6.dll]]"
     5      5   Installer.exe: #5: Installer.Main: GacRemove: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.Linq.dll]]"
     6      6   Installer.exe: #6: Installer.Main: GacRemove: assemblyPath = "[file nativename [file join [getBuildDirectory] System.Data.SQLite.dll]]"
     7      7   Installer.exe: #7: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework\v4.5.1", writable = False
     8      8   Installer.exe: #8: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework\v4.5.1\AssemblyFoldersEx", writable = True
     9      9   Installer.exe: #9: RegistryHelper.DeleteSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\.NETFramework\v4.5.1\AssemblyFoldersEx", subKeyName = "System.Data.SQLite"
    10     10   Installer.exe: #10: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\.NETFramework\v4.0.30319", writable = False

Changes to readme.htm.

   210    210   
   211    211   <p>
   212    212       <b>1.0.94.0 - August XX, 2014 <font color="red">(release scheduled)</font></b>
   213    213   </p>
   214    214   <ul>
   215    215       <li>Updated to <a href="http://www.nuget.org/packages/EntityFramework/6.1.1">Entity Framework 6.1.1</a>.</li>
   216    216       <li>Add RefreshFlags method to the SQLiteDataReader class to forcibly refresh its connection flags.</li>
          217  +    <li>Improve automatic detection and handling of the Entity Framework 6 assembly by the design-time components installer. Pursuant to [e634e330a6].&nbsp;<b>** Potentially Incompatible Change **</b></li>
   217    218       <li>Improve SQLiteDataReader performance slightly by caching the connection flags.&nbsp;<b>** Potentially Incompatible Change **</b></li>
   218    219       <li>Minimize usage of the &quot;Use_SQLiteConvert_DefaultDbType&quot; and &quot;Use_SQLiteConvert_DefaultTypeName&quot; settings. Fix for [58ed318f2f].&nbsp;<b>** Potentially Incompatible Change **</b></li>
   219    220   </ul>
   220    221   <p>
   221    222       <b>1.0.93.0 - June 23, 2014</b>
   222    223   </p>
   223    224   <ul>

Changes to tools/install/Installer.cs.

    36     36           string category /* in */
    37     37       );
    38     38   
    39     39       ///////////////////////////////////////////////////////////////////////////
    40     40   
    41     41       internal delegate bool FrameworkConfigCallback(
    42     42           string fileName,           /* in */
    43         -        string invariant,          /* in */
           43  +        string invariantName,      /* in */
    44     44           string name,               /* in */
    45     45           string description,        /* in */
    46     46           string typeName,           /* in */
    47     47           AssemblyName assemblyName, /* in */
    48     48           string directory,          /* in */
    49     49           object clientData,         /* in */
    50     50           bool perUser,              /* in */
................................................................................
  1822   1822                   // do nothing.
  1823   1823               }
  1824   1824               #endregion
  1825   1825   
  1826   1826               ///////////////////////////////////////////////////////////////////
  1827   1827   
  1828   1828               #region Public Properties
  1829         -            private AssemblyName assemblyName;
  1830         -            public AssemblyName AssemblyName
         1829  +            private string invariantName;
         1830  +            public string InvariantName
  1831   1831               {
  1832         -                get { return assemblyName; }
  1833         -                set { assemblyName = value; }
         1832  +                get { return invariantName; }
         1833  +                set { invariantName = value; }
         1834  +            }
         1835  +
         1836  +            ///////////////////////////////////////////////////////////////////
         1837  +
         1838  +            private string factoryTypeName;
         1839  +            public string FactoryTypeName
         1840  +            {
         1841  +                get { return factoryTypeName; }
         1842  +                set { factoryTypeName = value; }
         1843  +            }
         1844  +
         1845  +            ///////////////////////////////////////////////////////////////////
         1846  +
         1847  +            private AssemblyName providerAssemblyName;
         1848  +            public AssemblyName ProviderAssemblyName
         1849  +            {
         1850  +                get { return providerAssemblyName; }
         1851  +                set { providerAssemblyName = value; }
         1852  +            }
         1853  +
         1854  +            ///////////////////////////////////////////////////////////////////
         1855  +
         1856  +            private AssemblyName designerAssemblyName;
         1857  +            public AssemblyName DesignerAssemblyName
         1858  +            {
         1859  +                get { return designerAssemblyName; }
         1860  +                set { designerAssemblyName = value; }
  1834   1861               }
  1835   1862   
  1836   1863               ///////////////////////////////////////////////////////////////////
  1837   1864   
  1838   1865               private bool globalAssemblyCache;
  1839   1866               public bool GlobalAssemblyCache
  1840   1867               {
................................................................................
  1900   1927               private const char AltSwitch = '/';
  1901   1928   
  1902   1929               ///////////////////////////////////////////////////////////////////
  1903   1930   
  1904   1931               private static readonly char[] SwitchChars = {
  1905   1932                   Switch, AltSwitch
  1906   1933               };
         1934  +
         1935  +            ///////////////////////////////////////////////////////////////////
         1936  +
         1937  +            private const string InvariantName = "System.Data.SQLite";
         1938  +            private const string Ef6InvariantName = "System.Data.SQLite.EF6";
         1939  +
         1940  +            ///////////////////////////////////////////////////////////////////
         1941  +
         1942  +            private const string FactoryTypeName =
         1943  +                "System.Data.SQLite.SQLiteFactory";
         1944  +
         1945  +            private const string Ef6FactoryTypeName =
         1946  +                "System.Data.SQLite.EF6.SQLiteProviderFactory";
         1947  +            #endregion
         1948  +
         1949  +            ///////////////////////////////////////////////////////////////////
         1950  +
         1951  +            #region Private Static Data
         1952  +            private static Assembly systemEf6Assembly;
         1953  +            #endregion
         1954  +
         1955  +            ///////////////////////////////////////////////////////////////////
         1956  +
         1957  +            #region Private Data
         1958  +            private AssemblyName coreAssemblyName;
         1959  +            private AssemblyName linqAssemblyName;
         1960  +            private AssemblyName ef6AssemblyName;
         1961  +            private AssemblyName designerAssemblyName;
  1907   1962               #endregion
  1908   1963   
  1909   1964               ///////////////////////////////////////////////////////////////////
  1910   1965   
  1911   1966               #region Private Constructors
  1912   1967               private Configuration(
  1913   1968                   Assembly assembly,
................................................................................
  2121   2176                   }
  2122   2177   
  2123   2178                   return null;
  2124   2179               }
  2125   2180   
  2126   2181               ///////////////////////////////////////////////////////////////////
  2127   2182   
  2128         -            private static bool IsEf6AssemblyAvailable()
         2183  +            private static bool IsSystemEf6AssemblyAvailable()
  2129   2184               {
         2185  +                if (systemEf6Assembly != null)
         2186  +                    return true;
         2187  +
  2130   2188                   try
  2131   2189                   {
  2132         -                    Assembly assembly = Assembly.ReflectionOnlyLoad(
  2133         -                        Ef6AssemblyName);
         2190  +                    systemEf6Assembly = Assembly.ReflectionOnlyLoad(
         2191  +                        SystemEf6AssemblyName);
  2134   2192   
  2135         -                    if (assembly != null)
         2193  +                    if (systemEf6Assembly != null)
  2136   2194                       {
  2137   2195                           TraceOps.DebugAndTrace(TracePriority.Highest,
  2138   2196                               debugCallback, traceCallback,
  2139   2197                               "Entity Framework 6 assembly was resolved.",
  2140   2198                               traceCategory);
  2141   2199   
  2142   2200                           return true;
................................................................................
  3330   3388                   //       Studio 2008, this must return zero.  Also, if
  3331   3389                   //       the EF6 core assembly is unavailable, this must
  3332   3390                   //       return zero.
  3333   3391                   //
  3334   3392                   if (noNetFx40 && noNetFx45 && noNetFx451)
  3335   3393                       return false;
  3336   3394   
  3337         -                return IsEf6AssemblyAvailable();
         3395  +                return IsSystemEf6AssemblyAvailable();
         3396  +            }
         3397  +
         3398  +            ///////////////////////////////////////////////////////////////////
         3399  +
         3400  +            public AssemblyName GetCoreAssemblyName() /* REQUIRED */
         3401  +            {
         3402  +                if (coreAssemblyName == null)
         3403  +                {
         3404  +                    coreAssemblyName = AssemblyName.GetAssemblyName(
         3405  +                        CoreFileName); /* throw */
         3406  +                }
         3407  +
         3408  +                return coreAssemblyName;
         3409  +            }
         3410  +
         3411  +            ///////////////////////////////////////////////////////////////////
         3412  +
         3413  +            public AssemblyName GetLinqAssemblyName() /* OPTIONAL */
         3414  +            {
         3415  +                if (IsLinqSupported() && (linqAssemblyName == null))
         3416  +                {
         3417  +                    linqAssemblyName = AssemblyName.GetAssemblyName(
         3418  +                        LinqFileName); /* throw */
         3419  +                }
         3420  +
         3421  +                return linqAssemblyName;
         3422  +            }
         3423  +
         3424  +            ///////////////////////////////////////////////////////////////////
         3425  +
         3426  +            public AssemblyName GetEf6AssemblyName() /* OPTIONAL */
         3427  +            {
         3428  +                if (IsEf6Supported() && (ef6AssemblyName == null))
         3429  +                {
         3430  +                    ef6AssemblyName = AssemblyName.GetAssemblyName(
         3431  +                        Ef6FileName); /* throw */
         3432  +                }
         3433  +
         3434  +                return ef6AssemblyName;
         3435  +            }
         3436  +
         3437  +            ///////////////////////////////////////////////////////////////////
         3438  +
         3439  +            public AssemblyName GetDesignerAssemblyName() /* REQUIRED */
         3440  +            {
         3441  +                if (designerAssemblyName == null)
         3442  +                {
         3443  +                    designerAssemblyName = AssemblyName.GetAssemblyName(
         3444  +                        DesignerFileName); /* throw */
         3445  +                }
         3446  +
         3447  +                return designerAssemblyName;
         3448  +            }
         3449  +
         3450  +            ///////////////////////////////////////////////////////////////////
         3451  +
         3452  +            public string GetInvariantName()
         3453  +            {
         3454  +                return IsEf6Supported() ? Ef6InvariantName : InvariantName;
         3455  +            }
         3456  +
         3457  +            ///////////////////////////////////////////////////////////////////
         3458  +
         3459  +            public string GetFactoryTypeName()
         3460  +            {
         3461  +                return IsEf6Supported() ? Ef6FactoryTypeName : FactoryTypeName;
         3462  +            }
         3463  +
         3464  +            ///////////////////////////////////////////////////////////////////
         3465  +
         3466  +            public AssemblyName GetProviderAssemblyName()
         3467  +            {
         3468  +                return IsEf6Supported() ?
         3469  +                    GetEf6AssemblyName() : GetCoreAssemblyName(); /* throw */
  3338   3470               }
  3339   3471   
  3340   3472               ///////////////////////////////////////////////////////////////////
  3341   3473   
  3342   3474               public void Dump(
  3343   3475                   TraceCallback traceCallback
  3344   3476                   )
................................................................................
  3967   4099           private const string CoreFileName = "System.Data.SQLite.dll";
  3968   4100           private const string LinqFileName = "System.Data.SQLite.Linq.dll";
  3969   4101           private const string Ef6FileName = "System.Data.SQLite.EF6.dll";
  3970   4102           private const string DesignerFileName = "SQLite.Designer.dll";
  3971   4103           private const string ProviderName = "SQLite Data Provider";
  3972   4104           private const string ProjectName = "System.Data.SQLite";
  3973   4105           private const string LegacyProjectName = "SQLite";
  3974         -        private const string InvariantName = "System.Data.SQLite";
  3975         -        private const string FactoryTypeName = "System.Data.SQLite.SQLiteFactory";
  3976         -        private const string Description = ".NET Framework Data Provider for SQLite";
         4106  +
         4107  +        ///////////////////////////////////////////////////////////////////////
         4108  +
         4109  +        private const string Description =
         4110  +            ".NET Framework Data Provider for SQLite";
  3977   4111   
  3978   4112           ///////////////////////////////////////////////////////////////////////
  3979   4113   
  3980   4114           private const string CLRv2ImageRuntimeVersion = "v2.0.50727";
  3981   4115           private const string CLRv4ImageRuntimeVersion = "v4.0.30319";
  3982   4116   
  3983   4117           ///////////////////////////////////////////////////////////////////////
  3984   4118   
  3985         -        private const string Ef6AssemblyName = "EntityFramework, " +
         4119  +        private const string SystemEf6AssemblyName = "EntityFramework, " +
  3986   4120               "Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
  3987   4121   
  3988   4122           ///////////////////////////////////////////////////////////////////////
  3989   4123   
  3990   4124           private const string NameAndValueFormat = "{0}: {1}";
  3991   4125           private const string LogFileSuffix = ".log";
  3992   4126   
................................................................................
  4334   4468   
  4335   4469           private static string GetImageRuntimeVersion(
  4336   4470               string fileName
  4337   4471               )
  4338   4472           {
  4339   4473               try
  4340   4474               {
  4341         -                Assembly assembly =
  4342         -                    Assembly.ReflectionOnlyLoadFrom(fileName); /* throw */
         4475  +                Assembly assembly = Assembly.ReflectionOnlyLoadFrom(
         4476  +                    fileName); /* throw */
  4343   4477   
  4344   4478                   if (assembly != null)
  4345   4479                       return assembly.ImageRuntimeVersion;
  4346   4480               }
  4347   4481               catch
  4348   4482               {
  4349   4483                   // do nothing.
................................................................................
  4573   4707   
  4574   4708           [MethodImpl(MethodImplOptions.NoInlining)]
  4575   4709           private static bool ForEachFrameworkConfig(
  4576   4710               MockRegistry registry,
  4577   4711               FrameworkList frameworkList,
  4578   4712               FrameworkConfigCallback callback,
  4579   4713               string version, /* NOTE: Optional. */
  4580         -            string invariant,
         4714  +            string invariantName,
  4581   4715               string name,
  4582   4716               string description,
  4583   4717               string typeName,
  4584   4718               AssemblyName assemblyName,
  4585   4719               object clientData,
  4586   4720               bool perUser,
  4587   4721               bool wow64,
................................................................................
  4752   4886   
  4753   4887                           continue;
  4754   4888                       }
  4755   4889   
  4756   4890                       bool localSaved = false;
  4757   4891   
  4758   4892                       if (!callback(
  4759         -                            fileName, invariant, name, description, typeName,
  4760         -                            assemblyName, installDirectory, clientData,
  4761         -                            perUser, wow64, throwOnMissing, whatIf, verbose,
  4762         -                            ref localSaved, ref error))
         4893  +                            fileName, invariantName, name, description,
         4894  +                            typeName, assemblyName, installDirectory,
         4895  +                            clientData, perUser, wow64, throwOnMissing,
         4896  +                            whatIf, verbose, ref localSaved, ref error))
  4763   4897                       {
  4764   4898                           return false;
  4765   4899                       }
  4766   4900                       else
  4767   4901                       {
  4768   4902                           if (localSaved && !saved)
  4769   4903                               saved = true;
................................................................................
  5099   5233   
  5100   5234           ///////////////////////////////////////////////////////////////////////
  5101   5235   
  5102   5236           #region Configuration File Handling
  5103   5237           [MethodImpl(MethodImplOptions.NoInlining)]
  5104   5238           private static bool AddDbProviderFactory(
  5105   5239               string fileName,
  5106         -            string invariant,
         5240  +            string invariantName,
  5107   5241               string name,
  5108   5242               string description,
  5109   5243               string typeName,
  5110   5244               AssemblyName assemblyName,
  5111   5245               bool whatIf,
  5112   5246               bool verbose,
  5113   5247               ref bool saved,
................................................................................
  5117   5251               bool dirty = false;
  5118   5252               XmlDocument document = new XmlDocument();
  5119   5253   
  5120   5254               document.PreserveWhitespace = true;
  5121   5255               document.Load(fileName);
  5122   5256   
  5123   5257               XmlElement addElement = document.SelectSingleNode(
  5124         -                String.Format(XPathForAddElement, invariant)) as XmlElement;
         5258  +                String.Format(XPathForAddElement, invariantName)) as XmlElement;
  5125   5259   
  5126   5260               if (addElement == null)
  5127   5261               {
  5128   5262                   string[] elementNames = {
  5129   5263                       "system.data", "DbProviderFactories"
  5130   5264                   };
  5131   5265   
................................................................................
  5160   5294                       name, StringComparison.Ordinal))
  5161   5295               {
  5162   5296                   addElement.SetAttribute("name", name);
  5163   5297                   dirty = true;
  5164   5298               }
  5165   5299   
  5166   5300               if (!String.Equals(addElement.GetAttribute("invariant"),
  5167         -                    invariant, StringComparison.Ordinal))
         5301  +                    invariantName, StringComparison.Ordinal))
  5168   5302               {
  5169         -                addElement.SetAttribute("invariant", invariant);
         5303  +                addElement.SetAttribute("invariant", invariantName);
  5170   5304                   dirty = true;
  5171   5305               }
  5172   5306   
  5173   5307               if (!String.Equals(addElement.GetAttribute("description"),
  5174   5308                       description, StringComparison.Ordinal))
  5175   5309               {
  5176   5310                   addElement.SetAttribute("description", description);
................................................................................
  5207   5341           }
  5208   5342   
  5209   5343           ///////////////////////////////////////////////////////////////////////
  5210   5344   
  5211   5345           [MethodImpl(MethodImplOptions.NoInlining)]
  5212   5346           private static bool RemoveDbProviderFactory(
  5213   5347               string fileName,
  5214         -            string invariant,
         5348  +            string invariantName,
  5215   5349               bool whatIf,
  5216   5350               bool verbose,
  5217   5351               ref bool saved,
  5218   5352               ref string error
  5219   5353               )
  5220   5354           {
  5221   5355               bool dirty = false;
  5222   5356               XmlDocument document = new XmlDocument();
  5223   5357   
  5224   5358               document.PreserveWhitespace = true;
  5225   5359               document.Load(fileName);
  5226   5360   
  5227   5361               XmlElement addElement = document.SelectSingleNode(
  5228         -                String.Format(XPathForAddElement, invariant)) as XmlElement;
         5362  +                String.Format(XPathForAddElement, invariantName)) as XmlElement;
  5229   5363   
  5230   5364               if (addElement != null)
  5231   5365               {
  5232   5366                   addElement.ParentNode.RemoveChild(addElement);
  5233   5367                   dirty = true;
  5234   5368               }
  5235   5369   
  5236   5370               XmlElement removeElement = document.SelectSingleNode(
  5237         -                String.Format(XPathForRemoveElement, invariant)) as XmlElement;
         5371  +                String.Format(XPathForRemoveElement, invariantName)) as XmlElement;
  5238   5372   
  5239   5373               if (removeElement != null)
  5240   5374               {
  5241   5375                   removeElement.ParentNode.RemoveChild(removeElement);
  5242   5376                   dirty = true;
  5243   5377               }
  5244   5378   
................................................................................
  5262   5396               return true;
  5263   5397           }
  5264   5398   
  5265   5399           ///////////////////////////////////////////////////////////////////////
  5266   5400   
  5267   5401           private static bool ProcessDbProviderFactory(
  5268   5402               string fileName,
  5269         -            string invariant,
         5403  +            string invariantName,
  5270   5404               string name,
  5271   5405               string description,
  5272   5406               string typeName,
  5273   5407               AssemblyName assemblyName,
  5274   5408               string directory,
  5275   5409               object clientData,
  5276   5410               bool perUser,
................................................................................
  5289   5423                   error = "invalid framework config callback data";
  5290   5424                   return false;
  5291   5425               }
  5292   5426   
  5293   5427               if (pair.Y)
  5294   5428               {
  5295   5429                   return RemoveDbProviderFactory(
  5296         -                    fileName, invariant, whatIf, verbose, ref saved,
         5430  +                    fileName, invariantName, whatIf, verbose, ref saved,
  5297   5431                       ref error) &&
  5298   5432                   AddDbProviderFactory(
  5299         -                    fileName, invariant, name, description, typeName,
         5433  +                    fileName, invariantName, name, description, typeName,
  5300   5434                       assemblyName, whatIf, verbose, ref saved, ref error);
  5301   5435               }
  5302   5436               else
  5303   5437               {
  5304   5438                   return RemoveDbProviderFactory(
  5305         -                    fileName, invariant, whatIf, verbose, ref saved,
         5439  +                    fileName, invariantName, whatIf, verbose, ref saved,
  5306   5440                       ref error);
  5307   5441               }
  5308   5442           }
  5309   5443           #endregion
  5310   5444   
  5311   5445           ///////////////////////////////////////////////////////////////////////
  5312   5446   
................................................................................
  5774   5908                           //       and all the assemblies it refers to are being
  5775   5909                           //       placed into the global assembly cache.
  5776   5910                           //
  5777   5911                           if (package.GlobalAssemblyCache)
  5778   5912                           {
  5779   5913                               RegistryHelper.SetValue(
  5780   5914                                   dataProviderKey, "Assembly",
  5781         -                                package.AssemblyName.ToString(),
         5915  +                                package.DesignerAssemblyName.ToString(),
  5782   5916                                   whatIf, verbose);
  5783   5917                           }
  5784   5918   
  5785   5919                           //
  5786   5920                           // NOTE: This value is new as of 1.0.83.0.
  5787   5921                           //
  5788   5922                           RegistryHelper.SetValue(
  5789   5923                               dataProviderKey, "AssociatedSource",
  5790   5924                               package.DataSourceId.ToString(VsIdFormat),
  5791   5925                               whatIf, verbose);
  5792   5926   
  5793   5927                           RegistryHelper.SetValue(
  5794         -                            dataProviderKey, "InvariantName", InvariantName,
  5795         -                            whatIf, verbose);
         5928  +                            dataProviderKey, "InvariantName",
         5929  +                            package.InvariantName, whatIf, verbose);
  5796   5930   
  5797   5931                           RegistryHelper.SetValue(
  5798   5932                               dataProviderKey, "Technology",
  5799   5933                               package.AdoNetTechnologyId.ToString(VsIdFormat),
  5800   5934                               whatIf, verbose);
  5801   5935   
  5802   5936                           RegistryHelper.SetValue(
................................................................................
  5929   6063           }
  5930   6064           #endregion
  5931   6065   
  5932   6066           ///////////////////////////////////////////////////////////////////////
  5933   6067   
  5934   6068           #region Visual Studio Package Handling
  5935   6069           private static void InitializeVsPackage(
  5936         -            AssemblyName assemblyName,
         6070  +            string invariantName,
         6071  +            string factoryTypeName,
         6072  +            AssemblyName providerAssemblyName,
         6073  +            AssemblyName designerAssemblyName,
  5937   6074               bool globalAssemblyCache,
  5938   6075               ref Package package
  5939   6076               )
  5940   6077           {
  5941   6078               if (package == null)
  5942   6079               {
  5943   6080                   package = new Package();
  5944   6081   
  5945         -                package.AssemblyName = assemblyName;
         6082  +                package.InvariantName = invariantName;
         6083  +                package.FactoryTypeName = factoryTypeName;
         6084  +                package.ProviderAssemblyName = providerAssemblyName;
         6085  +                package.DesignerAssemblyName = designerAssemblyName;
  5946   6086                   package.GlobalAssemblyCache = globalAssemblyCache;
  5947   6087   
  5948   6088                   package.AdoNetTechnologyId = new Guid(
  5949   6089                       "77AB9A9D-78B9-4BA7-91AC-873F5338F1D2");
  5950   6090   
  5951   6091                   package.PackageId = new Guid(
  5952   6092                       "DCBE6C8D-0E57-4099-A183-98FF74C64D9C");
................................................................................
  6546   6686                   ///////////////////////////////////////////////////////////////
  6547   6687   
  6548   6688                   using (MockRegistry registry = new MockRegistry(
  6549   6689                           configuration.WhatIf, false, false))
  6550   6690                   {
  6551   6691                       #region Core Assembly Name Check
  6552   6692                       //
  6553         -                    // NOTE: Do this first, before making any changes to the
  6554         -                    //       system, because it will throw an exception if the
  6555         -                    //       file name does not represent a valid managed
  6556         -                    //       assembly.
         6693  +                    // NOTE: Query all the assembly names first, before making
         6694  +                    //       any changes to the system, because this will throw
         6695  +                    //       an exception if any of the file names do not point
         6696  +                    //       to a valid managed assembly.  The values of these
         6697  +                    //       local variables are never used after this point;
         6698  +                    //       however, do not remove them.
  6557   6699                       //
  6558   6700                       AssemblyName coreAssemblyName =
  6559         -                        AssemblyName.GetAssemblyName(
  6560         -                            configuration.CoreFileName); /* throw */
         6701  +                        configuration.GetCoreAssemblyName(); /* NOT USED */
         6702  +
         6703  +                    AssemblyName linqAssemblyName =
         6704  +                        configuration.GetLinqAssemblyName(); /* NOT USED */
         6705  +
         6706  +                    AssemblyName ef6AssemblyName =
         6707  +                        configuration.GetEf6AssemblyName(); /* NOT USED */
  6561   6708   
  6562   6709                       AssemblyName designerAssemblyName =
  6563         -                        AssemblyName.GetAssemblyName(
  6564         -                            configuration.DesignerFileName); /* throw */
         6710  +                        configuration.GetDesignerAssemblyName(); /* NOT USED */
  6565   6711                       #endregion
  6566   6712   
  6567   6713                       ///////////////////////////////////////////////////////////
  6568   6714   
  6569   6715                       #region System Directory Check
  6570   6716                       //
  6571   6717                       // NOTE: Getting the system directory value here serves
................................................................................
  6594   6740                       #region .NET Framework / Visual Studio Data
  6595   6741                       Package package = null;
  6596   6742                       FrameworkList frameworkList = null;
  6597   6743                       VsList vsList = null;
  6598   6744   
  6599   6745                       ///////////////////////////////////////////////////////////
  6600   6746   
  6601         -                    InitializeVsPackage(designerAssemblyName,
         6747  +                    InitializeVsPackage(configuration.GetInvariantName(),
         6748  +                        configuration.GetFactoryTypeName(),
         6749  +                        configuration.GetProviderAssemblyName(),
         6750  +                        configuration.GetDesignerAssemblyName(),
  6602   6751                           configuration.HasFlags(
  6603   6752                               InstallFlags.GlobalAssemblyCache, true) &&
  6604   6753                           configuration.HasFlags(
  6605   6754                               InstallFlags.VsPackageGlobalAssemblyCache, true),
  6606   6755                           ref package);
  6607   6756   
  6608   6757                       ///////////////////////////////////////////////////////////
................................................................................
  6779   6928                       if (configuration.HasFlags(
  6780   6929                               InstallFlags.DbProviderFactory, true))
  6781   6930                       {
  6782   6931                           bool saved = false;
  6783   6932   
  6784   6933                           if (!ForEachFrameworkConfig(registry,
  6785   6934                                   frameworkList, ProcessDbProviderFactory,
  6786         -                                configuration.ConfigVersion, InvariantName,
  6787         -                                ProviderName, Description, FactoryTypeName,
  6788         -                                coreAssemblyName, directoryData,
         6935  +                                configuration.ConfigVersion,
         6936  +                                package.InvariantName, ProviderName,
         6937  +                                Description, package.FactoryTypeName,
         6938  +                                package.ProviderAssemblyName, directoryData,
  6789   6939                                   configuration.PerUser,
  6790   6940                                   NetFxIs32BitOnly || configuration.Wow64,
  6791   6941                                   configuration.ThrowOnMissing,
  6792   6942                                   configuration.WhatIf, configuration.Verbose,
  6793   6943                                   ref saved, ref error))
  6794   6944                           {
  6795   6945                               TraceOps.ShowMessage(TracePriority.Highest,

Changes to www/news.wiki.

     4      4   
     5      5   <p>
     6      6       <b>1.0.94.0 - August XX, 2014</b>
     7      7   </p>
     8      8   <ul>
     9      9       <li>Updated to <a href="http://www.nuget.org/packages/EntityFramework/6.1.1">Entity Framework 6.1.1</a>.</li>
    10     10       <li>Add RefreshFlags method to the SQLiteDataReader class to forcibly refresh its connection flags.</li>
           11  +    <li>Improve automatic detection and handling of the Entity Framework 6 assembly by the design-time components installer. Pursuant to [e634e330a6].&nbsp;<b>** Potentially Incompatible Change **</b></li>
    11     12       <li>Improve SQLiteDataReader performance slightly by caching the connection flags.&nbsp;<b>** Potentially Incompatible Change **</b></li>
    12     13       <li>Minimize usage of the &quot;Use_SQLiteConvert_DefaultDbType&quot; and &quot;Use_SQLiteConvert_DefaultTypeName&quot; settings. Fix for [58ed318f2f].&nbsp;<b>** Potentially Incompatible Change **</b></li>
    13     14   </ul>
    14     15   <p>
    15     16       <b>1.0.93.0 - June 23, 2014</b>
    16     17   </p>
    17     18   <ul>