如何在WPF应用程序中从相对路径加载?

Edw*_*uay 8 c# windows path

我正在读取一个xml文件,并希望根据应用程序的位置从相对目录创建它,类似于使用Server.MapPath的ASP.NET或使用tilda.

如何在WPF中获得相对路径?

WORKS: XDocument xmlDoc = XDocument.Load(@"c:\testdata\customers.xml");
DOES NOT WORK: XDocument xmlDoc = XDocument.Load(@"~\Data\customers.xml");
DOES NOT WORK: XDocument xmlDoc = XDocument.Load(@"~/Data/customers.xml");
Run Code Online (Sandbox Code Playgroud)

Tim*_*son 17

XDocument xmlDoc = XDocument.Load(
    Path.Combine(
        AppDomain.CurrentDomain.BaseDirectory, 
        @"Data\customers.xml"));
Run Code Online (Sandbox Code Playgroud)

我假设该Data目录将与您的应用程序一起部署,与EXE位于同一根目录中.这通常是安全的,除非涉及影子复制; 例如,当您使用NUnit测试此代码时.(使用卷影复制,组成应用程序的程序集将被复制到临时目录,但是这样的文件会被遗忘.)

假设您不打算customers.xml在部署后进行修改,最安全的方法是将文件作为资源嵌入到程序集中.


Ken*_*art 8

XDocument xmlDoc = XDocument.Load(@"Data\customers.xml");
Run Code Online (Sandbox Code Playgroud)

要么

XDocument xmlDoc = XDocument.Load(@".\Data\customers.xml");
Run Code Online (Sandbox Code Playgroud)

顺便说一下,这与WPF无关,与Windows路径有关.