У меня есть веб-проект вроде:
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;
}
}
}
Почему он отображает ...\Web\, в то время как сборка TestProject скомпилирована в папку bin (другими словами, она должна отображать ...\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();
}
}
}
В TestProject создается File.config. Теперь AppDomain.CurrentDomain.BaseDirectory + m_filePath будет returen ..\Web\File.config (на самом деле файл был скопирован в ..\Web\bin\File.config), будет выбрано исключение.
Можно сказать, что я должен изменить m_filePath на @"\bin\File.config". Однако, если я использую этот метод в приложении Console в вашем предложить, AppDomain.CurrentDomain.BaseDirectory + m_filePath вернет ..\Console\bin\Debug\bin\File.config (на самом деле файл был скопирован в .\Console\bin\Debug\File.config), исключение будет выбрано из-за избытка bin.
Другими словами, в веб-приложении AppDomain.CurrentDomain.BaseDirectory - это другой путь, в который файл копируется (отсутствует /bin), но в консольном приложении это один и тот же путь.
Кто-нибудь может мне помочь?