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

Copy to output dir in csproj, with transitive dependencies

我有一个项目 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 的一部分,我会简单地在 myDB.mdf 上放一个 属性 Copy to Output Directory : Copy Always。在传递接收到 myDB.mdf 的情况下,属性 Copy to Output Directory 的值对项目 A 没有影响。

P.S。我还尝试了预构建事件以在构建项目之前清理我的项目 - 不起作用,因为启动项目 A,当未修改时,不会触发构建,因此没有完成清理。

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

可能解决此问题的最简单方法是在打开文件之前复制该文件,以便它在启动时始终恢复到其原始状态。最理想的情况是,您甚至可以将其复制到用户文件夹,因为一旦程序 运行 在调试器之外,如果您以 read/write 模式打开 bin 文件夹中的文件,您将 运行 遇到问题用户计算机(通常不允许程序写入 "program files" 目录或其子文件夹)。

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