Как правило, вам скажут, что это невозможно сделать. Однако вы, безусловно, можете загрузить файл конфигурации, используя метод System.Configuration.ConfigurationManager.OpenExeConfiguration. Вы можете передать путь к файлу к вашей сборке (это не обязательно должен быть исполняемый файл, несмотря на имя метода).
Конечно, это не объединяет настройки конфигурации вашей сборки с настройками конфигурации исполняемого приложения, и я не думаю, что это должно. Ваша сборка просто должна знать, что ей нужно получить свои настройки с помощью другого механизма, нежели функция System.Configuration.ConfigurationManager.GetSection или статическое свойство AppSettings для этого класса.
Ниже приведен очень простой пример для класса «Настройки», который загружает файл .config, для сборки которого он является частью.
public static class Settings
{
public static System.Configuration.Configuration Configuration { get; private set; }
static Settings()
{
// load a .config file for this assembly
var assembly = typeof(Settings).Assembly;
Configuration = System.Configuration.ConfigurationManager.OpenExeConfiguration(assembly.Location);
if (Configuration == null)
throw new System.Configuration.ConfigurationErrorsException(string.Format("Unable to load application configuration file for the assembly {0} at location {1}.", assembly.FullName, assembly.Location));
}
// This function is only provided to simplify access to appSettings in the config file, similar to the static System.Configuration.ConfigurationManager.AppSettings property
public static string GetAppSettingValue(string key)
{
// attempt to retrieve an appSetting value from this assembly's config file
var setting = Configuration.AppSettings.Settings[key];
if (setting != null)
return setting.Value;
else
return null;
}
}
И использование ...
public class UsageExample
{
void Usage()
{
string mySetting = Settings.GetAppSettingValue("MySetting");
var section = Settings.Configuration.GetSection("MySection");
}
}
Теперь вам все еще придется решать проблемы сборки. Добавление элемента «Файл конфигурации приложения» (App.config) в сборку библиотеки классов приводит к тому, что Visual Studio копирует его в выходную папку этой сборки как .dll.config, но он не копируется автоматически в выходную папку каких-либо исполняемых приложений. что ссылка на этот проект. Поэтому вам нужно добавить шаг после сборки, чтобы скопировать файл в соответствующее место, как вы упоминали.
Я бы подумал о том, чтобы выполнить шаг после сборки для библиотеки классов, которая скопирует файл .config в папку «Configurations» уровня решения, а затем сделаю шаг после сборки для исполняемых проектов, чтобы скопировать все из «» Конфигурации »в папку вывода. Я не уверен, что это действительно сработает, но если это сработает, вы не будете создавать дополнительные зависимости между проектами на этапах после сборки (это может затруднить обслуживание).
РЕДАКТИРОВАТЬ: В конечном счете, вы должны подумать, действительно ли это то, что вы хотите делать. Это не обычный подход, и, как правило, вам лучше обойтись, если использовать другой ответ на этот вопрос, который упоминается при использовании атрибута configSource.
Недостатки этого подхода, которые могут быть неочевидными, заключаются в том, что вы не сможете поместить параметры для сторонних компонентов в файл конфигурации библиотеки классов и ожидать их использования. Например, если ваша библиотека классов использует log4net, вы не можете поместить настройки log4net в файл конфигурации библиотеки классов, потому что компоненты log4net по-прежнему ожидают загрузки настроек из файла конфигурации исполняемого файла.