C# 在分支之间转换时发生生成错误:您的项目未引用";。NETFramework,版本=v4.7.2“;框架

C# 在分支之间转换时发生生成错误:您的项目未引用";。NETFramework,版本=v4.7.2“;框架,c#,.net,git,build,.net-core,C#,.net,Git,Build,.net Core,我们正在使用Git,我们有一个解决方案,它的目标是完整的网络框架。几天前,我开始将解决方案迁移到.net core。不幸的是,发生了一些事情,这让我回到了主分支(它有完整的.NET框架的代码)。每当我尝试构建应用程序时,都会出现以下错误: 1> D:\Program Files(x86)\Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\NuGet\15.0\Microsoft.NuGet.targets(186,5): 错误:您的

我们正在使用Git,我们有一个解决方案,它的目标是完整的网络框架。几天前,我开始将解决方案迁移到.net core。不幸的是,发生了一些事情,这让我回到了主分支(它有完整的.NET框架的代码)。每当我尝试构建应用程序时,都会出现以下错误:

1> D:\Program Files(x86)\Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\NuGet\15.0\Microsoft.NuGet.targets(186,5): 错误:您的项目未引用 “.NETFramework,版本=v4.7.2”框架。添加对的引用 .NETFramework,Version=v4.7.2,位于 json,然后重新运行NuGet restore


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

听起来你可能有一些核心不兼容的库。如果Nuget期望/需要4.7.2,那么很可能在您的项目或我想尝试的库中仍然有一些东西针对它。还将解释,如果您正在恢复的包仍然以4.7.2为目标,为什么清理Nuget包并恢复它们并不能解决问题


相关说明,您确定使用的是最新的项目结构吗?我注意到,您的错误消息包括
project.json
,它被弃用,取而代之的是新的csproj格式;如果相关,请提供更多信息。我不知道您会收到关于project.json的错误消息,并且解决方案没有project.json。

在将一些项目从4.6.2升级到4.7.2时,我遇到了类似的问题-针对完整框架的ASP.Net核心解决方案和WPF解决方案都出现了这种情况

起初,似乎是随机的项目出现了这个错误,其他具有几乎完全相同的csproj的项目建设得很好,而其他项目则失败了。消息中的“重新运行NuGet restore”也让我走错了路(其中一些项目甚至没有NuGet引用…)

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

对我的情况来说很接近,但我必须删除解决方案中每个项目的bin和obj文件夹,因为在单个项目中这样做不会构建,也无法修复构建

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


我发现,只需使用代理Ransack在我的回购协议上搜索project.assets.json,然后删除这些文件,而不是整个bin&obj文件夹,就可以做到这一点:)

  • 调用
    git clean-dfX
    -从工作树中删除未跟踪的文件
  • 重建解决方案

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

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

    通过自定义Visual Studio生成事件自动删除非核心项目的
    project.assets.json
    来修复此问题

    更新(2020年6月13日) 结果是,删除
    project.assets.json
    会导致显示不规则的行,因为Intellisense需要文件中的引用。因此,更好的修复方法是使用预构建事件仅在项目不是.Net Core时删除文件

    这由我的计算机上的
    $(TargetFramework)--->“netcoreapp3.1”
    标识。您安装的框架可能会显示不同的标识符,因此相应地更新脚本(请参阅第2行上的
    ECHO
    生成的构建输出窗口中的文本)。注意:在某些.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提到的问题

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

    cd $(ProjectDir)\obj
    del project.assets.json
    
    注意:您需要删除报价
    cd $(ProjectDir)\obj
    del project.assets.json