如何在代码首次迁移的配置类的Seed方法中获取App_Data文件夹的路径。
我想从我放在App_Data文件夹中的文件中读取,并且在update-database命令之后运行Seed方法。 HttpContext.Current.Server.MapPath显然不起作用,因为此时没有HttpContext。
答案 0 :(得分:2)
我得到了类似的东西:
string MyPath = AppDomain.CurrentDomain.BaseDirectory + "/../App_Data"
因为AppDomain.CurrentDomain.BaseDirectory
在“/ bin”目录结束。
答案 1 :(得分:1)
这是一种让您入门的快捷方式:
var myPath = AppDomain.CurrentDomain.BaseDirectory;
//to quickly show the path, either attach another debugger or just throw an exception
throw new Exception(myPath);
答案 2 :(得分:1)
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");
以这种方式(使用Regx),我们确保唯一的替换可能是AppDomain.CurrentDomain.BaseDirectory
字符串的后缀(在末尾)。如果服务器路径中有子文件夹名为:“\ bin \ Debug”,则不会替换它们。
此解决方案不区分大小写,意味着“\ BIN \ debug”也将被替换。
此外,您不需要将字符串附加到一个字符串。
System.IO.Path.Combine
将为您完成。
答案 3 :(得分:0)
对于它的价值......如果你要在单元测试中使用BaseDirectory,你需要进行字符串替换。但是,这仍然存在问题,即它使用单元测试项目的路径,所以如果你试图指向另一个项目中的文件,那就要厌倦了。在这种情况下,您将不得不对路径进行硬编码。
ngRoute