MSBuild可传递项目引用';未将的内容复制到单元测试项目的生成输出

MSBuild可传递项目引用';未将的内容复制到单元测试项目的生成输出,msbuild,visual-studio-2019,Msbuild,Visual Studio 2019,我有以下(简化的)解决方案结构: ProjectA |- Content: myexe.exe with CopyIfNewer ProjectB |- ProjRef: ProjectA ProjectC |- ProjRef: ProjectB 当我运行构建了ProjectA的ProjectC时(例如,因为ProjectA不是最新的,或者因为我单击了“全部重建”),myexe.exe会被放入ProjectC的bin输出文件夹中。但是,在任何其他情况下,myexe.exe都不在Proje

我有以下(简化的)解决方案结构:

ProjectA
|- Content: myexe.exe with CopyIfNewer

ProjectB
|- ProjRef: ProjectA

ProjectC
|- ProjRef: ProjectB
当我运行构建了ProjectA的ProjectC时(例如,因为ProjectA不是最新的,或者因为我单击了“全部重建”),myexe.exe会被放入ProjectC的bin输出文件夹中。但是,在任何其他情况下,myexe.exe都不在ProjectC的bin输出文件夹中

这是一个已知的问题吗?我做错什么了吗?如何解决这个问题

但是,在任何其他情况下,myexe.exe都不在ProjectC的bin输出中 文件夹。 这是一个已知的问题吗?我做错什么了吗?如何解决这个问题

测试

首先,我猜第一个项目是一个网络框架项目,甚至三个项目都是基于这个框架的。在我这边,我创建了这三个项目,并引用了你提到的这三个项目的关系。确切地说,当我修改了C项目的代码(A和B之前已经构建过)时,该文件无法按照你的意愿复制到C项目中。但当我只有两个项目A,B(B项目参考:A)时,它总是将第一个项目A的文件复制到B中(每当我选择“始终复制”或“更新时复制”或“构建或重建项目B时复制”)。此外,我测试了三个基于Net Core或.Net标准的项目,没有任何问题

结论

因此,这个问题的原因是中间项目,项目B,没有生成(最新跳过生成过程),因此项目A的文件不能复制到项目C作为中转站。(特别是对于非sdk框架项目).我认为这是Visual Studio项目参考中的一个特性或问题。或者您可以向报告以获得详细解释

解决方案

您可以将此类属性添加到项目B的csproj文件中,以打破最新检查并确保始终生成该属性。您可以在调试或发布时将此节点添加到PropertyGroup下

 <DisableFastUpToDateCheck> true </DisableFastUpToDateCheck>
true

希望它能对您有所帮助。

谢谢。我意识到,即使没有中间项目,问题也会发生。如果未生成ProjectA,内容输出也不会复制到ProjectB的输出中!我在上创建了一个问题,目前,我们使用了一种解决方法:我们向ProjectC添加了一个后期生成步骤,可以从中手动复制内容项目a。