我有一个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
希望这有帮助。