项目<项目名称>不是最新的.缺少输入文件 'netframework,version=v4.0,profile=

本文关键字:项目 netframework version profile v4 文件 输入 最新 | 更新日期: 2023-09-27 18:35:08

我有一个包含> 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

我已经阅读了这些线程:

  • 在Visual Studio 2010中,为什么是.NETFramework,Version=v4.0.AssemblyAttributes.cpp 文件已创建,我可以禁用它吗?

  • https://social.msdn.microsoft.com/Forums/vstudio/en-US/15d65667-ac47-4234-9285-32a2cb397e32/migration-from-vs2008-to-vs2010-and-netframeworkversionv40assemblyattributescpp?forum=vcgeneral

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

  <Target Name="GenerateTargetFrameworkMonikerAttribute" />

我做到了,但没有用。将警告作为MS建议抑制也将不起作用,因为该项目将保持"不是最新的"。

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

有什么建议吗?

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

项目<项目名称>不是最新的.缺少输入文件 'netframework,version=v4.0,profile=

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

<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 函数。 因此,诊断是,在此生成计算机上,该操作系统函数有时会生成一个奇怪的路径,选取 TEMP 文件夹的子目录。 而且它并不总是生成相同的项目,从而导致您的项目被重建。

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

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

敲钟?

尝试删除与解决方案文件位于同一文件夹中的隐藏 .vs directry。

这对

我有用

关闭视觉工作室并从项目中删除 .sou 文件

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