VS2019 ClickOnce发布生成双EXE文件夹,启动指向无MDF数据库的错误目录
问题原因
ClickOnce默认采用隔离式部署结构,会自动生成两类功能不同的目录:
- 后缀为
..tion_xxxx的目录是部署入口目录:存储ClickOnce启动器、程序清单、主程序exe文件,开始菜单的快捷方式默认指向该目录下的可执行文件 - 后缀为
.exe_xxxx的目录是数据文件专属目录:所有被标记为「数据文件」类型的发布内容,都会被ClickOnce自动存入该目录,和主程序文件隔离,你配置的MDF、LDF就属于这类文件,所以只会出现在这个目录下
解决方法
方案1:调整发布配置(无需修改代码,推荐)
直接修改发布规则让数据库文件和主程序放在同一目录:
- 打开VB项目的「项目属性」面板,切换到「发布」选项卡
- 点击「应用程序文件」按钮,在弹出的列表中找到
XilogData.mdf和XilogData_log.ldf两个文件 - 将两个文件的「发布状态」从默认的「数据文件」修改为「包含」,「下载组」保持为「必需」,点击确定保存
- 重新发布安装包即可,新版本发布后所有文件都会存入入口目录,快捷方式指向的程序可直接读取到同路径下的数据库文件
方案2:修改数据库连接字符串(无需调整发布配置)
如果不想改动发布规则,可以直接修改代码中读取数据库的路径逻辑,调用ClickOnce官方API获取数据文件目录:
' 引入命名空间 Imports System.Deployment.Application ' 拼接正确的数据库文件路径 Dim dbPath As String = If(ApplicationDeployment.IsNetworkDeployed, Path.Combine(ApplicationDeployment.CurrentDeployment.DataDirectory, "XilogData.mdf"), Path.Combine(Application.StartupPath, "XilogData.mdf")) ' 生成连接字符串时使用上述dbPath变量即可
该方法会自动判断运行环境,Debug时读取项目目录的MDF,发布后自动读取数据专属目录的MDF,不需要改动文件的发布配置。
内容的提问来源于stack exchange,提问作者Craig Abbott
相关产品推荐
相关产品推荐

