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

Why VS 2012 removes files from my destination directory?

我看过类似问题的答案,但我还是不明白这个... 我有将所有依赖项放入公共 BIN 目录的脚本,该目录位于所有项目目录之外。

所有项目都引用 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"。访问路径 '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>

有谁知道我怎么才能赢?

谢谢

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

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

这是你的问题:

"All projects reference everything from BIN and they build into BIN. "

关于如何构建的想法应归入 "it was a good idea at the time and might have worked for another build platform but it's not so good now" 类别。

前面的 comments/answers 有点正确 - 您不应将资源或依赖类型文件存储在作为构建目标的文件夹中 - MSBuild 做的第一件事是清除目标文件夹,准备好接收构建结果。

依赖文件可以存储在任何你喜欢的地方。您可以将它们作为 link1 添加到项目中,然后将它们的 Build Action 设置为 ContentCopy to Output Directory 始终复制 如果较新则复制

1 添加 -> 现有项目,浏览并select依赖文件,然后下拉添加按钮并选择 添加为 link