Azure持续集成覆盖App_Data,即使指定了“排除应用程序数据”的WebDeploy文件

时间:2013-04-22 20:57:24

标签: deployment azure web-deployment azure-web-sites

我有一个Windows Azure网站,我已经与托管的Team Foundation Server建立了Azure持续集成。我在本地副本上进行了更改,提交到TFS,然后将其发布到Azure。这很好,问题是我在〜\ App_Data \文件夹中有一个Access数据库,当我签入时,Azure上的副本被覆盖。

我将Web部署发布配置文件设置为“Exclude App_Data”,并将构建任务配置为使用Web部署配置文件,现在它删除了我的〜\ App_Data \文件夹。

有没有办法配置Azure Continuous Integration来部署所有内容并单独保留App_Data?

1 个答案:

答案 0 :(得分:0)

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

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

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

我还使用App_Data存储一些我想要修改Web服务器(ASP.NET代码)的文件,并使其保持最新状态。

解决方案是:

  1. 允许网络发布上传App_Data,无需排除。
  2. 不要将文件存储在要在网络上修改的App_Data(本地)中。
  3. 让网络服务器专门负责创建和修改文件。
  4. 理想情况下,您不必更改任何代码,如果需要,服务器可以创建一个空白文件。

    但是,如果您必须从一些内容开始,例如,新的空白.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);