我正在尝试加载位于项目文件夹中的XML文件(使用Visual Studio 2012)。
结构如下:
solutionRoot\
- service\
-- ServiceClass.cs
-- AppValues.xml <-- this is the file I want to load
在我的ServiceClass中,我尝试使用以下代码从XML文件中读取:
public String GetXmlElement(String elementName)
{
[....]
XDocument document = XDocument.Load(@"\service\AppValues.xml");
[...]
}
当我尝试测试代码时,会出现以下错误:
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'.
这显然是我的路径问题,但我无法弄清楚如何使相对路径正确。我在这里查看了有关堆栈溢出的其他问题,但其中许多似乎过度参与。是否有一种简单的方法可以在不提供绝对路径的情况下加载XML文件?
答案 0 :(得分:13)
当VS运行程序时,您的工作目录将设置为Debug / Release文件夹,而不是解决方案根目录。
我知道几个选项......
答案 1 :(得分:4)
我遇到了同样的问题,并使用&#34; Server.MapPath&#34;
解决了这个问题例如,
string path=Server.MapPath("~/service/AppValues.xml");
XDocument document = XDocument.Load(path);
希望它有所帮助。
答案 2 :(得分:2)
在Visual Studio中为AppValues.xml打开属性。将“复制到输出目录”更改为“如果更新则复制”,并构建项目。
答案 3 :(得分:0)
检查这个
XDocument document = XDocument.Load(@"..\service\AppValues.xml");
答案 4 :(得分:0)
将xml文件的构建操作设置为“Embedded resource”,然后使用此代码
进行引用private static UnmanagedMemoryStream GetResourceStream(string resName)
{
var assembly = Assembly.GetExecutingAssembly();
var strResources = assembly.GetName().Name + ".g.resources";
var rStream = assembly.GetManifestResourceStream(strResources);
var resourceReader = new ResourceReader(rStream);
var items = resourceReader.OfType<DictionaryEntry>();
var stream = items.First(x => (x.Key as string) == resName.ToLower()).Value;
return (UnmanagedMemoryStream)stream;
}
var file = GetResourceStream("appValues.xml");
答案 5 :(得分:0)
将文件添加到Visual Studio项目时,默认情况下不会将其复制到生成的输出中。因此,您需要设置为复制文件或手动执行此操作。
要将文件设置为自动复制,请在解决方案资源管理器中选择该文件,右键单击并选择属性。将“复制到输出目录”的值更新为“始终复制”。这将确保文件的副本在运行时在生成的解决方案的子文件夹中可用。
然后您可以使用以下内容加载文件:
string path = System.Io.Path.Combine(Application.StartupPath, @"\service\AppValues.xml");
XDocument doc = XDocument.Load(path);
答案 6 :(得分:0)
我分两步解决了。我使用的是MVC,我不得不在类文件中使用它。
1)字符串路径
=HttpContext.Current.Server.MapPath("~/App_Data/yourxmlfilename.xml");
XDocument doc = XDocument.Load(path);
2)更改XML文件属性
构建行动:内容
复制到输出目录:始终复制