你的项目没有引用“.NETFramework,版本=v4.6.2”框架。在“TargetFrameworks”中添加对“.NETFramework,版本=v4.6.2”的引用。

296

我无法运行我的单元测试。

我遇到了以下错误:

您的项目未引用“.NETFramework,Version=v4.6.2”框架。在您的项目文件的“TargetFrameworks”属性中添加对“.NETFramework,Version=v4.6.2”的引用,然后重新运行NuGet还原。

app.config中:

<startup>
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/>
</startup>

在项目 > 属性 > 应用程序 > TargetFramework (.NET Framework 4.6.2) 中,我该怎么修复它?


1
https://dev59.com/kVgQ5IYBdhLWcg3wJgiO - CodeCaster
16个回答

632

请执行以下步骤:

  1. 清理解决方案
  2. 清理 "packages" 文件夹
  3. 删除 "bin" 文件夹
  4. 删除 "obj" 文件夹

111
#3 和 #4 解决了这个问题。我原本有一个升级到 4.7.2 的分支,但是我不得不切换到另一个目标是 4.7.1 的分支。按照以下步骤解决该问题。 - jjhayter
6
需要在解决方案目录中执行另外一步操作:执行 del /S project.assets.json 命令。 - Jannes
3
https://dev59.com/qnRA5IYBdhLWcg3w_DHF#755433中有用于删除这些文件的批处理脚本。 - Vedran
8
我想知道为什么"Clean"按钮不清理"obj"文件夹,那样就可以解决这个问题了。 - HackSlash
9
快到2022年了,这种事情仍在发生!$MSFT,请修复它。 - Huy Hoang
显示剩余11条评论

74
我遇到问题的文件是项目文件夹中的 obj/project.assets.json。删除该文件并重新构建项目即可解决问题。

8
这可能是问题的答案。美妙的事实是:清理/重建不起作用。 - IssamTP
3
很好:对我来说运行良好。 - GrahamJ
2
删除 Obj 文件夹解决了问题。谢谢。 - Ahmed Osama
2
对我来说,这是由于从.NET Core切换到.NET Framework引起的,而且这个解决方案对我有效。 - undefined
2
我在预构建事件中添加了"del $(ProjectDir)\obj\*.json",以防止再次发生这种情况。 - undefined

65

我遇到了类似的问题,但是是在v4.7.2版本中。也就是说,我一直收到如下构建日志消息:

error : Your project does not reference ".NETFramework,Version=v4.7.2" framework. Add a reference to ".NETFramework,Version=v4.7.2" in the "TargetFrameworks" property of your project file and then re-run NuGet restore.

尽管看起来很相似,但以上提出的解决步骤对我都没有用。每次构建后我都会看到这条消息,没有任何东西能帮助我。

实际上,这个问题与迁移有关,我不得不将两个项目放在同一个文件夹中。其中一个项目针对.Net Core,另一个针对.Net Framework,两者都引用了相同的.Net标准库。显然,它们共享相同的obj文件夹,Core项目会在这里放置project.assets.json文件。实际上,正是这个文件干扰了Framework项目,导致其无法正常构建。即使你执行了从packages.config到PackageReference的迁移...其中之一被推荐作为可能的解决方案。

你可以尝试在Framework项目文件中添加以下片段来解决这个问题:

<Project>
  ...
  <PropertyGroup>
    <BaseOutputPath>$(MSBuildProjectDirectory)/out/$(MSBuildProjectName)/bin</BaseOutputPath>
    <BaseIntermediateOutputPath>$(MSBuildProjectDirectory)/out/$(MSBuildProjectName)/obj</BaseIntermediateOutputPath>
  </PropertyGroup>
  ...
</Project>

它立即为我工作,直到后来我仔细阅读了我们需要它以及它为什么有效的原因。 我在将示例WPF应用程序迁移到.NET Core 3第二部分中意外发现了它,位于确保.NET Framework项目仍然可以构建部分下。 那里可以找到BaseOutputPathBaseIntermediateOutputPath MSBuild变量,但不确定它们是否在任何地方都有很好的文档记录。


1
在VS2019中,我发现你提到的属性需要在OutputPath之前。我最初把它们放在csproj的底部,但没有成功。这篇帖子有一些额外的细节,并暗示这个问题可能会在某个时间得到解决:https://github.com/dotnet/msbuild/issues/2070 - John Dyer
我试图将一个解决方案从.Net Framework 4.7.2迁移到Net Core 5,并遇到了一些依赖问题。当我回退时,我遇到了这个错误。构建清理没有任何作用,但删除所有obj(和bin为了保险起见)目录让我重新回到正轨。 - Brandon Barkley
我通过将项目移动到它们各自的文件夹中解决了类似的问题。在同一文件夹中有多个csproj文件似乎会引起问题。 - PMF
同样,这解决了我的问题。我有一个扁平的文件夹结构,其中sln和项目位于同一根文件夹中。将项目移动到src\中,这解决了在Azure管道上的构建错误。 - nh43de

47
git clean -xdf

那应该就可以了。在Jenkins中,我们也这样做过。(我们只是用一个修改后的脚本重新运行失败的构建,并在其中首先运行 git clean)。

由于某些原因,当在不同的分支之间切换并针对不同版本的 .NET Framework 时,MSBuild / Visual Studio 会感到困惑,因此我不得不经常进行 git clean 清理。


3
那就是我的解决方案!谢谢! - Roni Axelrad
7
请注意,此命令将从工作树中删除所有未被跟踪的文件,包括 .gitignore 文件中定义的文件。 - Kestutis
1
当我在设置UE4并切换到另一个版本分支时,这对我很有效。 - ARtemachka

45

当我在VS2017中打开一个VS2015项目时,发生了这种情况。从obj文件夹中删除project.assets.json就解决了问题。

无论如何,消息中的框架在文件中缺失,虽然我没有添加它,但还是选择将其删除。


5
最简单的解决方案就是在解决方案中搜索文件并立即删除它们 :) - Imad
1
通用库中的预构建命令“IF EXIST $(ProjectDir)obj\project.assets.json del /F $(ProjectDir)obj\project.assets.json”对我很有用。谢谢。 - Michael Erickson

9
我删除了obj文件夹并在属性窗口中选择所需的目标框架后重新运行构建,这对我起作用了。

删除 EXE 和 DLL 项目的 bin 和 obj 文件夹对我起了作用。 - Andrew Gale

6

我点赞Larissa,但我想让大家知道我是如何解决这个问题的。我将一个.NET Standard项目文件添加到我的构建中(我们针对许多平台进行目标设置),它生成了obj文件夹中找到的垃圾文件。当执行Android稳定性构建时,它在obj文件夹上出现错误。 我的解决方案是在构建预处理阶段清空该文件夹。这是一个困难的问题,因为多年来一直都很好……就像大海捞针一样。


6
针对我的情况,删除项目文件夹下的.pkgrefgen/文件夹即可解决问题。该文件夹包含一个引用旧版 .net 框架的文件project.assets.json

4
我的问题出在 obj 文件夹中的 project.assets.json 文件上。删除 bin 和 obj 文件夹后,问题不再出现。 - Ceres

4
我在使用 .net 4.71 时也遇到了同样的问题。在我的情况下,我只是按照从 packages.config 迁移到 PackageReference的方法进行了迁移,这解决了我的问题。对我来说,我本来就打算这样做,因此如果您已经这样做了,我建议您直接跳过上面的步骤并迁移到 package references。

3

出于某种原因,我在VS2022中遇到了构建错误。

在VS2019中进行的相同构建是成功的。


1
这应该是一条评论,没有真正回答 OP 的问题。 - mxmissile
1
我可以从两个方面看待它 - 它没有解释原因,但提供了一个解决方案。我考虑过留下评论,但由于没有一个答案能够解决我的问题,我选择为其他和我一样的人发布一个答案。 - Greg Trevellick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接