J'ai utilisé une aide à la configuration dans une DLL partagée et un fichier app.config dans la DLL qui utilise les éléments Settings.Properties.Default en modifiant le projet et en définissant l'onglet des paramètres. Il semble que la valeur ne soit pas lue sauf si vous recompilez, et resynchronisez le fichier app.config (dans la DLL) avec les paramètres du projet.
Cela fonctionne pour moi. Je ne me souviens pas d'où j'ai eu l'inspiration. Je viens d'inclure cette classe dans un projet partagé quelque part. permet à n'importe quelle DLL d'appeler ses propres paramètres, ce qui vous permet de modifier les entrées dllFile.dll.config. Je l'utilise pour les chaînes de connexion. La mise en garde est que dans cette méthode, la chaîne de connexion doit être une chaîne de type, et non la chaîne de connexion spéciale.
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");
}
Cela fonctionnera-t-il si j'utilise une section personnalisée? Ou dois-je faire quelque chose dans ce code de section personnalisée pour prendre en charge l'attribut configSource? – Andrey
+1 - Bonne réponse, battez-moi! –
@Andrey: cela fonctionnera avec ** any ** 'ConfigurationSection' dans le framework .NET 2.0 et supérieur. –