C# 为什么System.AppDomain.CurrentDomain.BaseDirectory返回不同的结果?
我将数据库的路径(包含一些xml文件的文件夹)存储在app.config中。在启动时,我检查路径是否存在。如果它不存在,我想将路径设置为默认路径。代码如下所示: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
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)。这将解决反斜杠问题,这将防止您的错误。