我有一个项目A和一个项目B.项目A依赖于项目B. B包含一个我想在A中附加的数据库文件(.mdf)。
要做到这一点,我只需使用
<add name="myDB"
connectionString="Data Source=(LocalDB)\mssqllocaldb;
AttachDbFilename=|DataDirectory|\myDB.mdf;
Database=some_alias_for_myDB;
Integrated Security=True" />
然后,我构建项目A并启动它并成功使用myDB
。 但是,我希望每次启动项目A 时,都要从myDB
的新副本开始。如果myDB.mdf
是项目A的一部分,我只需在Copy to Output Directory : Copy Always
上添加一个属性myDB.mdf
。在传递性地接收myDB.mdf
的情况下,属性Copy to Output Directory
的值对项目A没有影响。
P.S。在构建项目之前,我还尝试了预构建事件来清理我的项目 - 不起作用,因为启动项目A,未修改时,不会触发构建,因此不会进行清理。
答案 0 :(得分:1)
基本上,这是数据文件的正常行为。如果构建项目,它们只会复制到目标文件夹,只有在源已更改时才会发生。您可以调整构建过程以强制每次构建,但这不是一个好的解决方案,并且在没有任何更改时不必要地为您的项目添加构建时间。
对于此问题,最简单的解决方案可能是在打开文件之前复制该文件,以便在启动时始终将其恢复到原始状态。最理想的是,您甚至可以将其复制到用户文件夹,因为如果程序在用户计算机上的调试器外运行,则在读/写模式下打开bin文件夹中的文件时会遇到问题(通常不允许程序使用写入“程序文件”目录或其子文件夹)。
答案 1 :(得分:0)
最后我决定添加一个公共文件的链接。所以在我的项目A中,我有一个相对链接../B/myDB.mdf
。它不是最好的解决方案,因为项目现在引用了域文件夹以外的东西,但它似乎比自定义复制脚本更好。