【发布时间】:2019-06-08 15:43:06
【问题描述】:
我有一个大解决方案(约 450 个项目),其中一些项目正在一遍又一遍地构建,尽管我没有改变任何东西。
当我将构建输出详细程度更改为 diagnostic 时,它会说:
项目“ProjectA”不是最新的。缺少输入文件 'C:\Src\Project.Core\Bin\Release\ProjectB.dll'
ProjectA 依赖于ProjectB,我正在构建配置Debug,那么为什么Visual Studio 会检查Release 文件夹中的文件ProjectB.dll? ProjectB.dll 被构建并复制到正确的文件夹中(调试)!
每个项目(c#和c++)的输出路径都是一样的:
<OutputPath>$(SolutionDir)Bin\$(Configuration)\</OutputPath>
这只是一个例子。我的解决方案中的多个项目都有这种奇怪的行为。似乎是 c++ 项目导致了这种情况,但我没有明确的证据。
这是我对文件访问的进程监视器分析:
更新 1:
ProjectA(C# 项目)使用 ProjectReference 引用 ProjectB(C++ 项目):
<ProjectReference Include="..\..\ProjectB.vcxproj">
<Project>{F2F4C146-8A98-432B-BB9F-A06C4B4162CF}</Project>
<Name>ProjectB</Name>
</ProjectReference>
更新 2:
.NET Core 项目有这个设置:
针对 .NET Framework 的项目是否有类似的东西?
更新 3:
似乎 C# 项目的 FastUpToDateCheck 的代码在 csproj.dll 程序集中。由于它是本机程序集,因此我无法查看代码。真可惜。
【问题讨论】:
-
你是如何设置依赖的?
-
这可能是您在
ProjectA中从ProjectB的Release文件夹中添加对ProjectB的引用,因为您的所有项目都在同一个解决方案中,请确保您从解决方案。 -
ProjectA 通过
ProjectReference引用 ProjectB -
这很奇怪。通常项目输出将位于路径
bin\$(Configuration)中的文件夹内,但从屏幕截图看来,您将所有项目的输出更改为位于单个解决方案文件夹中。您能否仔细检查Build选项卡中的项目ProjectB属性,以确保Configuration发布和调试输出都配置到正确的目录。 -
您的 solution's 调试配置是否设置为构建 ProjectB 的 project 调试配置?这让我多次遇到更复杂的解决方案。检查
Build -> Configuration Manager...。
标签: c# c++ visual-studio msbuild