Je développe un composant d'accès aux données qui sera utilisé dans un site Web contenant un mélange de pages ASP et ASP.NET classiques, et j'ai besoin d'un bon moyen de gérer ses paramètres de configuration.
J'aimerais utiliser une personnalisation ConfigurationSection
, et pour les pages ASP.NET, cela fonctionne très bien. Mais lorsque le composant est appelé via COM Interop à partir d'une page ASP classique, le composant ne s'exécute pas dans le contexte d'une requête ASP.NET et n'a donc aucune connaissance de web.config.
Existe-t-il un moyen de dire au ConfigurationManager
de charger simplement la configuration à partir d'un chemin arbitraire (par exemple ..\web.config
si mon assembly est dans le /bin
dossier)? S'il est alors je pense mon composant peut revenir à la valeur par défaut que si les ConfigurationManager.GetSection
rendements null
de ma section personnalisée.
Toute autre approche serait la bienvenue!
la source
Réponses:
Essaye ça:
la source
var config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/web.config");
Une autre solution consiste à remplacer le chemin du fichier de configuration d'environnement par défaut.
Je trouve que c'est la meilleure solution pour le chargement de fichier de configuration de chemin non trivial, en particulier la meilleure façon de joindre un fichier de configuration à dll.
Exemple:
Plus de détails peuvent être trouvés sur ce blog .
De plus, cette autre réponse a une excellente solution, complète avec du code pour actualiser la configuration de l'application et un
IDisposable
objet pour la réinitialiser à son état d'origine. Avec cette solution, vous pouvez conserver la configuration de l'application temporaire:la source
La réponse d'Ishmaeel fonctionne généralement, mais j'ai trouvé un problème, qui est que l'utilisation
OpenMappedMachineConfiguration
semble perdre vos groupes de sections hérités de machine.config. Cela signifie que vous pouvez accéder à vos propres sections personnalisées (ce qui est tout ce que l'OP recherché), mais pas aux sections système normales. Par exemple, ce code ne fonctionnera pas:En gros, si vous mettez une montre sur le
configuration.SectionGroups
, vous verrez que system.net n'est pas enregistré en tant que SectionGroup, donc il est pratiquement inaccessible via les canaux normaux.J'ai trouvé deux façons de contourner ce problème. La première, que je n'aime pas, est de réimplémenter les groupes de sections système en les copiant de machine.config dans votre propre web.config, par exemple
Je ne suis pas sûr que l'application Web elle-même fonctionnera correctement après cela, mais vous pouvez accéder correctement à la sectionGroups.
La deuxième solution consiste à ouvrir votre web.config en tant que configuration EXE, qui est probablement plus proche de sa fonction prévue de toute façon:
J'ose dire qu'aucune des réponses fournies ici, ni la mienne ni celle d'Ishmaeel, n'utilise tout à fait ces fonctions comme les concepteurs .NET l'ont voulu. Mais cela semble fonctionner pour moi.
la source
En plus de la réponse d'Ishmaeel, la méthode
OpenMappedMachineConfiguration()
retournera toujours unConfiguration
objet. Donc, pour vérifier si elle est chargée, vous devez vérifier laHasFile
propriété où true signifie qu'elle provient d'un fichier.la source
La réponse acceptée est fausse !!
Il lève l'exception suivante lors de l'accès à la propriété AppSettings:
Voici la bonne solution:
la source
J'ai fourni les valeurs de configuration à Word .nET Compoent hébergé comme suit.
Un composant de bibliothèque de classes .NET appelé / hébergé dans MS Word. Pour fournir des valeurs de configuration à mon composant, j'ai créé winword.exe.config dans le dossier C: \ Program Files \ Microsoft Office \ OFFICE11. Vous devriez pouvoir lire les valeurs de configuration comme vous le faites dans .NET traditionnel.
la source
Pour ASP.NET, utilisez WebConfigurationManager:
la source
Utilisez le traitement XML:
la source
Cela devrait faire l'affaire :
Source: https://www.codeproject.com/Articles/616065/Why-Where-and-How-of-NET-Configuration-Files
la source