项目<project name =“”>不是最新的。缺少输入文件&#39; netframework,version = v4.0,profile = client.assemblyattributes.cs </project>

时间:2014-12-22 11:34:45

标签: c# vb.net visual-studio-2013 project

我有一个&gt; 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

5 个答案:

答案 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)

我遇到了同样的错误,我通过从我的解决方案中删除项目并重新添加它来解决它。这很痛苦,因为您必须重新添加项目间引用。