如何在代码优先迁移的配置类的 Seed 方法中获取 App_Data 文件夹的路径。
我想从我放在 App_Data 文件夹中的文件中读取,并且 Seed 方法在 update-database 命令之后运行。HttpContext.Current.Server.MapPath 显然不起作用,因为此时没有 HttpContext。
如何在代码优先迁移的配置类的 Seed 方法中获取 App_Data 文件夹的路径。
我想从我放在 App_Data 文件夹中的文件中读取,并且 Seed 方法在 update-database 命令之后运行。HttpContext.Current.Server.MapPath 显然不起作用,因为此时没有 HttpContext。
我让它与类似的东西一起工作:
string MyPath = AppDomain.CurrentDomain.BaseDirectory + "/../App_Data"
因为AppDomain.CurrentDomain.BaseDirectory
在“/bin”目录结束。
这是一种快速入门的方法:
var myPath = AppDomain.CurrentDomain.BaseDirectory;
//to quickly show the path, either attach another debugger or just throw an exception
throw new Exception(myPath);
@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
会为你做的。
对于它的价值......如果您要在单元测试中使用 BaseDirectory,则需要进行字符串替换。但是,这仍然存在它使用单元测试项目的路径的问题,因此如果您试图指向另一个项目中的文件,请注意这一点。在这种情况下,您将不得不对路径进行硬编码。
AppDomain.CurrentDomain.BaseDirectory.Replace("\\bin\\Debug","") + "\\App_Data";