7

如何在代码优先迁移的配置类的 Seed 方法中获取 App_Data 文件夹的路径。

我想从我放在 App_Data 文件夹中的文件中读取,并且 Seed 方法在 update-database 命令之后运行。HttpContext.Current.Server.MapPath 显然不起作用,因为此时没有 HttpContext。

4

4 回答 4

3

我让它与类似的东西一起工作: string MyPath = AppDomain.CurrentDomain.BaseDirectory + "/../App_Data"

因为AppDomain.CurrentDomain.BaseDirectory 在“/bin”目录结束。

于 2014-01-20T04:29:24.040 回答
2

这是一种快速入门的方法:

var myPath = AppDomain.CurrentDomain.BaseDirectory;
//to quickly show the path, either attach another debugger or just throw an exception
throw new Exception(myPath);
于 2013-02-16T13:26:02.163 回答
1

@Rusty Divine 给出了一个很好的答案,但也许你会发现这对你更好:

System.IO.Path.Combine( System.Text.RegularExpressions.Regex.Replace(AppDomain.CurrentDomain.BaseDirectory, @"\\bin\\Debug$", String.Empty, System.Text.RegularExpressions.RegexOptions.IgnoreCase) ,   RELATIVE_PATH,  "FILENAME.EXE");

例如:

System.IO.Path.Combine( System.Text.RegularExpressions.Regex.Replace(AppDomain.CurrentDomain.BaseDirectory, @"\\bin$", String.Empty, System.Text.RegularExpressions.RegexOptions.IgnoreCase) ,  "App_Data\\Init",   "fileName.txt");

AppDomain.CurrentDomain.BaseDirectory通过这种方式(使用 Regx),我们确保唯一的替换可能是字符串的后缀(末尾) 。如果服务器路径中有名为:“\bin\Debug”的子文件夹,它们将不会被替换。

此解决方案不区分大小写,这意味着“\BIN\debug”也将被替换。

此外,您不需要将字符串附加到一个字符串。 System.IO.Path.Combine会为你做的。

于 2015-08-21T20:12:40.427 回答
0

对于它的价值......如果您要在单元测试中使用 BaseDirectory,则需要进行字符串替换。但是,这仍然存在它使用单元测试项目的路径的问题,因此如果您试图指向另一个项目中的文件,请注意这一点。在这种情况下,您将不得不对路径进行硬编码。

AppDomain.CurrentDomain.BaseDirectory.Replace("\\bin\\Debug","") + "\\App_Data";
于 2015-06-28T04:48:59.110 回答