在分支之间转换时构建错误:您的项目未引用".NETFramework,Version = v4.7.2"框架

Lui*_*reu 23 .net c# git build .net-core

我们正在使用Git,我们有一个针对完整网络框架的解决方案.几天前,我开始将解决方案迁移到.net核心.不幸的是,出现了一些让我回到主分支(它具有完整.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"框架.在project.json的"frameworks"部分中添加对".NETFramework,Version = v4.7.2"的引用,然后重新运行NuGet restore.

我已经尝试清理nuget包,运行git reset,但似乎没有任何帮助.对于发生了什么有什么想法?

Max*_*axJ 51

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

最初它似乎是随机项目有这个错误,其他项目与几乎完全相同的csproj正在建设罚款,其他项目失败.消息中的"重新运行NuGet恢复"也让我走错了路(其中一些项目甚至没有NuGet引用......)

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

  • 我可以确认这个解决方案. (5认同)
  • 你救了我的日子。 (3认同)
  • 这个答案保存的另一个人!谢谢. (2认同)
  • 当我在不同的 git 分支中进行到 .NET 的测试转换时,就发生了这种情况 - 删除所有 /obj 和 /bin 文件夹修复了它。 (2认同)

Adi*_*i H 13

project.assets.json通过自定义 Visual Studio Build Event自动删除非核心项目来解决此问题。

更新(2020 年 6 月 13 日) 事实证明,删除会project.assets.json导致显示波浪线,因为 Intellisense 需要文件中的引用。因此,更好的解决方法是使用Pre-build事件仅在项目不是.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
)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

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

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

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

cd $(ProjectDir)\obj
del project.assets.json
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明


小智 11

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


tec*_*age 6

MaxJ答案非常适合我的情况,但是当在无法构建的单个项目中这样做时,我必须删除解决方案中每个项目的 bin 和 obj 文件夹,但无法修复构建。

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

gci -Include bin,obj -Recurse | Remove-Item -Force -Recurse
Run Code Online (Sandbox Code Playgroud)


小智 5

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