2017-03-21 3 views
0

J'ai une DLL qui est référencée par l'application principale. Lorsque j'appelle méthode à partir de DLL, j'ai besoin de lire les configurations à partir du fichier app.config spécifique à la DLL. Toutefois, lorsque je mappe Configuration Manager au fichier de configuration requis, je remarque que GetExecutingAssembly() renvoie l'assembly de l'application principale au lieu de la DLL référencée. Existe-t-il un moyen d'obtenir exactement l'emplacement de l'assembly DLL lorsque DLL est utilisée? Bien sûr, je voudrais mettre à jour ma DLL afin qu'elle renvoie toujours sa propre assebmlylocation lorsqu'elle est exécutée.Obtenir l'emplacement d'assemblage de la méthode référencée

ExeConfigurationFileMap map = new ExeConfigurationFileMap(); 
map.ExeConfigFilename = Assembly.GetExecutingAssembly().Location); 
Configuration libConfig = ConfigurationManager.OpenMappedExeConfiguration(
     map, ConfigurationUserLevel.None); 
+0

ont une méthode dans la dll qui retourne 'MethodBase.GetCurrentMethod(). DeclaringType.Assembly'? – stuartd

+1

@stuartd il est peu probable d'aider - le code show in dans le post fait à peu près la même chose et fonctionnerait bien * s'il est exécuté par la méthode dans la DLL * (identique à votre exemple). On ne sait pas où OP doit exécuter ce code - donc quiconque répondra besoin de fournir plusieurs options (y compris les cas GAC-installé et shadow-copié) –

+0

@AlexeiLevenkov bon point, merci – stuartd

Répondre

0

Vous devez utiliser Reflection pour l'obtenir. Il y a la méthode GetAssembly qui retourne l'assembly contenant le type passé.

Exemple:

string s = Assembly.GetAssembly(typeof(MemoryStream)).CodeBase; 

chemin de retour à Mscorlib.dll:

"file: /// C: /Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll"

+1

c'est une bonne chose, mais encore renvoie le chemin d'accès à la copie locale de DLL dans le dossier de l'application principale. Ce dont j'ai besoin, c'est le chemin depuis lequel la DLL a été importée et où existe le fichier de configuration spécifique à la DLL. Pourrait-il y avoir un moyen d'obtenir la config de DLL lors de l'ajout de référence à DLL dans la solution principale? –

+0

@KarenGumerov Pourquoi ne copiez-vous pas le fichier de configuration dans le répertoire bin de votre application? Il ne sait pas * quoi que ce soit * de l'endroit où il pourrait être copié, dans votre cas, le projet qu'il a été compilé à partir du fichier de configuration. – HimBromBeere

+0

C'était la solution. Merci. –

0

Pourquoi avez-vous besoin d'un fichier de configuration pour votre assemblage? Habituellement, ce que vous faites est de configurer applications, pas bibliothèques. Ainsi, les utilisateurs du programme A peuvent avoir ces paramètres pendant que les utilisateurs du programme B en ont, mais les deux programmes peuvent utiliser les mêmes assemblys référencés.

Quoi qu'il en soit, si vous avez vraiment faire cela, vous pouvez obtenir l'emplacement de l'ensemble référencé actuellement à l'aide vous êtes MethodBase.GetCurrentMethod():

string assemblyPath = MethodBase.GetCurrentMethod().DeclaringType.Assembly.Location; 
Configuration libConfig = ConfigurationManager.OpenExeConfiguration(
    assemblyPath);