Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Развертывание .NET + Entity Framework приложения


Автор: tumakovandrew 8.9.2016, 08:59
Доброго времени суток!

Разрабатываю небольшую прогу с окошками на WinForms и базой данных на основе Entity Framework 6 (Code First) и MS SQL Server. (Прога для ввода\вывода данных в\из БД и генерация Word документов)
База данных - локальная (Service-based Database с расширением файла .mdf)

Для разработки использую Windows 10 и Visual Studio Community 2015.

Для развертывания сейчас использую ClickOnce.

Раньше для того, чтобы перенести приложение на другой компьютер, достаточно было скомпилировать код и перенести все содержимое каталога Debug (ну или Release) на этот самый компьютер ну и может .NET Framework нужный доставить и все работает. Понятно, что раз используется подключение к базе данных, то необходимо и СУБД установить. 

Первая моя попытка перенести приложение на другой компьютер имела успех, т.к. это был мой другой компьютер, на котором установлена такая же Visual Studio (или может даже чуть свежее) со всем своим фаршем. При попытке поставить приложение на ПК, где Visual Studio и SQL Server и не пахло, закономерно возникает ошибка, типа "не могу подключиться к БД".

Путем различных манипуляций я выяснил, что само приложение готово запускаться на любом компьютере, лишь бы фреймворк дали подходящий, а вот та часть, что с бд работает - валится с ошибками. Установка MS SQL Server 2014\Compact 4.0 успехов не принесла. Пока пытаюсь выяснить что еще ему надо для работы, но безуспешно.
Что же ему надо, чтобы наконец-то заработать?
Неужели придется ставить тяжеленную VS на комп ради моей скромной программы? (надеюсь, что нет)

На скрине показано окно ошибки, возникающей после запуска приложения (появляется примерно через минуту после запуска) на ПК Win 7

UPD: Удалось получить информацию по ошибке

Код

System.ArgumentException: Expansion of |DataDirectory| failed while processing the connection string. Ensure that |DataDirectory| is set to a valid fully-qualified path.
   в System.Data.Entity.Core.Common.DbProviderServices.ExpandDataDirectory(String path)
   в System.Data.Entity.SqlServer.SqlProviderServices.GetOrGenerateDatabaseNameAndGetFileNames(SqlConnection sqlConnection, String& databaseName, String& dataFileName, String& logFileName)
   в System.Data.Entity.SqlServer.SqlProviderServices.DbCreateDatabase(DbConnection connection, Nullable`1 commandTimeout, StoreItemCollection storeItemCollection)
   в System.Data.Entity.Core.Common.DbProviderServices.CreateDatabase(DbConnection connection, Nullable`1 commandTimeout, StoreItemCollection storeItemCollection)
   в System.Data.Entity.Core.Objects.ObjectContext.CreateDatabase()
   в System.Data.Entity.Migrations.Utilities.DatabaseCreator.Create(DbConnection connection)
   в System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   в System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
   в System.Data.Entity.Internal.DatabaseCreator.CreateDatabase(InternalContext internalContext, Func`3 createMigrator, ObjectContext objectContext)
   в System.Data.Entity.Internal.InternalContext.CreateDatabase(ObjectContext objectContext, DatabaseExistenceState existenceState)
   в System.Data.Entity.Database.Create(DatabaseExistenceState existenceState)
   в System.Data.Entity.CreateDatabaseIfNotExists`1.InitializeDatabase(TContext context)
   в System.Data.Entity.Internal.InternalContext.<>c__DisplayClassf`1.<CreateInitializationAction>b__e()
   в System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action)
   в System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()
   в System.Data.Entity.Internal.LazyInternalContext.<InitializeDatabase>b__4(InternalContext c)
   в System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input)
   в System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action)
   в System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase()
   в System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
   в System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
   в System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
   в System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider()
   в System.Linq.Queryable.Where[TSource](IQueryable`1 source, Expression`1 predicate)
   в MetalRecieveClientControl.ContractorListForm.LoadNoJuridical(String searchstring)
   в MetalRecieveClientControl.ContractorListForm.toolStripComboBox1_SelectedIndexChanged(Object sender, EventArgs e)
   в System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
   в System.Windows.Forms.ToolStripComboBox.OnSelectedIndexChanged(EventArgs e)
   в System.Windows.Forms.ToolStripComboBox.HandleSelectedIndexChanged(Object sender, EventArgs e)
   в System.Windows.Forms.ComboBox.OnSelectedIndexChanged(EventArgs e)
   в System.Windows.Forms.ComboBox.WmReflectCommand(Message& m)
   в System.Windows.Forms.ComboBox.WndProc(Message& m)
   в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Автор: Uvs 13.10.2016, 07:18
1. Можно попробовать сделать инсталляшку и указать какие библиотеки используются.
2. Раз база локальная - логичнее расшарить папку на своем компе с exe-шником, и вперёд...

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Razvertyvaniye-NET-Entity-Framework-prilozheniya-id57d0fed166ee1865ca7dbb52#findElement_E7045_57ff0b0186c4c524a00875d1_0

Автор: Uvs 13.10.2016, 07:18
1. Можно попробовать сделать инсталляшку и указать какие библиотеки используются.
2. Раз база локальная - логичнее расшарить папку на своем компе с exe-шником, и вперёд...

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Razvertyvaniye-NET-Entity-Framework-prilozheniya-id57d0fed166ee1865ca7dbb52#findElement_E7045_57ff0b0186c4c524a00875d1_0

Автор: Uvs 13.10.2016, 07:18
1. Можно попробовать сделать инсталляшку и указать какие библиотеки используются.
2. Раз база локальная - логичнее расшарить папку на своем компе с exe-шником, и вперёд...

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Razvertyvaniye-NET-Entity-Framework-prilozheniya-id57d0fed166ee1865ca7dbb52#findElement_E7045_57ff0b0186c4c524a00875d1_0

Автор: Uvs 13.10.2016, 07:18
1. Можно попробовать сделать инсталляшку и указать какие библиотеки используются.
2. Раз база локальная - логичнее расшарить папку на своем компе с exe-шником, и вперёд...

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Razvertyvaniye-NET-Entity-Framework-prilozheniya-id57d0fed166ee1865ca7dbb52#findElement_E7045_57ff0b0186c4c524a00875d1_0

Автор: Uvs 13.10.2016, 07:18
1. Можно попробовать сделать инсталляшку и указать какие библиотеки используются.
2. Раз база локальная - логичнее расшарить папку на своем компе с exe-шником, и вперёд...

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Razvertyvaniye-NET-Entity-Framework-prilozheniya-id57d0fed166ee1865ca7dbb52#findElement_E7045_57ff0b0186c4c524a00875d1_0

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)