我有一个包含大约50个C#项目的Visual Studio 2013解决方案。通常,如果我选择构建(F6),它只会构建已更改的项目。但有时在我关闭并重新启动我的PC后,它会在我选择构建时重建所有内容(F6)。为什么?
当我重新启动电脑时,这不会发生。大多数时候,它表示重启后所有项目都是最新的。但有时它会重建所有。
我看了下面的问题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在重新启动PC后有时会重建未修改的项目
导致此问题的一种可能性是构建帐户失去了对temp
文件夹的权限。要解决此问题,您可以尝试将权限read/write/execute
授予temp
文件夹,或者尝试以管理员身份运行visual studio以查看它是否与权限相关。
众所周知,如果我们在visual studio中打开/构建项目,.NETFramework,Version=v4.x.AssemblyAttributes.cs
会自动出现在temp
文件夹中。如果您在重新启动PC后失去了对temp
文件夹的权限或者没有以管理员身份运行visual studio,我们无法访问temp
文件夹,那么Visual Studio将报告它无法在version=v4.5.assemblyattributes.cs
文件夹中找到文件temp
。
或者,您也可以通过向项目文件添加以下属性,将此文件生成到Intermediate目录(通常称为obj):
<PropertyGroup>
<TargetFrameworkMonikerAssemblyAttributesPath>$([System.IO.Path]::Combine('$(IntermediateOutputPath)','$(TargetFrameworkMoniker).AssemblyAttributes$(DefaultLanguageSourceExtension)'))</TargetFrameworkMonikerAssemblyAttributesPath>
</PropertyGroup>
证书:MSBuild: unnecessary rebuilds because of generated AssemblyAttributes.cs
希望这可以帮助。