gpt4 book ai didi

c# - 为什么 AppDomain.CurrentDomain.BaseDirectory 在 asp.net 应用程序中不包含 "bin"?

转载 作者:IT王子 更新时间:2023-10-29 04:20:17 26 4
gpt4 key购买 nike

我有一个像这样的网络项目:

namespace Web
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
lbResult.Text = PathTest.GetBasePath();
}
}
}

PathTest.GetBasePath() 方法在另一个项目中定义如下:

namespace TestProject
{
public class PathTest
{
public static string GetBasePath()
{
return AppDomain.CurrentDomain.BaseDirectory;
}
}
}

为什么在 TestProject 程序集编译到 bin 文件夹时显示 ...\Web\(换句话说,它应该显示 ...\Web\bin 在我的想法中)。

如果我将方法修改为:

namespace TestProject
{
public class FileReader
{
private const string m_filePath = @"\File.config";
public static string Read()
{
FileStream fs = null;
fs = new FileStream(AppDomain.CurrentDomain.BaseDirectory + m_filePath,FileMode.Open, FileAccess.Read);
StreamReader reader = new StreamReader(fs);
return reader.ReadToEnd();
}
}
}

File.config 是在 TestProject 中创建的。现在 AppDomain.CurrentDomain.BaseDirectory + m_filePath 将返回 ..\Web\File.config(实际上文件被复制到 ..\Web\bin\File.config),会抛出异常。

您可以说我应该将 m_filePath 修改为 @"\bin\File.config"。但是,如果我在您建议的控制台应用程序中使用此方法,AppDomain.CurrentDomain.BaseDirectory + m_filePath 将返回 ..\Console\bin\Debug\bin\File.config (实际上是拷贝到.\Console\bin\Debug\File.config),bin多余会抛出异常。

换句话说,在网络应用程序中,AppDomain.CurrentDomain.BaseDirectory 是文件复制到的不同路径(缺少 /bin),但在控制台应用程序中这是同一条路。
谁能帮帮我?

最佳答案

根据 MSDN,应用程序域“代表应用程序域,它是应用程序执行的隔离环境。”当您考虑 ASP.Net 应用程序时,应用程序所在的根目录不是 bin 文件夹。完全有可能,在某些情况下,您的 bin 文件夹中没有文件,并且可能根本没有 bin 文件夹。由于 AppDomain.CurrentDomain 引用相同的对象,无论您是从代码隐藏还是从 bin 文件夹中的 dll 调用代码,您最终都会得到网站的根路径。

当我编写设计用于在 asp.net 和 Windows 应用程序下运行的代码时,我通常会创建一个如下所示的属性:

public static string GetBasePath()          
{
if(System.Web.HttpContext.Current == null) return AppDomain.CurrentDomain.BaseDirectory;
else return Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"bin");
}

另一个(未经测试的)选项是使用:

public static string GetBasePath()          
{
return System.Reflection.Assembly.GetExecutingAssembly().Location;
}

关于c# - 为什么 AppDomain.CurrentDomain.BaseDirectory 在 asp.net 应用程序中不包含 "bin"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8669833/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com