[英]Ranorex build fails 9.4.1 The reference assemblies for framework “.NETFramework,Version=v4.7.2” were not found
[英]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
注意:如果有问题的工件已经存在,您将需要手动删除一次,因为构建后事件只会在成功构建后运行。
git clean -dfX
- 从工作树中删除未跟踪的文件我删除了 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.