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



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

ProjectA
|- Content: myexe.exe with CopyIfNewer
ProjectB
|- ProjRef: ProjectA
ProjectC
|- ProjRef: ProjectB

当我运行 ProjectC 的构建时,项目 A 也构建了(例如,因为 ProjectA 不是最新的,或者因为我单击了"全部重建"(,然后 myexe.exe 被放入 ProjectC 的 bin 输出文件夹中。但是,在任何其他情况下,myexe.exe 不在 ProjectC 的 bin 输出文件夹中。

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

但是

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

测试

首先,我猜测第一个项目是一个,net框架项目,甚至三个项目都是基于框架的。在我这边,我创建了这样一个三个项目,并引用了你提到的三个项目的关系。确切地说,当我修改项目C(之前已经构建的A和B(的代码时,该文件无法如您所愿地复制到项目C中。但是,当我只有两个项目 A,B(B 项目参考:A(时,它总是将第一个项目 A 的文件复制到 B 中(每当 l 选择"始终复制"或"如果较新则复制"或构建或重建项目 B(。此外,我测试了三个基于Net Core或.Net Standard的项目,没有问题。

结论

所以这个问题的原因是指出中间项目B没有构建(最新的跳过构建(,所以项目A的文件无法复制到项目C作为中转站。(特别是对于非 SDK 框架项目(。我认为这是Visual Studio中项目参考中的一个功能或问题。或者您可以向 DC 论坛报告以获取详细说明。

溶液

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

<DisableFastUpToDateCheck> true </DisableFastUpToDateCheck>

希望它能帮助你。

最新更新