2010-11-06 3 views
1

En essayant de faire référence à ce fichier de configuration qui se trouve dans le même dossier que la classe qui contient ce code. Je voudrais faire un certain type de référence relative, afin que je puisse l'utiliser à partir d'autres endroits. Lorsque j'essaie d'utiliser uniquement le nom de fichier sans le chemin, l'application ne trouve pas le fichier. J'ai débogué et le dossier il semble regarder dans le dossier d'IIS qui fait sens comme Im l'employant dans un service de wcf accueilli par IIS. Quoi qu'il en soit, comment je peux correctement référencer ce fichier de configuration sans coder dur le chemin? Donc, il semble dans l'emplacement du projet. Merci pour toute aide. Passe un bon weekend!Comment puis-je correctement référencer ce fichier de configuration pour ne pas coder le chemin?

public void Init() 
    { 
     var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = @"C:\workspace\new\UnityDemo-v1.0.0.1\src\Core\unity.config" }; 

     Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 
     var unitySection = (UnityConfigurationSection)configuration.GetSection("unity"); 
     _container = new UnityContainer().LoadConfiguration(unitySection); 
    } 

Cheers,
~ ck

+0

Vous ne devriez pas utiliser la version dans votre arbre 'src'. Votre fichier de configuration doit être configuré pour être "copié dans le répertoire de sortie" et vous devriez le trouver (et l'utiliser). –

+0

Y a-t-il une raison pour que la fonctionnalité Paramètres disponible sur le projet (et placée dans app.config/web.config) ne fonctionne pas pour vous? Dans le cas par défaut, vous n'avez pas à vous soucier de trouver le chemin d'accès au fichier ou de charger la configuration. –

+0

kirk il ne semble pas copier. devrait-il être contenu ou ressource intégrée. alors comment puis-je le référencer? merci – Hcabnettek

Répondre

1

Utilisation des fichiers de configuration avec les services hébergés dans IIS est difficile, car le répertoire d'application est celui IIS fonctionne et qui sera fortement protégé contre placer des fichiers. Il peut y avoir d'autres façons, mais pour moi, cela fonctionne pour nommer le fichier web.config et le copier dans le répertoire où réside le fichier .svc, puis vous pouvez lire les paramètres directement sans avoir à référencer le fichier de configuration. Je ne connais aucun moyen de faire cette copie depuis le programme lui-même. L'installateur sera capable de le faire cependant. Voir: this question

1

Utilisez Application.StartupPath pour obtenir le chemin de l'application a commencé en puis il suffit de combiner avec le nom du fichier pour obtenir le chemin complet:

var filePath = Path.Combine(Application.StartupPath, "unity.config"); 
var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = filePath }; 

Cela fonctionne uniquement en winforms.


Une autre option consiste à utiliser Environment.CurrentDirectory - par défaut, il sera réglé sur le répertoire de démarrage du processus. Notez que cette propriété est mutable:

var filePath = Path.Combine(Environment.CurrentDirectory, "unity.config"); 
var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = filePath }; 
+1

quel assembly est Application.StartupPath dans? Est-ce seulement pour les applications Windows Forms? Merci – Hcabnettek

+0

Oui, c'est. Réponse mise à jour avec une autre option. – Oded

1

Une autre option qui a fonctionné pour moi dans .NET utilise Server.MapPath. Cela renvoie le chemin complet du chemin virtuel relatif donné dans l'application Web. Ce chemin de fichier physique peut ensuite être utilisé pour créer la carte de fichier comme ci-dessus.

Questions connexes