gpt4 book ai didi

c# - Visual Studio 2017 一遍又一遍地构建项目

转载 作者:太空宇宙 更新时间:2023-11-04 12:41:11 32 4
gpt4 key购买 nike

我有一个很大的解决方案(约 450 个项目),其中一些项目一遍又一遍地构建,尽管我没有做任何更改。

当我将构建输出详细程度更改为 diagnostic 时,它说:

Project 'ProjectA' is not up to date. Missing input file 'C:\Src\Project.Core\Bin\Release\ProjectB.dll'

ProjectA 依赖于 ProjectB 并且我正在构建配置 Debug,那么为什么 Visual Studio 会检查文件 ProjectB。 dllRelease 文件夹中? ProjectB.dll 生成并复制到正确的文件夹中(调试)!

每个项目(c# 和 c++)的输出路径都相同:

<OutputPath>$(SolutionDir)Bin\$(Configuration)\</OutputPath>

这只是一个例子。我的解决方案中的多个项目都有这种奇怪的行为。似乎是 C++ 项目导致的,但我没有明确的证据。

这是我对文件访问的 Process Monitor 分析:

enter image description here

更新 1:

ProjectA(C# 项目)使用 ProjectReference 引用 ProjectB(C++ 项目):

<ProjectReference Include="..\..\ProjectB.vcxproj">
<Project>{F2F4C146-8A98-432B-BB9F-A06C4B4162CF}</Project>
<Name>ProjectB</Name>
</ProjectReference>

更新 2:

.NET Core 项目有这个设置:

enter image description here

针对 .NET Framework 的项目是否有类似的东西?

更新 3:

似乎 C# 项目的 FastUpToDateCheck 代码在 csproj.dll 程序集中。由于它是 native 程序集,因此我无法查看代码。真可惜。

最佳答案

问题不是您的所有项目都在解决方案文件 (.sln) 中。鉴于您正在使用项目引用。即 <ProjectReference
当某些项目位于解决方案文件 (
.sln) 中,并且它们引用解决方案文件之外的另一个项目时,MSBuild 将构建另一个项目,但不会使用您正在构建的配置。它总是或通常(一个错误)将使用您正在使用的相反配置构建。

Super Duper 烦人的 bug 顺便说一句。

作为一种变通方法,您可以只声明一个包含所有项目的 ItemGroup,然后直接将其传递给 MSBuild 而根本不使用解决方案。

<ItemGroup>
<Files Include="**\*.csproj" />
<Files Include="**\*.vcxproj" />
</ItemGroup>

<Target Name="Build">
<MSBuild Projects="@(Files)" Properties="Configuration=Debug" />
</Target>

如果他们都使用<ProjectReference , 然后 MSBuild 将自动确定它们的内置顺序。

或者您可以创建一个包含所有内容的解决方案。

关于c# - Visual Studio 2017 一遍又一遍地构建项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54185133/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com