我根据底部原文的代码进行了升级
web项目没有问题,控制台项目和winform项目有问题,不输出日志
升级原因:
我的项目(控制台和winform)是本地跑的,并且Debug模式,他在读取路径的时候总是会带上“\bin\Debug\”路径,程序找不到文件的真正的所在位置。
重点:
控制台项目和winform项目的根目录就在“\bin\Debug\”下面
升级后的代码
/// <summary>
/// 获取文件路径
/// </summary>
/// <param name="strPath"></param>
/// <returns></returns>
private static string MapPath(string strPath)
{
if (HttpContext.Current != null)
{
return HttpContext.Current.Server.MapPath(strPath);
}
else //非web程序引用
{
strPath = strPath.Replace("/", "\\");
if (strPath.StartsWith("\\"))
{
strPath = strPath.TrimStart('\\');
}
string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
string _path = "";
#region 过滤 bin和Debug目录
{
string[] str = baseDirectory.Split('\\');
foreach (var item in str)
{
Console.WriteLine(item);
if (item.ToString() != "bin" && item.ToString() != "Debug")
{
_path += $"{item}\\";
}
}
_path = _path.Remove(_path.Length - 1, 1);
}
#endregion
return System.IO.Path.Combine(_path, strPath);
}
}
System.Web.HttpContext.Current.Server.MapPath("/") 这个常用来表示网站的根目录,偶尔出现“未将对象设置到引用实例”的异常。
用一个折中的方法:
/// <summary>
/// 获取文件路径
/// </summary>
/// <param name="strPath"></param>
/// <returns></returns>
private string MapPath(string strPath)
{
if (HttpContext.Current != null)
{
return HttpContext.Current.Server.MapPath(strPath);
}
else //非web程序引用
{
strPath = strPath.Replace("/", "\\");
if (strPath.StartsWith("\\"))
{
strPath = strPath.TrimStart('\\');
}
return System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, strPath);
}
}