【问题标题】:Why does System.AppDomain.CurrentDomain.BaseDirectory return different results?为什么 System.AppDomain.CurrentDomain.BaseDirectory 返回不同的结果?
【发布时间】:2012-07-28 01:36:42
【问题描述】:

我将数据库的路径(包含一些 xml 文件的文件夹)存储在 app.config 中。在启动时,我检查路径是否存在。如果它不存在,我想将路径设置为默认路径。代码如下所示:

public void CheckAndRepairSettings()
{
        /* Check Paths */
        if(GetDatabasePath() == null)
             SetDatabasePath(System.AppDomain.CurrentDomain.BaseDirectory + "DataBase");
}

GetDatabasePath() 从 app.config 读取路径,SetDatabasePath() 将路径写入 app.config。这些方法运行良好。

我的问题是System.AppDomain.CurrentDomain.BaseDirectory。如果我在我的应用程序调试模式下运行它,我会得到: "F:\Office\Projekte_Software\ServiceTool\_Work\ServiceSoftware\ServiceSoftware\bin\Debug\"

我还使用 NUnit 进行一些单元测试。如果我在调试模式下运行 NUnit,我会得到: "F:\Office\Projekte_Software\ServiceTool\_Work\ServiceSoftware\ServiceSoftware.UnitTests\bin\Debug"

在 NUnit 调试模式下,路径中没有尾随的反斜杠“\”,因此当我在 CheckAndRepairSettings() 中连接路径字符串时,会得到一个不存在的路径。

为什么它的行为如此不同?

【问题讨论】:

  • 这不是问题的答案,但是在创建路径时,应该使用 Path.Combine(path1, path2)。这将解决反斜杠问题,从而避免您的错误。

标签: c# wpf path directory


【解决方案1】:

更好的选择是使用IsolatedStorage

例如,您可以使用以下方式编写设置:

using(IsolatedStorageFile f=IsolatedStorageFile.GetUserStoreForDomain())
{

using(var s=new IsolatedStorageFileStream("Myapp.config",FileMode.Create,f))
using(var writer=new StreamWriter(s))
writer.WriteLine("My Settings");
}

【讨论】:

    【解决方案2】:

    您应该使用 Path.Combine 来连接路径,它处理有关现有/不存在(除其他外)路径分隔符的问题

    为什么一个包含结束斜线而另一个不包含可能与 nUnit 如何创建运行测试的应用域有关

    【讨论】:

      猜你喜欢
      • 2013-03-10
      • 1970-01-01
      • 2017-04-01
      • 2010-10-31
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多