ConfigurationManager продолжает получать строку подключения Machine.config - PullRequest
9 голосов
/ 23 сентября 2010

У меня есть сборка c #, которая использует app.config для хранения строки подключения к базе данных. При отладке приложения я заметил, что соединение с базой данных продолжало сбой, поскольку ConfigurationManager продолжал возвращать строку соединения machine.config:

источник данных =. \ SQLEXPRESS; Комплексная безопасность; ....

Я добавил <clear/> перед строкой подключения в app.config, и это устранило проблему на моем компьютере разработчика. Проблема вернулась, когда я развернул ее в производство. Может кто-нибудь сказать мне, как я могу остановить использование строки подключения machine.config?

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings[0].ConnectionString);

<connectionStrings>
    <clear/>
    <add name="VersionConnectionString"
     connectionString=" Data Source=localhost;Initial Catalog=VersionInfo;User ID=user;Password=password"         
     providerName="System.Data.SqlClient" />
  </connectionStrings>

UPDATE

Следующее по-прежнему дает мне строку подключения machine.config?!

 Configuration appConfig = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
                string dllConfigData =
                    appConfig.ConnectionStrings.ConnectionStrings[0].ConnectionString;

Ответы [ 4 ]

6 голосов
/ 24 сентября 2010

Когда вы используете строки подключения в DLL, вам также необходимо добавить их в app.config вашего exe, используя точно такое же имя для настройки. Затем вы можете изменить строку подключения в exe-файле .config, и DLL автоматически подберет ее при загрузке.

Вероятно, это единственный способ, с помощью которого вы можете работать с пользовательскими строками соединения в файле app.config, когда уровень сохраняемости БД реализован в отдельной DLL. Даже не спрашивайте меня, сколько времени мне понадобилось, чтобы исследовать и отладить это.

2 голосов
/ 26 мая 2011

Я знаю, что это старый вопрос, но у меня была такая же проблема сегодня. Проблема заключалась в том, что app.config, который я добавил в свой проект, не копировался в выходной каталог. Чтобы это исправить, щелкните правой кнопкой мыши на app.config и выберите Properties. Затем измените Build Action на Content. Надеюсь, это поможет!

1 голос
/ 23 сентября 2010

Попробуйте получить экземпляр вашего файла app.config в качестве объекта конфигурации:

var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

var myConnString = config.ConnectionStrings["VersionConnectionString"].ConnectionString;

Это полностью обходит файл конфигурации компьютера.

0 голосов
/ 23 сентября 2010

Вы должны получать строку подключения по ИМЯ, а не по ИНДЕКСУ - это обеспечит то, что вы получаете то, о чем просите.

Попробуйте

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["VersionConnectionString"].ConnectionString);
...