Chargement d'un chemin de fichier XML en C#
Je suis en train de charger un fichier XML, situé dans un dossier de mon projet (à l'aide de Visual Studio 2012).
La structure est: est-ce
solutionRoot\
- service\
-- ServiceClass.cs
-- AppValues.xml <-- this is the file I want to load
Dans mon ServiceClass, je suis en train d'essayer de lire le fichier XML avec le code suivant:
public String GetXmlElement(String elementName)
{
[....]
XDocument document = XDocument.Load(@"\service\AppValues.xml");
[...]
}
Qui donne l'erreur suivante, quand je suis en train de tester le code:
Test method PandaTests.ServiceTest.ReadXmlCanReadXml threw exception:
System.IO.DirectoryNotFoundException: Could not find a part of the path
'C:\Users\MyName\Documents\GitHub\project\Project22\PandaTests\bin\Debug\service\AppValues.xml'.
C'est évidemment un problème avec mon chemin, mais je ne peux pas comprendre comment obtenir le chemin d'accès relatif à droite. J'ai regardé d'autres questions ici sur stack overflow, mais beaucoup d'entre eux semblent trop impliqué. Est-il un moyen facile de charger le fichier XML sans donner un chemin absolu?
- Est de votre fichier XML propriétés montrant un "Copier si plus récent" ou "Toujours xopy". Sinon, le fichier XML ne seront pas copiées sur le chemin de la sortie.
- Ce type d'application que vous ciblez ?
- Il est défini comme une ressource et Copie vers le Répertoire de Sortie est réglé sur "copy".
- C'est une partie de WPF projet c'est vraiment censé être une très petite partie d'elle, mais c'est de me donner un mal de tête loin.
- retirer le premier "\" à partir de la chaîne. En général, avoir cette valeur est la même que c:\.
Vous devez vous connecter pour publier un commentaire.
Quand VS exécute votre programme, votre répertoire de travail est défini pour le Debug/Release dossier, pas à votre solution de racine.
Vous avez quelques options que je connais...
XDocument.Load(@"service\AppValues.xml")
J'ai connu le même problème et l'a résolu en utilisant le Serveur.MapPath"
Par exemple,
Espère que cela aide.
Apporter les propriétés de Visual Studio pour AppValues.xml. Changement de "Copier dans le Répertoire de Sortie" à "Copier si plus Récent", et de construire le projet.
cochez cette
Définir l'action de génération du fichier xml pour être "Embedded resource" et ensuite de référence à l'aide de ce code
Lors de l'ajout d'un fichier de projet Visual Studio, par défaut, il n'est pas copié dans la sortie générée. En tant que tel, vous devez définir soit de copier le fichier ou le faire manuellement.
Pour définir le fichier à copier automatiquement, sélectionnez-le dans l'explorateur de solutions, cliquez droit et sélectionnez propriétés. Mise à jour de la valeur pour "Copier dans le Répertoire de Sortie" pour "Copy". Cela permettra de s'assurer qu'une copie du fichier est disponible au moment de l'exécution dans un sous-dossier de la solution résultante.
Vous pouvez ensuite charger le fichier en utilisant quelque chose comme:
Application.StartupPath
, StartupPath donne une erreur de compilation: il ne semble pas être un paramètre de l'Application. Que dois-je êtreusing
pour le faire fonctionner?AppDomain.CurrentDomain.BaseDirectory
ou l'une des suggestions à l'adresse stackoverflow.com/questions/6041332/... comme des alternatives.Je l'ai résolu en 2 étapes. Je suis en utilisant MVC et j'ai eu à l'utiliser dans un fichier de classe.
1) chemin de la Chaîne
2) Modifier le fichier XML de propriétés
Action De Génération: Le Contenu
Copie vers le Répertoire de Sortie: Copie toujours