Почему моя 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.

Другие вопросы по тегам