Задача - вынести некоторые строки в конфигурационный файл плагина, реализованного в DLL. Сразу оговорюсь, что это плагин к чужой системе и доступа к конфигу я не имею ибо песочница для плагина.
Если значения занесены в качестве умолчаний, то запрос вроде
Properties.Settings.Default.passwd
выдаст желаемый результат. Однако, если до компиляции значения неизвестны, то получим ошибку.
Через несколько часов чтения интернетов обнаружено решение №1:
private void ReadAllSettings()
private void ReadAllSettings()
{
System.Configuration.Configuration config = null;
string configPath = Path.GetFileName(Assembly.GetExecutingAssembly().Location);
ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = configPath;
Log(configPath);
try
{
config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
}
catch (Exception ex)
{
Log(ex.Message);
}
if (config != null)
{
Log("NOT NULL");
Log(GetAppSetting(config, "passwd").Length.ToString());
}
}
В итоге получаю 0.
Решение №2 очень похоже, но используется OpenExeConfiguration вместо OpenExeConfiguration с указанием пути. Иногда добавляется ".config". Это также опробовано. Пути проверены. Получаю примерно следующее:
An error occurred loading a configuration file: The parameter 'exePath' is invalid.
Parameter name: exePath
В одном из советов увидел оговорку про права. Так вот наспех собранная ConsoleApp в той же папке показывает изменённое руками в конфигурационном файле значение, а вынос конфигурационного файла к злополучной DLL менят чуть меньше, чем ничего.
Очень надеюсь на помощь, поскольку этот затык, мягко говоря, уже раздражает=)