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



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

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

我看了以下问题Visual Studio Rebuild未修改的项目及其答案。

我执行的下一步是将生成输出详细程度设置为诊断。

当 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:userswoappdatalocaltemp.netframework,version=v4.5.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>'香蕉'项目不是最新的。缺少输入文件 'c:\users\banana\appdata\local\temp.netframework,version=v4.7.2.assemblyattributes.cs'。

如果我清洁然后构建,那么它很正常。如果我运行连续构建,则会出现错误。

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

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

查看最近的更改:

基里尔·奥森科夫在2020年1月4日评论

@livarcocc可以优先考虑这一点?这是一个非常容易解决的有影响力的问题,并且已经开放了三年。似乎是唾手可得的果实。

博丁于2020年2月12日评论道

现在,对此的修复程序已合并到master中,它将是哪个版本的一部分?我看到此问题在 16.5 里程碑上,那么这是否意味着它将在该版本中,或者修复程序是否需要移植到另一个分支?

tmat 于 Feb 12 2020 发表评论

@bording 我将里程碑更新为 16.6,因为我相信大师是 16.6。

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

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

导致此问题的一种可能性是建筑物帐户丢失了对temp文件夹的权限。若要解决此问题,可以尝试授予对temp文件夹read/write/execute的权限,或者尝试以管理员身份运行 Visual Studio以查看它是否与权限相关。

众所周知,如果我们在Visual Studio中打开/构建一个项目,.NETFramework,Version=v4.x.AssemblyAttributes.cs会自动出现在temp文件夹中。如果您在重新启动PC或未以管理员身份运行Visual Studio后失去了对temp文件夹的权限,则无法访问temp文件夹,则Visual Studio将报告它无法在temp文件夹中找到version=v4.5.assemblyattributes.cs的文件。

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

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

凭据:MSBuild:由于生成的程序集属性,不必要的重新生成.cs

希望这有帮助。

最新更新