簡體   English   中英

在分支之間轉換時生成錯誤:您的項目未引用“.NETFramework,Version=v4.7.2”框架

[英]Build error while transitioning between branches: Your project is not referencing the ".NETFramework,Version=v4.7.2" framework

我們正在使用 Git,我們有一個針對完整網絡框架的解決方案。 幾天前,我開始將解決方案遷移到 .net 核心。 不幸的是,出現了一些事情讓我回到 master 分支(它有完整的 .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 還原。

我試過清理 nuget 包,運行 git reset,但似乎沒有任何幫助。 知道發生了什么嗎?

將某些項目從 4.6.2 升級到 4.7.2 時,我遇到了類似的問題 - 針對完整框架的 ASP.Net Core 解決方案和我們的 WPF 解決方案都發生了這種情況。

最初似乎是出現此錯誤的隨機項目,其他具有幾乎完全相同 csproj 的項目構建良好,而其他項目則失敗。 消息中的“重新運行 NuGet 還原”也讓我走上了錯誤的道路(其中一些項目甚至沒有 NuGet 引用......)

該問題似乎源於包含 project.assets.json 文件的項目 obj 文件夾,我不確定它是何時生成的 - 可能是過去的遺物,清理項目並不會刪除它。 該文件指向以前的框架,在我的情況下為 4.6.2 -手動刪除每個項目的 bin/obj 文件夾,這些項目不會構建然后重建為我解決了這個錯誤 這也可以解釋為什么當我出於理智而克隆 repo 時,它也構建得很好。

通過自定義 Visual Studio Build Event自動刪除非核心項目的project.assets.json來解決此問題。

更新 (6/13/2020)原來刪除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
)

在此處輸入圖片說明

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

我們將問題縮小到一個文件: {Your project}/obj文件夾中的project.assets.json 它是由.Net Core項目創建的文件,但在切換到導致 OP 提到的問題的.Net Framework項目后,Visual Studio 不會將其刪除。

解決的辦法是刪除此文件,但,而不必每次我們需要轉換項目手動刪除它,我們創建了Visual Studio中的生成后事件每個成功的核心生成刪除它(你的核心項目不會建如果您在構建之前運行腳本,顯然)。 您可以自定義腳本以刪除您認為有問題的任何文件/文件夾,但我們的問題僅限於該單個文件。

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

注意:如果有問題的工件已經存在,您將需要手動刪除一次,因為構建后事件只會在成功構建后運行。

在此處輸入圖片說明

  1. 調用git clean -dfX - 從工作樹中刪除未跟蹤的文件
  2. 重建解決方案

MaxJ回答對我的情況很接近,但是我必須刪除解決方案中每個項目的 bin 和 obj 文件夾,因為在不會構建的單個項目中這樣做並沒有修復構建。

為方便起見,我用於上述操作的 PS 應僅在您不介意刪除這些文件夾的文件夾的根目錄下運行(例如,在前端節點模塊中可能是一個糟糕的地方):

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

我刪除了 obj 和 bin 文件夾並重建了項目。 Visual Studio 會自動創建要再次使用的“dll”文件。 它對我有用。

聽起來您可能有一些與 Core 不兼容的庫。 如果 Nuget 期望/需要 4.7.2,那么在您的項目或我願意冒險的庫中,可能仍有某些內容針對它。 還將解釋為什么如果您要恢復的包仍然針對 4.7.2,清理 Nuget 包並恢復它們並不能解決問題。

相關說明,您確定使用的是最新的項目結構嗎? 我注意到您的錯誤消息包含project.json ,它已被棄用以支持新的 csproj 格式; 如果相關, 這里有更多信息。 我不知道您會收到有關 project.json 的錯誤消息並且解決方案沒有 project.json 的情況。

我發現只需使用 Agent Ransack 在我的 repo 上搜索 project.assets.json 然后刪除這些文件,而不是整個 bin 和 obj 文件夾,就可以解決問題:)

我有同樣的錯誤,bin/obj 清理沒有幫助。 經過長時間的調查,我發現我錯誤地覆蓋了IntermediateOutputPath以指向我所有項目的同一目錄。 這在並行構建期間弄亂了 NuGet 中間文件。 修復Build.Directory.props以在IntermediateOutputPath包含$(MSBuildProjectName)為我解決了這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM