【问题标题】:|DataDirectory| returns wrong path to AppData folder|数据目录|返回 AppData 文件夹的错误路径
【发布时间】:2013-09-13 10:57:07
【问题描述】:

|DataDirectory|,你只有一份工作。 IIS7.5 上的 |DataDirectory| 解析为:

C:\inetpub\wwwroot\appname\App_Data

该文件夹不存在。正确的文件夹是:

C:\inetpub\wwwroot\appname\bin\App_Data

在开发机器上一切正常,但是当我部署到服务器时,AppData 被放置在bin\ 中。我使用任何 Visual Studio 2010 项目中所示的 AppData,并使用“Build Deployment Package”(VS2010)然后“Import Application”(IIS 管理器)进行部署。

我知道我可以使用 AppDomain.SetData 或类似工具手动设置路径,但我对该功能的解释是返回正确的位置以在不同的服务器上进行部署。如果我必须对该路径进行硬编码,这不是很有用。

连接字符串:"Data Source=|DataDirectory|\db.sqlite;"

如何让 |DataDirectory| 返回 AppData 路径或阻止创建不必要的 bin\ 文件夹?

【问题讨论】:

  • 我希望你的意思是@"Data Source=|DataDirectory|\db.sqlite;",否则它会寻找一个名为App_Datadb.sqlite的文件。
  • 我都试过了,而且都有效。问题中的已解决目录是来自<h1>@AppDomain.CurrentDomain.GetData("DataDirectory")</h1> 的复制和粘贴(奇怪的是没有记录)。

标签: .net asp.net-mvc .net-4.0 connection-string


【解决方案1】:

对我来说它也坏了。我尝试了“复制/不复制”的各种组合并更改了“ExcludeApp_Data”参数,但无法使其在 Visual Studio 和已发布版本之间保持一致。为了避免在服务器上有两个数据副本,我最终将应用程序更改为首先检查 App_Data 文件夹,如果没有找到则查看 bin/App_Data 文件夹。

【讨论】:

  • 同样,在我的 web api 中从 app_data 访问 .cer 文件时遇到了类似的问题。使用 blob 存储可能是一种选择,但我将使用相同的方法在两个位置之间交替。不是一个非常干净的方法,但这似乎是一个必要的邪恶,
【解决方案2】:

一种方法是不在 C# 源代码中对路径进行硬编码,而是将其放在 web.config 中。然后,您可以使用本地 VisualStudio Web 服务器的一个路径进行测试,并使用修改后的路径通过 IIS 进行生产。

额外的好处是您的 App_Data 树的文档,例如:

<appSettings>    
  <add key="ProjABCstyledir" value="~/bin/App_Data/ABCstyles" />
  ...
</appSettings>

在您的代码中,您应该使用 Server.MapPath() 来解析波浪号。

【讨论】:

    【解决方案3】:

    在 Visual Studio 中,确保为App_Data 文件夹中的每个文件正确设置属性:

    如果有 任何 个文件的 Build Action = Content,这将在构建期间创建一个 appname\App_Data 文件夹,其中包含该文件的副本。

    复制到输出目录 = 不复制,防止将文件副本放在appname\bin\App_Data 中。如果所有文件都设置为不复制,则在构建过程中不会创建该文件夹。

    【讨论】:

    • 我从某人那里接手了一个项目,他们将该文件添加为“嵌入式资源”。将文件重新添加为内容并且不要复制为我解决了这个问题。
    猜你喜欢
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 2014-02-07
    • 1970-01-01
    • 2011-10-14
    • 2013-07-02
    • 2014-03-08
    相关资源
    最近更新 更多