项目<PROJECT NAME>不是最新的.缺少输入文件'netframework,version = v4.0,profile = client.assemblyattributes.cs

che*_*cho 10 c# vb.net project visual-studio-2013

我有一个超过50个项目的sln,最近,当我搬到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
Run Code Online (Sandbox Code Playgroud)

我已阅读这些主题:

但建议是将以下行添加到proj文件中:

  <Target Name="GenerateTargetFrameworkMonikerAttribute" />
Run Code Online (Sandbox Code Playgroud)

我做了,但没有用.将警告作为MS建议抑制也将无效,因为项目将保持"不是最新".

我正在使用VS2013,C#和VB项目.使用相同的项目和VS2012,不会引发此类错误,并且项目是最新的.

有什么建议?

更新 也许值得一提的是我在解决方案中确实有一些构建定义,其中所有项目都是为AnyCPU构建的,除了一个:http://screencast.com/t/fuw9k4IubN

pic*_*rap 17

我遇到了同样的问题,并通过升级文件中的ToolsVersion属性解决了它*.csproj
ToolsVersion="4.0"替换为ToolsVersion="16.0"
(我使用的是v16.x内部的Visual Studio 2019 )。

  • 你是一个救星。我自己刚刚遇到了这个问题。我的工具版本是 15.0。将其更改为 16.0 效果很好。我必须对我的所有 21 个项目执行此操作。我认为当我升级到 Visual Studio 2019 v16.6.1 时,这种情况就开始发生在我身上。我想我跳过了 v16.6 (2认同)

Han*_*ant 6

<Target Name="GenerateTargetFrameworkMonikerAttribute" />
Run Code Online (Sandbox Code Playgroud)

好吧,这不是一个好主意,它完成了与您要解决的问题完全相反的问题。它强制 MSBuild 创建 AssemblyAttributes.cs 文件,由于该文件是新文件,因此不可避免地需要重建您的项目。您发现的 Q+A 解决了一个完全不同的问题,这些是 C++ 程序员,他们试图解决 VS2010 中的新链接器警告。他们讨厌从不属于他们项目的文件中突然出现的警告。好吧,我们不都是。顺便说一句,那个SO问题的标记答案非常邪恶,另一个人发布了一个更好的答案:)

Missing input file 'c:\users\USER\appdata\local\temp\2\.netframework...
Run Code Online (Sandbox Code Playgroud)

此消息中有一个信号,请注意该\2路径名中是否存在子目录。这是一个大红旗,这是正常的。这个自动生成的 .cs 文件通常位于 TEMP 目录中,而不是该文件夹的子目录中。当然,这与您的实际问题有关。

MSBuild 没有做任何特别的事情,只是使用 System.IO.Path.GetTempPath() 来生成文件夹名称。该方法也不是特别的,它只是将工作委托给GetTempPath() winapi 函数。因此,诊断结果是,在此构建机器上,该操作系统功能有时会生成奇数球路径,选择 TEMP 文件夹的子目录。而且它并不总是生成相同的,从而导致您的项目得到重建。

这种行为至少有一个很好的理论,评论者@Darran Rowe 在这篇博文中提到:

不,这是工作中的终端服务。当您通过远程桌面登录时,Windows 会将登录会话的临时目录设置为%LOCALAPPDATA%\Temp\<session id>

摇铃?