【问题标题】:Copy to output dir in csproj, with transitive dependencies复制到 csproj 中的输出目录,具有传递依赖项
【发布时间】:2018-06-22 20:21:44
【问题描述】:

我有一个项目 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 没有影响。

附:我还尝试了预构建事件来在构建项目之前清理我的项目 - 不起作用,因为启动项目 A 在未修改时不会触发构建,因此没有进行清理。

【问题讨论】:

    标签: c# csproj mdf output-directory


    【解决方案1】:

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

    这个问题最简单的解决方案可能是在打开文件之前复制文件,以便在启动时始终恢复到原始状态。最佳情况下,您甚至可以将其复制到用户文件夹,因为一旦程序在用户计算机上的调试器之外运行(通常不允许程序写入“程序文件”目录或其子文件夹)。

    【讨论】:

    • 感谢您的建议 - 看起来是一个可行的解决方案,但是我选择了另一种方法,您可以在下面的自我回答中看到
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2010-10-30
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 2011-02-09
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多