为什么VS 2012会从目标目录中删除文件?

时间:2015-04-28 21:18:05

标签: .net visual-studio-2012 rebuild

我已经看到了类似问题的答案,但我仍然不明白这一点...... 我有脚本将所有依赖项放在一个公共BIN目录中,该目录位于所有项目目录之外。

  • solution.snl
  • BIN
  • ProjectAFolder
  • ProjectBFolder

所有项目都引用BIN中的所有项目,并将它们构建到BIN中。这种方式构建速度更快,避免了大量混乱,其中包括许多其他好处。 但为什么哎呀VS从bin中删除了一些未引用的文件?!我有一个引用其他文件的ThirdParty.dll(所以dll必须与ThirdParty.dll在同一个文件夹中)。当我重建这些其他文件被删除!真是个好主意!或者这是一个错误?

如果我将文件设为只读,我的构建会抱怨: 43> C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets(3969,5):警告MSB3061:无法删除文件" C:\ Projects \ GITBranches \ trunk1 \ EDA \ BIN \ tibrv.dll&#34 ;.访问路径' C:\ Projects \ GITBranches \ trunk1 \ EDA \ bin \ tibrv.dll'被拒绝。

这是Microsoft.Common.targets中尝试执行此操作的行:

<!-- Delete the orphaned files. -->
<Delete
    Files="@(_CleanOrphanFileWritesInIntermediate);@(_CleanOrphanFileWritesInOutput)"
    TreatErrorsAsWarnings="true">

  <Output TaskParameter="DeletedFiles" ItemName="_CleanOrphanFilesDeleted"/>

</Delete>

有谁知道我怎么能赢?

谢谢

2 个答案:

答案 0 :(得分:0)

我认为最好的办法是将第三方文件存储在一个单独的目录中,例如:一个Lib目录。

那么您可以将它们作为预构建事件的一部分复制到bin目录中吗?

答案 1 :(得分:0)

这是你的问题:

  

“所有项目都引用了BIN中的所有项目,并将它们构建到BIN中。”

关于如何进行构建的这个想法应该被委托给“当时这是一个好主意,并且可能适用于另一个构建平台,但它现在不是很好”类别。< / p>

以前的评论/答案有点正确 - 你不应该将资源或依赖类型文件存储在构建目标的文件夹中 - MSBuild做的第一件事是清理目标文件夹,准备接收结果构建。

依赖文件可以存储在您喜欢的任何地方。您可以将它们作为链接 1 添加到项目中,然后将Build Action设置为内容,将Copy to Output Directory设置为始终复制< / em>或如果更新,则复制。

1 添加 - &gt; 现有项目,浏览并选择相关文件,然后下拉添加按钮并选择添加为链接