C# 为什么System.AppDomain.CurrentDomain.BaseDirectory返回不同的结果?

C# 为什么System.AppDomain.CurrentDomain.BaseDirectory返回不同的结果?,c#,wpf,path,directory,C#,Wpf,Path,Directory,我将数据库的路径(包含一些xml文件的文件夹)存储在app.config中。在启动时,我检查路径是否存在。如果它不存在,我想将路径设置为默认路径。代码如下所示: public void CheckAndRepairSettings() { /*检查路径*/ if(GetDatabasePath()==null) SetDatabasePath(System.AppDomain.CurrentDomain.BaseDirectory+“数据库”); } GetDatabasePath()从app

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

public void CheckAndRepairSettings()
{
/*检查路径*/
if(GetDatabasePath()==null)
SetDatabasePath(System.AppDomain.CurrentDomain.BaseDirectory+“数据库”);
}
GetDatabasePath()
从app.config读取路径,并
SetDatabasePath()
将路径写入app.config。这些方法很有效

我的问题是
System.AppDomain.CurrentDomain.BaseDirectory
。如果在我的应用程序调试模式下运行,我会得到: “F:\Office\Projekte\u Software\ServiceTool\\u Work\ServiceSoftware\ServiceSoftware\bin\Debug\”

此外,我还将NUnit用于一些单元测试。如果我在调试模式下运行NUnit,我会得到: “F:\Office\Projekte\u Software\ServiceTool\u Work\ServiceSoftware\ServiceSoftware.UnitTests\bin\Debug”

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


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

您应该使用Path。组合来连接路径,它处理有关现有/不存在(以及其他)路径分隔符的问题


为什么一个包含结束斜杠而另一个不包含,可能与nUnit如何创建appdomain并在其下运行测试有关

更好的选择是使用
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");
}

这不是问题的答案,但在创建路径时,应该使用path.Combine(路径1,路径2)。这将解决反斜杠问题,这将防止您的错误。