Я создал простое приложение 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, которая является самой новой, но более старой версией должна работать так же хорошо.
Кроме того, я хотел бы поблагодарить Ральфа де Клейна и всех остальных, кто ответил, что предложил или предложил код исключения.
Мне было неловко не думать об использовании исключений, когда они просто так удобны!
Все, что он делает, это получить информацию из базы данных, когда пользователь нажимает кнопку.
В приложении вы получаете доступ к базе данных через Entity Framework. Я могу только догадываться, что ваше соединение с базой данных терпит неудачу и из-за этого ваше приложение рушится. Убедитесь, что у вас есть база данных для приложения.
Это также хорошая идея для регистрации ваших исключений, чтобы вы могли просматривать детали при сбое приложения.
Попробуйте использовать блок Try Catch, окружающий ваш код внутри обработчика событий кнопки, например:
try
{
//here your database logic
}
catch (Exception ex )
{
MessageBox.Show(ex.Message);
//todo do something usefull
}
Это даст вам информацию о том, почему приложение не удалось.