2012-07-30 120 views
3

我在app.config中存储数据库的路径(包含一些xml文件的文件夹)。在启动时我检查,如果路径存在。如果它不存在,我想将路径设置为默认路径。代码如下所示:为什么System.AppDomain.CurrentDomain.BaseDirectory返回不同的结果?

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:\办公室\ Projekte_Software \ ServiceTool \ _Work \ ServiceSoftware \ ServiceSoftware.UnitTests \ BIN \调试” 在NUnit的路径

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

这为什么表现如此不同?

+0

它不是一个问题的答案,但创建的路径时,那么应该使用Path.Combine(PATH1,PATH2)。这将处理反斜杠问题,这将防止你的错误。 – Maarten 2012-07-30 11:34:43

回答

4

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

问题,为什么一个包括削减收官另一种不很可能涉及到如何nUnit创建运行其测试的应用程序域

+0

谢谢。使用'Path.Combine'解决了这个问题。 – Batuu 2012-07-30 12:00:15

0

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