Visual Studio 有时会在 PC 重启后重建未修改的项目

Visual Studio Rebuilds unmodified projects sometimes after a PC reboot

我有一个 Visual Studio 2013 解决方案,包含大约 50 个 C# 项目。通常,如果我 select 构建 (F6),它只会构建已更改的项目。但有时在我关闭并重新启动我的电脑后,它会在我 select 构建 (F6) 时重建所有内容。为什么?

当我重新启动 PC 时,这种情况不会一直发生。大多数时候它说所有项目在重启后都是最新的。但有时它会重建所有。

我看了下面的问题 Visual Studio Rebuilds unmodified projects 及其答案。

我做的下一步是将构建输出详细程度设置为诊断。

PC 重启后 Visual Studio 全部重建时,我得到以下输出:

1>Project 'Project1' is not up to date. Missing input file
...

有更多行(超过 1000 行)。我看了看,但我还是不明白为什么 Visual Studio 重建项目。

更新

为什么Visual Studio需要以下文件?

1>Project 'Project1' is not up to date. Missing input file
'c:\users\wo\appdata\local\temp\.netframework,version=v4.5.assemblyattributes.cs'.
...

Visual Studio Rebuilds unmodified projects sometimes after a PC reboot

导致此问题的一种可能是建筑帐户失去了对 temp 文件夹的权限。 要解决此问题,您可以尝试将权限 read/write/execute 授予 temp 文件夹,或者尝试 运行 visual studio as administrator 看看是不是权限相关。

我们知道,如果我们 Open/Build visual studio 中的一个项目,.NETFramework,Version=v4.x.AssemblyAttributes.cs 会自动出现在 temp 文件夹中。如果你在重启PC后失去了对temp文件夹的权限或者不是运行visual studio管理员,我们无法访问temp文件夹,然后Visual Studio会报告它在 temp 文件夹中找不到文件 version=v4.5.assemblyattributes.cs

或者,您也可以通过将以下内容 属性 添加到项目文件中,将此文件生成到中间目录(通常称为 obj):

  <PropertyGroup>
    <TargetFrameworkMonikerAssemblyAttributesPath>$([System.IO.Path]::Combine('$(IntermediateOutputPath)','$(TargetFrameworkMoniker).AssemblyAttributes$(DefaultLanguageSourceExtension)'))</TargetFrameworkMonikerAssemblyAttributesPath>
  </PropertyGroup>

凭据:MSBuild: unnecessary rebuilds because of generated AssemblyAttributes.cs

希望对您有所帮助。

对于未来的旅行者,我认为这也只是当前版本 Visual Studio 2019、16.6 及更新版本中的一个错误。

我使用 Visual Studio 2019 版本 16.6.0 和 16.6.1 时会出现此问题。我有跨版本的 C# 项目,对于 2010、2015、2017 或 2019 16.5 及更早版本,在同一台机器和同一用户上,在同一文件夹和解决方案中具有同一项目。

对于最近的 2019 版本(上个月左右,2020 年 5 月和 6 月 1 日),我收到类似的消息:

1>项目 'Banana' 不是最新的。缺少输入文件 'c:\users\banana\appdata\local\temp.netframework,version=v4.7.2.assemblyattributes.cs'。

如果我清理然后构建,那么它是正常的。如果我 运行 一个连续的构建我得到错误。

无论是否重新启动,甚至在清理临时文件夹之后,或者如果我 运行 Visual Studio 是否使用管理员,都会发生这种情况。它试图找到的路径确实存在,如果粘贴到资源管理器中会弹出。

我已经用新文件夹完全清理了除代码文件之外的所有文件,但我遇到了同样的问题。对我来说,它只适用于 C# 项目。所以我认为这是一个 16.6 错误。

查看最近的更改:

KirillOsenkov commented on Jan 4 2020

@livarcocc would it be possible to prioritize this? This is an impactful issue that's very easy to fix and has been open for three years now. Seems like low-hanging fruit.

bording commented on Feb 12 2020

With the fix for this being merged into master now, which release will it be a part of? I see that this issue is on the 16.5 milestone, so does that mean it will be in that release, or does the fix also need to be ported to another branch?

tmat commented on Feb 12 2020

@bording I updated the milestone to 16.6 as I believe master is 16.6.

https://github.com/microsoft/msbuild/issues/1479