У меня стандартно настроен проект WPF с установленными Entity Framework 6 и SQL Server Compact 4.0. Когда я создаю свой проект, все необходимые файлы для развертывания SQL Server CE правильно копируются в папку Release
, включая System.Data.SqlServerCe.dll
.
Но запуск проекта на машине без установленного SQL Server Compact выдает System.IO.FileLoadException
.
В моей среде разработки System.Data.SqlServerCe.dll
загружается из GAC. Я нашел эту ссылку, где объясняются номера версий dll: http://technet.microsoft.com/en-us/library/gg213826.aspx
Я предположил, что версия System.Data.SqlServerCe.dll
сборки NuGet - 4.0.0.0.
Поэтому я вручную изменил ссылку System.Data.SqlServerCe.dll
в моем проекте на файл 4.0.0.1 из частной папки и скопировал System.Data.SqlServerCe.dll
4.0.0.1 на рабочий компьютер.
Я изменил app.config
вот так:
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SqlServerCe.4.0" />
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
</DbProviderFactories>
</system.data>
Теперь я получаю это исключение на машине разработки:
Указанное соединение не относится к типу SqlCeConnection.
На производственной машине я получаю System.Data.Entity.Core.EntityException
.
Есть ли шанс получить частное развертывание, работающее с NuGet и EF 6? Или надо вручную копировать все файлы в папки x86, amd64?