代码之家  ›  专栏  ›  技术社区  ›  Greg

一键部署-我如何确保只有当sqlite数据库文件不存在时才能复制它?

  •  3
  • Greg  · 技术社区  · 15 年前

    背景——我开始使用一个WiFrm应用程序的单击一次部署,该应用程序拥有SQLite数据库文件,它保存了准备好的空白数据库结构。

    问题-如何设置,以便单击一次部署(通过发布,在VS2008中)将确保用户下载时将:

    • a)如果不存在,则将文件复制到中,否则
    • b)不要将文件复制到中,而是检查是否应该运行升级脚本。

    谢谢

    2 回复  |  直到 15 年前
        1
  •  2
  •   dugas    15 年前

    这并不能直接回答你的问题,但我认为这些信息对你计划如何处理你的情况是有用的。读 here (尤其是标题为“数据目录和应用程序版本”的部分)了解ClickOnce如何处理数据目录中的文件。此外,要将数据库视为数据文件,请确保数据库文件标记为数据文件(在vs.net中-转到项目属性-项目-应用程序文件-确保“发布状态”为“数据文件”)。下面我已经粘贴了我所指的那篇文章中的部分。您可能想探索的一件事是使用isfirstrun属性-然后检查数据库是否存在,如果不在运行时创建,如果需要更新,则更新,等等。(使用此方法,您可能希望在ClickOnce数据目录的“外部”创建数据库,或者在运行时在部署中不存在的数据目录内部创建一个新数据库,以便可以控制更新对数据库的影响)。

    “数据目录和应用程序版本

    应用程序的每个版本都有自己的数据目录,该目录与其他版本隔离。无论部署中是否包含任何数据文件,ClickOnce都会创建此目录,这样应用程序就可以在运行时创建新的数据文件。安装新版本的应用程序后,ClickOnce会将以前版本的数据目录中的所有现有数据文件复制到新版本的数据目录中,无论它们是包含在原始部署中还是由应用程序创建。

    如果数据文件在旧版本的应用程序中具有与新版本不同的哈希值,ClickOnce将用新版本的服务器替换旧版本的文件。此外,如果应用程序的早期版本创建了与新版本部署中包含的文件同名的新文件,则ClickOnce将用新文件覆盖旧版本的文件。在这两种情况下,旧文件都将包含在名为.pre的数据目录内的子目录中,以便应用程序仍然可以访问旧数据进行迁移。

    如果需要更细粒度的数据迁移,可以使用ClickOnce部署API执行从旧数据目录到新数据目录的自定义迁移。您必须使用isfirstrun测试可用的下载,使用update或updateasync下载更新,并在更新完成后自行执行任何自定义数据迁移工作。”

        2
  •  0
  •   Greg    15 年前

    也许“迁移网络”很适合我的问题?

    发现它在: http://code.google.com/p/migratordotnet/wiki/GettingStarted