Visual Studio从Rebuild而不是Build的依赖项项目中复制“ Content”文件

5 c# visual-studio visual-studio-2017

我有两个项目的解决方案:

  • 项目A
    • 这是一个C#控制台应用程序。
  • 项目B
    • 这是一个C#类库。

项目A通过项目依赖项引用项目B。
项目B包含一个文件夹,并且该文件夹中有一些文件。

这些文件的属性设置为:

  • Build Action
    • Content
  • Copy to Output Directory
    • Copy if newer(也尝试过Copy Always

当我构建项目B时,内容文件夹中的文件将复制到项目B的输出文件夹中。
例如ProjectB / bin / debug / contentfolder / files

当我重建 Project A时,内容文件夹中的文件将复制到Project A的输出文件夹中。
例如ProjectA / bin / debug / contentfolder / files

当我构建项目A时,内容文件夹中的文件不会复制到项目A的输出文件夹中。
例如,ProjectA / bin / debug / contentfolder / 这里没有文件


我可以理解Visual Studio是否由于某种原因“看不到”依赖项目中的文件,并且这些文件从未复制到ProjectA的输出中。

但这不是事实,因为它在重建期间有效。

因此,感觉就像是我做错了什么,没有注意到,或者Visual Studio做错了,需要修复。

我发现了与我的问题类似的问题:Visual Studio构建与重建:为什么有时仅将我的DLL复制到输出目录中?

但是,它没有任何答案,并且也不是重复的,因为我更明确地说明了我的解决方案布局以及发生这种情况的情况。

有一个较旧的问题,这里有一个可接受的答案:为什么本机DLL不复制到输出目录

但它说:(
注意:他们对A / B项目的使用与我的相反。)

如果C#项目B直接引用项目A,则VS会将项目A使用的所有相关文件复制到项目B的输出目录中。

在我看来,这显然没有发生,这是我提出问题的基础!


对我来说,有两种变通方法:

  1. 内容文件夹和文件可以添加到控制台项目。
  2. 控制台项目完成构建后,可以使用构建后事件来复制文件。

但是它们都有相同的缺点:

  • 这没必要!在Rebuild下可以正常工作的事实表明,它也可以在Build上工作,但是出了点问题。

  • 这是开发人员在添加对项目B的引用时必须意识到的手动更改,并且只需采取操作即可。只需添加项目引用并使其全部正常运行,就不容易出错。

小智 1

我遇到了类似的问题 - 内容(在我的情况下是connections.config)被复制到2个项目 - 两个项目在重建时都复制了文件,但其中一个项目没有在构建时复制它。

添加了对源项目本身的引用,现在它工作得很好,我假设在构建时项目没有引用时看不到项目详细信息,而在“重建全部”时它会看到项目详细信息。