Ho usato un helper di configurazione in una DLL condivisa e un file app.config nella DLL che utilizza le impostazioni Settings.Properties.Default modificando il progetto e impostando la scheda delle impostazioni. Sembra che il valore non sia letto a meno che non ricompili, e risincronizzi l'app.config (nella dll) con le impostazioni del progetto.
Questo funziona per me. Non ricordo dove ho preso l'ispirazione. Ho solo incluso questa classe in un progetto condiviso da qualche parte. consente a qualsiasi DLL di chiamare le proprie impostazioni, che consente di modificare le voci dllFile.dll.config. Lo uso per le stringhe di connessione. L'avvertenza è che in questo metodo, la stringa di connessione deve essere una stringa di tipo, e non la stringa di connessione speciale.
using System;
using System.Configuration;
namespace Shared
{
public static class ConfigurationHelper
{
public static string GetConfigValue(string keyName)
{
string codebase = System.Reflection.Assembly.GetCallingAssembly().CodeBase;
Uri p = new Uri(codebase);
string localPath = p.LocalPath.ToLowerInvariant();
string executingFilename = System.IO.Path.GetFileNameWithoutExtension(localPath);
string sectionGroupName = "applicationSettings";
string sectionName = executingFilename + ".Properties.Settings";
string configName = localPath + ".config";
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = configName;
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
ConfigurationSectionGroup group = config.GetSectionGroup(sectionGroupName);
ClientSettingsSection section = null;
foreach (ClientSettingsSection sect in group.Sections)
{
if (sect.SectionInformation.Name.Equals(sectionName, StringComparison.InvariantCultureIgnoreCase))
{
section = sect;
break;
}
}
SettingElement elem = section.Settings.Get(keyName);
if (elem == null)
return "";
else
return elem.Value.ValueXml.InnerText.Trim();
}
}
}
//in DLL
void foo()
{
var str = ConfigurationHelper.GetSetting("ConnectionStringProd");
}
Funzionerà se sto utilizzando una sezione personalizzata? O devo fare qualcosa in quel codice di sezione personalizzato per supportare l'attributo configSource? – Andrey
+1 - Buona risposta, bastonatemi! –
@Andrey: funziona con ** qualsiasi ** 'ConfigurationSection' in .NET 2.0 e up framework. –