2010-03-08 10 views
2

J'ai un composant COM écrit en C# qui effectue des appels à ConfigurationManager.AppSettings.Get (...). Ce composant est instancié dans une application C++ non gérée.Le composant C# COM ne parvient pas à lire la configuration lorsqu'il est chargé dans une application C++ non gérée

À chaque fois, ConfigurationManager.AppSettings ne parvient pas à lire le fichier de configuration.

Il peut y avoir deux problèmes. 1) Que devrait appeler app.config lorsque l'application est en cours d'exécution (c'est-à-dire le nom de l'exe C++ avec .config à la fin ou le nom de ma bibliothèque de classe C# avec .config à la fin).

2) Où la vivre fichier de configuration (dans le même dossier que le composant C# COM, ou dans le même dossier que le C++ exe

J'ai essayé plusieurs appels à ConfigurationManager.OpenExecConfiguration, tout a échoué .

Ce que je veux idéalement, est pour que cela fonctionne seulement avec aucune modification de code. a défaut, un appel judicieux de OpenExeConfiguration afin que je puisse encore utiliser ConfigurationManager.AppSettings.Get (...)

Cette pourrait être la pointe de l'iceberg parce que je voudrais utiliser log4net dans le composant C# COM qui utilise une conf ig section.

Même si cela ne me dérange pas de changer mon propre code pour utiliser les paramètres d'accès via un objet de configuration, je ne peux pas changer le code de log4net.

Quelqu'un d'autre a déjà frappé ça? Des idées?

Répondre

1

Si vous exécutez procmon (http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx) pendant que votre application est en cours d'exécution, pouvez-vous voir le fichier * .config qu'il recherche?

+0

Avoir du mal à faire fonctionner le filtrage. Juste remarqué qu'un dossier "Debug" est apparu sous la solution, contenant le ClientConsole.exe, et il n'y a pas de .config dans ce dossier. En outre, le composant C#, Bridge.dll n'est pas dans ce dossier, donc je suppose que grâce à son enregistrement dans le Registre COM est capable de localiser et le charger. – IanT8

+0

En dehors de Visual Studio, il nécessite un fichier ClientConsole.exe.config. J'étudie toujours ... – IanT8

+0

RE: Filtrage pas sûr si c'est le problème que vous avez ou si c'est juste moi mais j'ai oublié à plusieurs reprises avec procmon que je dois cliquer sur "Ajouter" puis "OK" dans la boîte de dialogue Filtre plutôt que "D'ACCORD"! –

0

Habituellement, le fichier de configuration se trouve au même endroit que celui où se trouve le binaire C# .... lorsque vous exécutez une construction sur le projet contenant l'app.config, elle est convertie en app.exe.config où app est le nom de la solution du projet, et par conséquent le fichier .EXE lorsqu'il est chargé et exécuté par le framework .NET, lit le fichier de configuration du même répertoire que le .EXE.