Вопрос:
Я создал простое приложение WPF, чтобы получить некоторый опыт работы с ним. Все, что он делает, это получить информацию из базы данных, когда пользователь нажимает кнопку.
Приложение отлично работает на моем ПК (с использованием опции публикации), но когда я попытался запустить его на своем ноутбуке и ПК моих друзей, приложение разбилось так же быстро, как нажата кнопка.
Я на 99% уверен, что он имеет какое-то отношение к Entity Framework, которое я использую для связи с базой данных (вся функция, которая запускается при нажатии кнопки, является контактом и извлекает информацию из БД).
После поиска ответов в google я выяснил, что это может иметь какое-то отношение к установке.net на ПК, или к проектам.
Однако версия.net FW такая же, как на моем ПК, так и на моем ноутбуке, и все ссылки были отмечены как локальные копии (только для тестирования!).
Что еще может вызвать такую проблему? Я действительно понятия не имею…
ОБНОВИТЬ
Используя исключения, я узнал, что я получил ошибку:
The specified store provider cannot be found in the configuration, or is not valid.
Я также решил эту проблему, поиская глубже в Google.
Решение можно найти ниже…
Счастливое кодирование!
Лучший ответ:
Я, наконец, решил это!
Вот как это сделать:
1) Убедитесь, что в вашем проекте есть ссылка на MySql.Data.dll, MySql.Web.dll, MySql.Data.Entity.dll и System.Data.Entity.dll.
2) Установите все вышеперечисленное в Copy-Local.
3) Добавьте следующие строки в файл App.config:
<system.data> <DbProviderFactories> <clear /> <add name=»MySQL Data Provider» invariant=»MySql.Data.MySqlClient» description=».Net Framework Data Provider for MySQL» type=»MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.4.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d» /> </DbProviderFactories> </system.data>
4) Нажмите ссылку на MySQL.Data и проверьте ее версию. Его можно найти в окне “Свойства” под браузером решений после его выбора.
5) Измените Version=6.4.4.0 на версию MySql.Data.dll. Шахта была 6.5.4.0, которая является самой новой, но более старой версией должна работать так же хорошо.
Кроме того, я хотел бы поблагодарить Ральфа де Клейна и всех остальных, кто ответил, что предложил или предложил код исключения.
Мне было неловко не думать об использовании исключений, когда они просто так удобны!
Ответ №1
Все, что он делает, это получить информацию из базы данных, когда пользователь нажимает кнопку.
В приложении вы получаете доступ к базе данных через Entity Framework. Я могу только догадываться, что ваше соединение с базой данных терпит неудачу и из-за этого ваше приложение рушится. Убедитесь, что у вас есть база данных для приложения.
Это также хорошая идея для регистрации ваших исключений, чтобы вы могли просматривать детали при сбое приложения.
Ответ №2
Попробуйте использовать блок Try Catch, окружающий ваш код внутри обработчика событий кнопки, например:
try { //here your database logic } catch (Exception ex ) { MessageBox.Show(ex.Message); //todo do something usefull }
Это даст вам информацию о том, почему приложение не удалось.