Почему моя Visual Studio 10 перестала использовать App.Config для строки подключения SQL?
У меня есть работающее приложение базы данных, использующее WPF и SQL Server 2008 R2, которое в течение двух лет получало строку подключения к SQL Server из файла App.Config. Несколько дней назад на одном компьютере разработчика он начал игнорировать connectionString файла App.Config и теперь использует строку откуда-то еще (выглядит как settings.settings или файл DBML).
Почему это может происходить, и как я могу заставить это прекратить это делать?
App.config начинается так:
<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<connectionStrings>
<add name="DronzApp.Properties.Settings.DronzAppConnectionString"
connectionString="Server=dronz.db.123.dronzdbserver.com;Database=dronzdb;User ID=dronz;Password=secretsauce;"
providerName="System.Data.SqlClient" />
</connectionStrings>
Изменить: Спасибо за предложения от вас обоих для получения дополнительной информации и где искать. Я не знаю, где приложение WPF получает информацию, которую оно должно искать в App.Config или где-то еще, но пока я не узнаю об этом, вот еще несколько частей:
Одна из первых вещей, которые делает моя программа, - это проверка базы данных (которая сейчас не работает). Непосредственно перед этим он вызывает автоматически сгенерированную функцию InitializeComponent(), чей автоматически сгенерированный код:
/// <summary>
/// InitializeComponent
/// </summary>
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public void InitializeComponent() {
if (_contentLoaded) {
return;
}
_contentLoaded = true;
System.Uri resourceLocater = new System.Uri("/DronzApp;component/ui/startwindow.xaml", System.UriKind.Relative);
#line 1 "..\..\..\UI\StartWindow.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);
#line default
#line hidden
}
Мой конструктор стартового окна вызывает InitializeComponent(); а затем проверяет базу данных с помощью строки:
int hmm = App.db.Dronz_FooTable.Count ();
где App.db - это контекст данных, определенный в файле app.xaml.cs как:
public static DronzDataDataContext db = new DronzDataDataContext ();
где DronzDataDataContext определяется в автоматически сгенерированном коде LINQ-to-SQL, например:
открытый частичный класс DronzDataDataContext: System.Data.Linq.DataContext ...
public DronzDataDataContext() :
base(global::DronzApp.Properties.Settings.Default.DronzConnectionString, mappingSource)
{
OnCreated();
}
Который раньше обращал внимание на файл app.config, а теперь нет. Когда я улавливаю исключение из БД (что связано с проблемой версии БД, потому что он пытается использовать неправильный сервер SQL) и смотрю на строку подключения, он запрашивает неправильный SQL Server вместо правильной строки подключения. Используемая строка подключения, похоже, соответствует либо файлу DBML, созданному Linq-to=SQL при импорте схемы базы данных, либо строке в settings.settings (это файл, который я не совсем понимаю, откуда он взялся или что я должен делать или не делать с этим).
1 ответ
Хорошо, похоже, я нашел и решил проблему, но точно не знаю, что ее вызвало.
То, что ссылается на файл Config, на самом деле находится в файле.proj, и каким-то образом оно изменилось, добавив ссылку на app.config в корне проекта, а не в подпапке приложения. Из прочтения другого обсуждения app.config я думаю, что VS2010 сделал это автоматически, возможно, когда я смотрел на настройки проекта в графическом интерфейсе. Удаление этой строки XML вручную из файла.proj позволило ему найти и использовать предыдущую версию, которая указывает на то, где фактически находится файл app.config. Так как у меня не было файла app.config в корне проекта, где новая первая строка была отредактирована, чтобы сказать, что он был в файле.proj, он, похоже, упал, глядя на settings.settings, где он нашел значение connectionString где файл был, когда я импортировал файл базы данных, используя Linq to SQL.