Visual Studio 持续在非预期位置复制数据库的问题求助
我完全懂你现在的糟心感受——明明按要求把Access数据库放在Debug文件夹了,结果Visual Studio偏要在莫名其妙的位置复制一份,导致你的连接字符串根本找不到正确的文件。别慌,咱们一步步把这个问题搞定:
检查数据库文件的属性设置(最关键一步)
打开Visual Studio的解决方案资源管理器,找到你的ResourceData.accdb文件,右键选择属性:- 把复制到输出目录的选项改成如果较新则复制或者不复制:如果希望手动维护Debug文件夹里的数据库,选「不复制」;如果需要项目里的源数据库更新时同步到Debug目录,选「如果较新则复制」,避免每次编译都无脑复制。
- 确认生成操作设置为内容,这样文件会被识别为项目资源,不会被当成编译文件处理。
搞清楚
|DataDirectory|的实际指向
有时候你以为|DataDirectory|就是Debug文件夹,但调试时的工作目录可能和你想的不一样。可以在代码里加一行调试代码,看看真实路径:Console.WriteLine(AppDomain.CurrentDomain.GetData("DataDirectory"));运行后就能看到
|DataDirectory|对应的真实路径,这样就能判断数据库是不是被复制到了这个路径之外的地方。手动清理多余的数据库副本
VS有时候会在bin/Release、obj目录或者临时缓存里留下旧的数据库文件。你可以手动删除项目的bin和obj文件夹,然后重新生成解决方案,确保只有Debug文件夹里的数据库是唯一的有效副本。打包交付的额外注意
因为要打包给客户,记得在打包项目(比如ClickOnce或安装项目)里,把ResourceData.accdb设置为必须包含的文件,并且指定安装后放在和应用程序相同的目录下,这样|DataDirectory|就能正确指向这个位置,避免客户运行时找不到数据库。
按照这几步操作,基本就能解决VS乱复制数据库的问题了。如果还有问题,可以再检查下连接字符串的拼写,或者确认Debug文件夹的读写权限是否正常。
内容的提问来源于stack exchange,提问作者tevr0c

