我有以下(简化的(解决方案结构:
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>
希望它能帮助你。