DataDirectory |在哪里? 界定?

这是我的系统上该文件在哪里的后续问题?

在所有的问题和答案吨和互联网,但我找不到任何答案这个具体的问题。

全部是默认的,但我找不到文件本身,

它不在那里

在哪里/ 如何得到| DataDirectory | 定义

该文件保存在哪里,甚至存在? 如果不是,发生了什么事?

编辑 :文件不在 AppDomain.CurrentDomain.GetData("DataDirectory").ToString(); 所有(sqattered)答案告诉我应该是。 当我改变模型的时候,debugging器打破了对模型的唠叨,这一定是不合理的。 这不是在那里。

|DataDirectory| 本身不是一个文件。 从这个相当老的MSDN文章引用(详细阅读完整的文章):

默认情况下, | DataDirectory | variables将被扩展如下:

  • 对于放置在用户机器目录中的应用程序,这将是应用程序的(.exe)文件夹。
  • 对于在ClickOnce下运行的应用程序,这将是由ClickOnce创build的特殊数据文件夹
  • 对于Web应用程序,这将是App_Data文件夹

在引擎盖下, | DataDirectory |的值 只是来自应用程序域的一个属性。 可以通过执行以下操作更改该值并覆盖默认行为:

 AppDomain.CurrentDomain.SetData("DataDirectory", newpath) 

关于您的模式不一致的进一步引用:

使用本地数据库文件时需要了解的一点是,它们被视为任何其他内容文件。 对于桌面项目,这意味着默认情况下,每次构build项目时,数据库文件都将被复制到输出文件夹(aka bin)。 在F5之后,这是它在磁盘上的样子

  MyProject\Data.mdf MyProject\MyApp.vb MyProject\Bin\Debug\Data.mdf MyProject\Bin\Debug\MyApp.exe 

在devise时,数据工具使用MyProject \ Data.mdf。 在运行时,应用程序将使用输出文件夹下的数据库。 作为复制的结果,许多人都有这样的印象:应用程序没有将数据保存到数据库文件。 事实上,这只是因为涉及到数据文件的两个副本。 在通过数据库浏览器查看模式/数据时同样适用。 这些工具正在使用项目中的副本,而不是bin文件夹中的副本。

| datadirectory | algorithm位于System.Data.dll程序集的内部System.Data.Common.DbConnectionOptions类中。 在这里它由ILSpy显示(请注意它现在可以在参考资源库中获得: https : //github.com/Microsoft/referencesource/blob/e458f8df6ded689323d4bd1a2a725ad32668aaec/System.Data.Entity/System/Data/EntityClient/DbConnectionOptions.cs ):

 internal static string ExpandDataDirectory(string keyword, string value, ref string datadir) { string text = null; if (value != null && value.StartsWith("|datadirectory|", StringComparison.OrdinalIgnoreCase)) { string text2 = datadir; if (text2 == null) { // 1st step! object data = AppDomain.CurrentDomain.GetData("DataDirectory"); text2 = (data as string); if (data != null && text2 == null) throw ADP.InvalidDataDirectory(); if (ADP.IsEmpty(text2)) { // 2nd step! text2 = AppDomain.CurrentDomain.BaseDirectory; } if (text2 == null) { text2 = ""; } datadir = text2; } // 3rd step, checks and normalize int length = "|datadirectory|".Length; bool flag = 0 < text2.Length && text2[text2.Length - 1] == '\\'; bool flag2 = length < value.Length && value[length] == '\\'; if (!flag && !flag2) { text = text2 + '\\' + value.Substring(length); } else { if (flag && flag2) { text = text2 + value.Substring(length + 1); } else { text = text2 + value.Substring(length); } } if (!ADP.GetFullPath(text).StartsWith(text2, StringComparison.Ordinal)) throw ADP.InvalidConnectionOptionValue(keyword); } return text; } 

所以它首先查看当前的AppDomain数据(默认情况下,没有“DataDirectory”数据定义我相信),然后到达当前的AppDomain基本目录。 其余大部分检查path根和path规范化。

在MSDN论坛上有一个类似但简单的问题,它说:

默认情况下,| DataDirectory | 指向你的应用程序文件夹(就像你在原始问题中想到的那样:到App_Data)。

由于只是数据库的替代path,所以您可以使用AppDomain.SetData自己定义path。