复制到csproj中的输出目录,具有传递依赖性

时间:2018-01-13 16:49:47

标签: c# csproj mdf output-directory

我有一个项目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,未修改时,不会触发构建,因此不会进行清理。

2 个答案:

答案 0 :(得分:1)

基本上,这是数据文件的正常行为。如果构建项目,它们只会复制到目标文件夹,只有在源已更改时才会发生。您可以调整构建过程以强制每次构建,但这不是一个好的解决方案,并且在没有任何更改时不必要地为您的项目添加构建时间。

对于此问题,最简单的解决方案可能是在打开文件之前复制该文件,以便在启动时始终将其恢复到原始状态。最理想的是,您甚至可以将其复制到用户文件夹,因为如果程序在用户计算机上的调试器外运行,则在读/写模式下打开bin文件夹中的文件时会遇到问题(通常不允许程序使用写入“程序文件”目录或其子文件夹)。

答案 1 :(得分:0)

最后我决定添加一个公共文件的链接。所以在我的项目A中,我有一个相对链接../B/myDB.mdf。它不是最好的解决方案,因为项目现在引用了域文件夹以外的东西,但它似乎比自定义复制脚本更好。