我有一个> 50个项目,最近,当我搬到VS2013时,每次按F5进行构建时,它都会重建所有项目,即使我刚刚执行了构建。诊断显示,每个项目都标记为不是最新的,并出现以下错误:
Project <PROJECT NAME> is not up to date. Missing input file 'c:\users\USER\appdata\local\temp\2\.netframework,version=v4.0,profile=client.assemblyattributes.cs
我已阅读这些主题:
但建议将以下行添加到proj文件中:
<Target Name="GenerateTargetFrameworkMonikerAttribute" />
我做了,但没有用。将警告作为MS建议抑制也将不起作用,因为项目将保持&#34;不是最新的&#34;。
我正在使用VS2013,C#和VB项目。 使用相同的项目和VS2012,不会引发此类错误,并且项目是最新的。
有什么建议吗?
更新 也许值得一提的是,我在解决方案中确实有一些构建定义,其中所有项目都是为AnyCPU构建的,除了一个:http://screencast.com/t/fuw9k4IubN
答案 0 :(得分:14)
我遇到了同样的问题,并通过升级ToolsVersion
文件中的*.csproj
属性来解决了这个问题:
ToolsVersion="4.0"
替换为ToolsVersion="16.0"
(我使用的是Visual Studio 2019,内部为v16.x
。
答案 1 :(得分:3)
<Target Name="GenerateTargetFrameworkMonikerAttribute" />
嗯,这不是一个好主意,它可以完成您尝试解决的问题的完全。它强制MSBuild创建AssemblyAttributes.cs文件,因为文件是新的,所以不可避免地需要重建项目。您发现的Q + A解决了完全不同的问题,这些是C ++程序员试图在VS2010中处理新的链接器警告。他们讨厌那些不属于他们项目的文件的警告。好吧,不是我们所有人。关于那个SO问题的明显答案是非常邪恶的,其他人发布了一个更好的答案:)
Missing input file 'c:\users\USER\appdata\local\temp\2\.netframework...
此消息中有一个信号,请注意该路径名中存在\2
子目录。这是一个大红旗,不正常。此自动生成的.cs文件通常位于TEMP目录内,而不是该文件夹的子目录中。当然这与你的真实问题有关。
MSBuild没有做任何特别的事情,只是使用System.IO.Path.GetTempPath()来生成文件夹名称。该方法也不特殊,它只是将作业委托给GetTempPath() winapi函数。因此,诊断是在该构建机器上,OS功能有时会生成奇数路径,从而选择TEMP文件夹的子目录。并且它并不总是生成相同的项目,从而导致您的项目重建。
评论者@Darran Rowe this blog post提到了这种行为至少有一个很好的理论:
不,这是工作中的终端服务。当您通过远程桌面登录时,Windows会将登录会话的临时目录设置为
%LOCALAPPDATA%\Temp\<session id>
敲响铃声?
答案 2 :(得分:0)
尝试删除隐藏的.vs指令,该指令与解决方案文件位于同一文件夹中。
答案 3 :(得分:0)
这对我有用
关闭Visual Studio并从项目中删除.sou文件
答案 4 :(得分:0)
我遇到了同样的错误,我通过从我的解决方案中删除项目并重新添加它来解决它。这很痛苦,因为您必须重新添加项目间引用。