【问题标题】:Build error while transitioning between branches: Your project is not referencing the ".NETFramework,Version=v4.7.2" framework在分支之间转换时生成错误:您的项目未引用“.NETFramework,Version=v4.7.2”框架
【发布时间】:2019-01-03 14:23:20
【问题描述】:

我们正在使用 Git,并且我们有一个针对完整网络框架的解决方案。几天前,我开始将解决方案迁移到 .net 核心。不幸的是,出现了一些事情,让我回到了主分支(其中包含完整的 .NET 框架的代码)。每当我尝试构建应用程序时,都会收到以下错误:

1>D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\NuGet\15.0\Microsoft.NuGet.targets(186,5): 错误:您的项目没有引用 “.NETFramework,Version=v4.7.2”框架。添加对的引用 “.NETFramework,Version=v4.7.2”在你的“框架”部分 project.json,然后重新运行 NuGet 还原。

我尝试清理 nuget 包,运行 git reset,但似乎没有任何帮助。知道发生了什么吗?

【问题讨论】:

  • .NET Core (2.1) 的最新长期支持版本不使用project.json,它使用.csproj 的新格式。您针对的是哪个 .NET Core 版本? csproj 文件是什么样的?
  • 我知道……其实我在netcore分支里就是这样的……

标签: c# .net git build .net-core


【解决方案1】:

在将某些项目从 4.6.2 升级到 4.7.2 时,我遇到了类似的问题 - 这发生在我们针对完整框架的 ASP.Net Core 解决方案和我们的 WPF 解决方案中。

最初似乎是随机项目出现此错误,具有几乎完全相同 csproj 的其他项目构建良好,而其他项目则失败。消息中的“重新运行 NuGet 还原”也让我走错了路(其中一些项目甚至没有 NuGet 引用...)

问题似乎源于包含 project.assets.json 文件的项目 obj 文件夹,我不确定这是什么时候生成的 - 可能是过去的遗物,清理项目并不会删除它。该文件指向之前的框架,在我的例子中是 4.6.2 - 手动删除每个无法构建的项目的 bin/obj 文件夹,然后重新构建为我解决了这个错误。这也可以解释为什么当我出于理智而克隆 repo 时,它也构建得很好。

【讨论】:

  • 此解决方案可能不适用于使用转换的解决方案 - 它不适用于我的,但我能够恢复旧文件夹并恢复到“较少损坏”状态
  • 我有一个包含 .Net Core 3.1 项目和 .Net winforms 4.7.2 项目的单一解决方案,并且遇到了同样的问题。以下工作流程对我有用:-删除文件夹 obj 和 bin,删除 .Net Core 3.1 项目,重新加载解决方案并编译,添加 .Net Core 项目
  • 这发生在我在不同的 git 分支中对 .NET 进行测试转换时 - 删除所有 /obj 和 /bin 文件夹修复它。
  • NuGet 还原消息确实具有误导性。我删除了 bin/obj 文件夹并在其他地方遇到了同样的错误,出于精神理智最终重新克隆了 repo,如果你能负担得起删除和重新克隆,这可能是最快的路线,但考虑到额外的本地配置可能是丢失并可能导致另一组问题。
【解决方案2】:

通过自定义 Visual Studio 构建事件自动删除非核心项目的 project.assets.json 来解决此问题。

更新(2020 年 6 月 13 日) 事实证明,删除 project.assets.json 会导致显示弯曲的线条,因为 Intellisense 需要文件中的引用。因此,更好的解决方法是使用 Pre-build 事件仅在项目不是 .Net Core 时删除文件。 p>

这在我的计算机上由$(TargetFramework) ---> "netcoreapp3.1" 标识。您安装的框架可能会显示不同的标识符,因此请相应地更新脚本(请参阅第 2 行 ECHO 生成的构建 Output 窗口中的文本)。注意:在某些 .Net Framework 版本上,这可能是一个空字符串,这应该不是问题。我们也只比较前 7 个字符以忽略版本,以避免在/当版本更改时更新脚本。

SET _tgt=$(TargetFramework)
ECHO %_tgt%
IF NOT "%_tgt:~0,7%" == "netcore" (
    cd $(ProjectDir)\obj
    DEL project.assets.json
)

==== 更新(2020 年 6 月 13 日)到此结束。原始答案保留在下面以提供上下文。 ====

我们将问题缩小到一个文件:project.assets.json 位于 {Your project}/obj 文件夹中。它是由 .Net Core 项目创建的文件,但在切换到 .Net Framework 项目后它不会被 Visual Studio 删除,导致 OP 提到的问题。 p>

解决方案是删除此文件,但我们不必每次手动删除它,我们需要切换项目,而是在 Visual 中创建了一个 post-build 事件Studio 在 每次成功构建Core 之后将其删除(如果您在之前 运行脚本,您的Core 项目将不会构建> 构建,显然)。您可以自定义脚本以删除您认为有问题的任何文件/文件夹,但我们的问题仅限于该单个文件。

cd $(ProjectDir)\obj
del project.assets.json

注意:如果有问题的工件已经存在,您需要手动删除它一次,因为构建后事件只会在构建成功后运行。

【讨论】:

    【解决方案3】:
    1. 调用git clean -dfX- 从工作树中删除未跟踪的文件
    2. 重建解决方案

    【讨论】:

    • 我与 VS 一起工作的日常伙伴。因为 VS Clean 是一个糟糕的清洁工。到处都是讨厌的东西;-)
    【解决方案4】:

    MaxJanswer 与我的情况很接近,但是我不得不删除解决方案中每个项目的 bin 和 obj 文件夹,而在无法构建的单个项目中这样做并没有修复构建.

    为方便起见,我在上面使用的 PS 只能在您不介意删除这些文件夹的文件夹的根目录下运行(例如,在前端节点模块中可能是一个不好的地方):

    gci -Include bin,obj -Recurse | Remove-Item -Force -Recurse
    

    【讨论】:

    • ? 这个答案终于为我解决了这个问题。删除有问题的项目中的 /bin 和 /obj 文件夹并不足以解决它,但是为解决方案中的每个项目删除它们就足够了。谢谢!
    【解决方案5】:

    我删除了 obj 和 bin 文件夹并重建了项目。 Visual Studio 自动创建了要再次使用的“dll”文件。 它对我有用。

    【讨论】:

      【解决方案6】:

      听起来您可能有一些与 Core 不兼容的库。如果 Nuget 期望/需要 4.7.2,那么在您的项目或我愿意冒险的库中,可能仍有一些东西以它为目标。如果您要恢复的包仍然以 4.7.2 为目标,那么还可以解释为什么清理 Nuget 包并恢复它们并不能解决问题。

      相关说明,您确定您使用的是最新的项目结构吗?我注意到您的错误消息中包含 project.json,它已被弃用以支持新的 csproj 格式;如果相关,更多信息是here。我不知道您会收到有关 project.json 的错误消息并且解决方案没有 project.json 的情况。

      【讨论】:

      • 你好。对我知道那个。事实上,在“net core 分支”中,我使用的是“csproj sdk”项目文件,所以我真的不知道这里是怎么回事。并且错误发生在完整的网络分支中......我最终删除了所有内容并再次克隆它......它现在似乎正在工作......虽然我仍然不明白发生了什么......
      【解决方案7】:

      我发现只需使用 Agent Ransack 在我的 repo 上搜索 project.assets.json,然后删除这些文件,而不是整个 bin 和 obj 文件夹,就可以了 :)

      【讨论】:

        【解决方案8】:

        我有同样的错误,bin/obj 清理没有帮助。经过长时间的调查,我发现我错误地覆盖了IntermediateOutputPath 指向我所有项目的同一个目录。这在并行构建期间弄乱了 NuGet 中间文件。修复 Build.Directory.props 以在 IntermediateOutputPath 中包含 $(MSBuildProjectName) 为我解决了这个问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-07-11
          • 2020-12-20
          • 2019-10-25
          • 1970-01-01
          • 1970-01-01
          • 2022-11-08
          • 2021-12-05
          • 2019-04-04
          相关资源
          最近更新 更多