Il n'est pas facile de créer un fichier de configuration .NET pour une DLL, et ce pour une bonne raison. Le mécanisme de configuration de .NET intègre de nombreuses fonctionnalités pour faciliter la mise à niveau/mise à jour de l'application et pour empêcher les applications installées de piétiner les fichiers de configuration des autres.
Il y a une grande différence entre l'utilisation d'une DLL et l'utilisation d'une application. Il est peu probable que vous ayez plusieurs copies d'une application installées sur la même machine pour le même utilisateur. Mais vous pouvez très bien avoir 100 applications ou bibliothèques différentes qui utilisent toutes une DLL .NET.
Alors qu'il est rarement nécessaire de suivre les paramètres séparément pour les différentes copies d'une application au sein d'un même profil d'utilisateur, il est très Il est peu probable que vous souhaitiez que les différentes utilisations d'une DLL partagent la configuration les unes avec les autres. C'est pourquoi, lorsque vous récupérez un objet Configuration à l'aide de la méthode "normale", l'objet que vous obtenez est lié à la configuration du domaine d'application dans lequel vous vous exécutez, plutôt qu'à l'assemblage particulier.
Le domaine d'application est lié à l'assemblage Root qui a chargé l'assemblage dans lequel se trouve votre code. Dans la plupart des cas, il s'agit de l'assemblage de votre .EXE principal, qui a chargé la .DLL. Il est possible de créer d'autres domaines d'applications dans une application, mais vous devez fournir explicitement des informations sur l'assemblage racine de ce domaine d'applications.
En raison de tout cela, la procédure de création d'un fichier de configuration spécifique à une bibliothèque n'est pas si pratique. Il s'agit du même processus que celui que vous utiliseriez pour créer un fichier de configuration portable arbitraire qui ne serait pas lié à un assemblage particulier, mais pour lequel vous souhaitez utiliser le schéma XML de .NET, les mécanismes de section et d'élément de configuration, etc. Il s'agit de créer un fichier ExeConfigurationFileMap
en chargeant les données pour identifier l'endroit où le fichier de configuration sera stocké, puis en appelant l'objet ConfigurationManager
. OpenMappedExeConfiguration
pour l'ouvrir dans un nouveau Configuration
instance. Ce site sera vous couper de la protection de la version offerte par le mécanisme de génération automatique de chemins.
Statistiquement parlant, vous utilisez probablement cette bibliothèque dans un cadre interne, et il est peu probable que plusieurs applications l'utilisent sur une même machine/un même utilisateur. Mais Si ce n'est pas le cas, il y a quelque chose que vous devez garder à l'esprit. Si vous utilisez un seul fichier de configuration global pour votre DLL, quelle que soit l'application qui y fait référence, vous devez vous préoccuper des conflits d'accès. Si deux applications faisant référence à votre bibliothèque sont exécutées en même temps, chacune avec son propre fichier de configuration global, vous devez vous préoccuper des conflits d'accès. Configuration
ouvert, alors lorsque l'un d'entre eux enregistre des modifications, cela provoquera une exception la prochaine fois que vous essaierez de récupérer ou d'enregistrer des données dans l'autre application.
Le moyen le plus sûr et le plus simple de contourner ce problème est d'exiger que l'assemblage qui charge votre DLL fournisse également des informations sur lui-même, ou de le détecter en examinant l'App Domain de l'assemblage qui le référence. Utilisez ceci pour créer une sorte de structure de dossier pour conserver des fichiers de configuration utilisateur séparés pour chaque application faisant référence à votre DLL.
Si vous êtes certains si vous souhaitez disposer de paramètres globaux pour votre DLL, quel que soit l'endroit où elle est référencée, vous devrez déterminer son emplacement plutôt que de laisser .NET trouver automatiquement l'emplacement approprié. Vous devrez également être agressif dans la gestion de l'accès au fichier. Vous devrez mettre en mémoire cache autant que possible, en gardant le fichier Configuration
L'instance autour de SEULEMENT le temps qu'il faut pour charger ou sauvegarder, en ouvrant immédiatement avant et en jetant immédiatement après. Enfin, vous aurez besoin d'un mécanisme de verrouillage pour protéger le fichier pendant qu'il est modifié par l'une des applications qui utilisent la bibliothèque.
0 votes
Selon l'article mentionné : si le nom de la dll est MyDll.dll, le fichier de configuration devrait être MyDLL.dll.config. Donc, si vous lisez les paramètres de configuration à l'intérieur de la dll, elle devrait faire référence à sa propre configuration, n'est-ce pas ?
11 votes
Peu importe le code demandé - il cherche le fichier tel que spécifié pour l'AppDomain : AppDomain.CurrentDomain.SetupInformation.ConfigurationFile setting
0 votes
Remarque : la question "mettre les informations de configuration dans une DLL" concerne la séparation du code de configuration de votre application dans une bibliothèque pour le garder séparé du code principal de l'application. C'est très différent d'un fichier de configuration séparé et spécial pour une DLL à part entière.
0 votes
Voir ce post [entrer la description du lien ici][1], a été la solution pour moi [1] : stackoverflow.com/questions/2389290/
0 votes
Voir ce post [Comment charger dynamiquement un fichier séparé de paramètres d'application et le fusionner avec les paramètres actuels ?][1] peut être utile [1] : stackoverflow.com/questions/2389290/
0 votes
Duplicata possible de équivalent de app.config pour la bibliothèque (dll)