您的项目未引用“.NETFramework,Version = v4.5”框架。

101

我正在使用VS 2015。

您的项目未引用“.NETFramework,Version = 4.5”框架。在项目的“frameworks”部分中添加对“.NETFramework,Version = 4.5”的引用,然后重新运行NuGet还原。

我在我的数据访问和业务逻辑层上添加到MVC层后不久就遇到了这个错误。事情一直顺利构建,但我不知道是什么触发了这个错误。这是我的project.json:

{
  "version": "1.0.0-*",
  "description": "foo bar Class Library",
  "authors": [ "foo bar" ],
  "tags": [ "" ],
  "projectUrl": "",
  "licenseUrl": "",

  "frameworks": {
    "net451": { },
    "dotnet5.4": {
      "dependencies": {
        "Microsoft.CSharp": "4.0.1-beta-23516",
        "System.Collections": "4.0.11-beta-23516",
        "System.Linq": "4.0.1-beta-23516",
        "System.Runtime": "4.0.21-beta-23516",
        "System.Threading": "4.0.11-beta-23516"
      }
    }
  }
}

这是我尝试过的方法:
  1. 按照这个回答,将“dotnet5.4”替换为“net451”(并删除它)。

结果仍然是相同的错误。

  1. 将“dotnet5.4”替换为“net45”,并保留“net451”。这会导致一个新的错误:

你的project.json没有runtimes部分。你应该在project.json中添加'"runtimes": { "win":{} }',然后重新运行NuGet restore。

我尝试按照这个错误提示添加了runtimes部分:

"runtimes": {
    "win":  {}
  },

这个错误提示我无法跨越,如下所示:
“你的project.json没有将'win'列为目标运行时。你应该在project.json的"runtimes"部分中添加'"win": {}',然后重新运行NuGet restore。”
我已经添加了"win",但这开始感觉像一个转移注意力的话题。我为什么要直接修改project.json文件?NuGet不是应该处理这个吗?

对于第一部分,请前往您的项目设置并将目标框架设置为4.5。 - Hirbod Behnam
已经设置成那样了。 - S. Loveland ECY
1
@S.LovelandECY 你解决了这个问题吗?无论我使用4.5.1、4.5.2还是4.6,我都遇到了同样的问题——我的所有项目肯定都使用相同的框架版本。 - Thierry
@S.LovelandECY,您可能需要考虑更改已接受的答案,因为它与得票最高的答案之间存在差异。 - RJFalconer
6个回答

206

我曾经也遇到过同样的问题,最终不仅需要删除binobj文件夹中的内容,还需要删除解决方案中的.vs目录。


2
.vs 对我造成了问题。 - Lukas
7
对我来说,这是最好的解决方案! - Riki
9
".vs对我来说不是必需的。谢谢!" - geynske006
2
我真的不知道该如何恰当地感谢你。我已经花了大部分时间试图解决这个问题,但一直没有头绪。删除了所有三个并且现在一切都正常了。+1 - tfrascaroli
3
我有一个怀疑,认为这个问题是由于在我的本地开发环境上切换GitHub分支引起的。也就是说,我在一个分支上工作,编译会创建许多不属于代码库的文件。然后我切换到另一个分支,这些非代码库文件仍然存在,与新检出的文件发生了冲突。请问你能帮我翻译一下吗? - Phoeniceus Agelaius
显示剩余11条评论

132

我也遇到了同样的问题 - 即使在使用 .csproj 文件而不是 project.json 的 Visual Studio 2017.3 中仍然会发生这种情况。有趣的是,错误消息仍然包含文本“project.json”。

看起来这个问题的原因是上一次构建时未能删除锁定文件或 obj\project.assets.json 文件(取决于您使用的 VS 版本),这些文件并未在执行清理操作时被删除,详细信息请参见此处

手动删除 /obj 目录是一个快速解决方法。

如果您在同一目录中有一个“新”项目(例如在 VS 2017 中创建的 .NET Core 或 netstandard 项目)和一个“旧”项目(例如在 VS 2015 中创建的 .NET 4.6 项目),它们似乎会不断地互相干扰,因为它们都以不同的方式使用 ./obj 目录。有关详细信息,请参见此处

msbuild 的解决方法是让其中一个项目使用不同的 obj 目录。我在我的“旧” csproj 文件中添加了以下内容:

<PropertyGroup>
  <!-- Needed due to old project and new project in same directory: https://github.com/NuGet/Home/issues/5126 -->
  <BaseIntermediateOutputPath>obj_netfx\</BaseIntermediateOutputPath>
</PropertyGroup>

4
这个解决方法在VS 2017中非常有效,您及时地帮了我一个大忙。 - MechanicalCoder
2
太棒了。解释得非常好。 - Mick Byrne
1
让我也表示感谢。删除所有有问题的“obj”文件夹也解决了我的问题。 - Stuart
2
上帝保佑你!我在想该死的project.json文件在哪里。删除/obj就行了。 - Vishnoo Rath
1
即使在VS 2019中仍存在问题。感谢解决方案! - user2363676
显示剩余4条评论

27

我发现一个被误放的project.lock.json文件导致了这个问题。一旦我删除了该文件,问题就消失了。

这里有一些关于project.lock.json的文档

进一步的建议是确保在您的git ignore文件中忽略project.lock.json,并尝试进行完整的git clean。但在执行操作之前,请确保您理解Git clean的影响。


10
我刚刚找到了问题所在。我在解决方案级别上点击了 恢复 Nuget 包,然后我就成功编译了我的 PCL 文件以及解决方案中的其他部分。希望这可以帮到你。

1
这个答案对我来说非常相关。 - kovac

2

我在更新到Visual Studio for Mac 7.4 (build 1033)后遇到了同样的问题:

Error: Your project is not referencing the "MonoAndroid,Version=v7.1" framework. Add a reference to "MonoAndroid,Version=v7.1" in the "frameworks" section of your project.json, and then re-run NuGet restore.

我没有任何json项目文件。这里的提示也没有帮助,所以我不得不通过艰苦的方式找出必须安装最新的Android SDK(Oreo 8.1),除了我的目标SDK(Nougat 7.1)。

enter image description here


0

我有同样的问题,但是我通过在vs2017-->工具-->选项-->Nugetpacakge管理器--->更新适当的软件包URL来添加正确的nugget软件包资源来解决它。

请参考下面的图片

enter image description here


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