Я создал библиотеку классов на VB .NET. Некоторый код в библиотеке подключается к базе данных. Я хочу создать файл конфигурации, который будет содержать строку подключения.
Я создал файл «Settings.settings» и сохранил в нем строку подключения.
Когда создается библиотека классов, имеющая файл настроек, она генерирует файл «.dll.config», в котором пары значений ключа определены в файле настроек.
Проблема в том, что когда я меняю строку подключения в файле ".dll.config", библиотека не ссылается на эти изменения. Мне все равно придется перекомпилировать библиотеку классов, которая затем перезапишет мои изменения в файле .dll.config.
Мне нужно иметь возможность изменять строки подключения на лету без перекомпиляции библиотеки.
Есть ли в библиотеке классов VB.NET (.NET 2.0) механизм, который позволил бы мне это сделать?
Передача строки подключения в библиотеку классов с веб-страницы, использующей ее метод, не является вариантом.
Я привел образец ниже, вот как я получу доступ к строке.
Public Function getsettings(ByVal Setting As String) As String
If Setting = "Demo" Then
Return My.Settings.Demo
Else
Return My.Settings.Live
End If
End Function





Если у вас есть приложение, которое использует вашу библиотеку под названием MyApp, тогда для вашей библиотеки будет доступна строка подключения, определенная в MyApp.exe.config. Вообще говоря, клиентская программа должна устанавливать среду конфигурации, а не библиотеку.
If GetApplicationSetting("connectionString") Is Nothing Then
Throw New Exception("Could not retrieve connection string from .config file")
Else
Return ConfigurationManager.AppSettings.Item("connectionString")
End If
Убедитесь, что у вас загружена платформа System.Configuration для доступа к ConfigurationManager.
РЕДАКТИРОВАТЬ 1: Если вы используете его в веб-приложении, установите строку подключения в web.config.
Обновлено еще раз: Если вы установите строку подключения в разделе ConnectionStrings файла .exe.config или web.config, вы можете получить к нему доступ, используя:
ConfigurationManager.ConnectionStrings("MyConnectionString")
@RB - чтобы получить доступ к соединению, хранящемуся в файле web.config, мне пришлось бы передать его в библиотеку классов из веб-приложения. Я не могу изменить сигнатуру методов в библиотеке классов, поскольку это устаревший код, который используется другими веб-приложениями, над которыми я не контролирую.
Я попробую использовать метод из "РЕДАКТИРОВАТЬ 2"
@Nick - Это неправильно. Ваша библиотека может получает доступ к настройкам в файле Web.Config, используя код, который я дал.
Файлы конфигурации относятся к конкретному приложению. Поэтому, если ваша DLL используется приложением, в app.config или web.config должны быть записи, которые вы пытаетесь использовать в конфигурации DLL.
К сожалению, вариант «Не вариант», вероятно, правильный.
У нас есть несколько библиотек, к которым предъявляются одинаковые требования. Мы настроили его так, чтобы наша библиотека классов напрямую извлекала строку подключения из файла web.config приложения, которое ее использует. Когда ты сказал:
Passing the connection string to the class library from the web page that uses its method is not a option.
Теоретически веб-страница не передает con str в качестве параметра, но библиотека классов просто берет его напрямую из файла web.config.
Очень жаль, что SO не позволяет пометить несколько ответов как «правильные». Вы и РБ правы. Спасибо.
У меня есть веб-приложение, использующее эту библиотеку