msbuild - MSBuild 传递 ProjectReference 的内容未复制以构建单元测试项目的输出
问题描述
我有以下(简化的)解决方案结构:
ProjectA
|- Content: myexe.exe with CopyIfNewer
ProjectB
|- ProjRef: ProjectA
ProjectC
|- ProjRef: ProjectB
当我运行 ProjectC 的构建时,也构建了 ProjectA(例如,因为 ProjectA 不是最新的,或者因为我单击了“全部重建”),然后 myexe.exe 被放入 ProjectC 的 bin 输出文件夹中。但是,在任何其他情况下,myexe.exe 不在 ProjectC 的 bin 输出文件夹中。
这是一个已知问题吗?难道我做错了什么?如何解决这个问题?
解决方案
但是,在任何其他情况下,myexe.exe 不在 ProjectC 的 bin 输出文件夹中。这是一个已知问题吗?难道我做错了什么?如何解决这个问题?
测试
首先,我猜测第一个项目是一个.net框架项目,甚至三个项目都是基于框架的。在我这边,我创建了这样的三个项目,并引用了你提到的三个项目的关系。确切地说,当我修改项目C的代码(A和B之前已经构建)时,文件无法按照你的意愿复制到项目C中。但是当我只有两个项目 A,B(B 项目参考:A)时,它总是将第一个项目 A 的文件复制到 B(每当我选择 Copy always 或 Copy if newer or build or rebuild the project B)。此外,我测试了三个基于 Net Core 或 .Net Standard 的项目都没有问题。
结论
所以指出这个问题的原因是中间项目项目 B没有构建(<strong>up-to-date Skips the build ),所以无法将项目 A 的文件复制到项目 C 作为中转站。(特别是对于非sdk框架项目)。我认为这是 Visual Studio 中项目参考中的一个功能或问题。或者您可以将其报告给DC 论坛以获得详细说明。
解决方案
您可以将此类属性添加到项目 B 的 csproj 文件中,以打破最新检查并确保始终构建它。您可以在 Debug 或 Release 中在 PropertyGroup 下添加此节点
<DisableFastUpToDateCheck> true </DisableFastUpToDateCheck>
希望它可以帮助你。
推荐阅读
- c# - 验证用户
- scala - 为什么我的代码没有返回任何东西?斯卡拉 fs2
- autodesk-forge - 在 Forge Autodesk Viewer 中将 3D 视图转换为 2D 视图
- git - 如何在 git 中检查我的本地仓库的当前状态?
- java - 将变量设置为局部变量而不是全局变量的好处
- android - 错误:打开失败:没有这样的文件或目录
- google-workspace - 使用 SDK/API 加入 google meet 会议并录制音频/视频?
- validation - 使用多个规则进行 Vuetify 验证
- reactjs - 遇到:Hooks 只能在函数组件的主体内部调用。这可能是由于以下原因之一
- javascript - 当屏幕尺寸发生变化时,如何停止引导程序(reactstrap)下拉菜单重新定位?