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

时间:2018-10-16 10:49:30

标签: c# unit-testing mstest csproj .net-framework-version

我无法运行单元测试。

下一个错误:

  

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

app.config中:

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

在Project> Properties> Application> TargetFramework(.NET Framework 4.6.2)中

我该如何解决?

9 个答案:

答案 0 :(得分:58)

请进行下一步

  1. 清洁溶液
  2. 清理文件夹“包”
  3. 删除文件夹“ bin”
  4. 删除文件夹“ obj”

答案 1 :(得分:30)

我遇到过类似的问题,但是遇到了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 Standard库。显然,它们共享相同的 obj 文件夹,Core项目放置 project.assets.json 文件。实际上,正是此文件干扰了Framework项目,从而阻止了其正常构建。似乎即使您执行了 Migrate from packages.config to PackageReference... ,这也是建议的一种可能解决方案。

您可以通过将以下代码片段放入Framework项目文件中来尝试解决此问题:

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

它立即为我工作,直到后来我专心阅读我们为什么需要它以及它为什么起作用。我在确保.NET Framework项目仍可构建部分的将示例WPF应用程序迁移到.NET Core 3 part 2中意外地找到了它。可以在此处找到BaseOutputPathBaseIntermediateOutputPath msbuild变量,不确定是否在任何地方都对其进行了很好的记录。

答案 2 :(得分:17)

在VS2017中打开VS2015项目时,这发生在我身上。从project.assets.json文件夹中删除obj就可以了。

无论如何,文件中缺少消息中的框架,但是我没有在其中添加它,而是删除了它。

答案 3 :(得分:14)

git clean -xdf

这应该可以解决问题。它在詹金斯也对我们有用。 (我们只是使用修改后的脚本重播失败的构建,该脚本首先运行 git clean )。

出于某种原因,MSBuild / Visual Studio 在针对不同版本 .NET Framework 的分支之间切换时会感到困惑,所以我不得不在分支之间切换时定期执行 git cleans。

答案 4 :(得分:2)

对于我来说,删除工程文件夹下的.pkgrefgen/文件夹,它包含一个引用旧.net框架的文件 project.assets.json

答案 5 :(得分:1)

我在.net 4.71中遇到了同样的问题。就我而言,我只是根据

从packages.config迁移到“程序包引用”

Migrate from packages.config to PackageReference

...它解决了我的问题。对于我来说,无论如何我都会这样做,因此,如果您已经按照这种方式进行操作,我将跳过以上内容并迁移到程序包引用。

答案 6 :(得分:1)

我投票赞成拉里萨(Larissa),但我认为了解这一点可能会有所帮助。我在构建中添加了一个.net标准项目文件(我们以许多平台为目标),它生成了在obj文件夹中找到的碎片。当android健全版本出现时,它放在obj文件夹中。我的解决方案是作为预构建步骤清除该文件夹。这是一个棘手的问题,因为它已经工作了好几年...针碰到干草堆。

答案 7 :(得分:1)

重命名项目为我解决了错误。问题发生在我创建 .NET Core 项目之后,然后我将其删除并创建了一个同名的 .NET Standard 项目。 Obj 文件夹根本不存在。删除 bin 文件夹、包、清理和重建解决方案以及使用覆盖获取最新版本都无济于事。

我还没有尝试过,但 this thread 建议的解决方法是包含在 csproj 标签中:

<ResolveNuGetPackages>false</ResolveNuGetPackages>

答案 8 :(得分:0)

我使用的是一个非常老的.NET项目,并且工作正常,直到突然停止。升级Visual Studio对我来说是固定的。