1

I have a Windows Azure Website and I've setup Azure Continuous Integration with hosted Team Foundation Server. I make a change on my local copy, commit to TFS, and it gets published to Azure. This is great, the problem is that I have an Access database in the ~\App_Data\ folder and when I check-in the copy on Azure gets overwritten.

I setup a web-deploy publish profile to "Exclude App_Data" and configured the build task to use the web-deploy profile, and now it DELETES my ~\App_Data\ folder.

Is there a way to configure Azure Continuous Integration to deploy everything and leave the App_Data alone?

4

1 回答 1

0

我在 Visual Studio 中使用“发布 Web”工具,但我认为原理是相同的:

  • 如果您在本地修改文件并发布,它将覆盖网络上的任何内容
  • 如果您在本地没有文件 - 但该文件存在于网络上 - 发布后它仍将存在于网络上

默认情况下,App_Data 文件夹在此行为中没有特殊处理。这是有道理的 - 如果您在本地修改了 .aspx 或 .jpg 文件,您会希望最新版本在网络上发布,对吗?

我还使用 App_Data 存储一些我希望 Web 服务器(ASP.NET 代码)修改并使其在 Web 上保持最新的文件。

解决方案是:

  1. 允许网络发布上传 App_Data,不排除。
  2. 不要将要在 Web 上修改的文件存储在 App_Data(本地)中。
  3. 让 Web 服务器专门负责创建和修改文件。

理想情况下,您不必更改任何代码,并且服务器可以在需要开始时创建一个空白文件。

但是,如果您必须从某些内容开始,例如一个新的空白 .mdf 文件,您可以执行以下操作:

  1. 在本地/在源存储库中,创建 App_Data/blank.mdf(这将是一个起点,而不是工作文件)。
  2. 在 Global.asax 中,修改“Application_Start”以从空白起始文件创建真正的工作 .mdf 文件:

    // If the real file doesn't exist yet (first run),
    // then create it using a copy of the placeholder.
    // If it exists then we re-use the existing file.
    string real_file = HttpContext.Current.Server.MapPath("~/App_Data/working.mdf");
    if (!File.Exists(real_file))
        File.Copy(HttpContext.Current.Server.MapPath("~/App_Data/blank.mdf"), real_file);
    
于 2013-07-21T23:04:53.523 回答