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 )。
<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>
摇铃?