8

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

C:\inetpub\wwwroot\appname\App_Data

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

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

在开发机器上一切都很好,但是当我部署到服务器时,AppData 被放置在bin\. 我使用任何 Visual Studio 2010 项目中所示的 AppData 并使用“构建部署包”(VS2010)然后“导入应用程序”(IIS 管理器)进行部署。

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

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

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

4

3 回答 3

4

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

于 2014-01-11T03:12:32.047 回答
2

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

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

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

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

于 2015-12-21T13:37:01.383 回答
1

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

在此处输入图像描述

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

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

于 2020-12-09T16:23:40.300 回答