环境
- Visual Studio 2019(截至2020年12月的最新SP)
- .NET Core 3.1,最新SP至2020年12月
- 运行时加载大量子DLL的WebAPI项目
问题上下文
当生成解决方案时,MS Build会为解决方案中的特定项目提供“GenerateDepsFile:
”错误。当一个条目已经存在时,它会尝试将其添加到字典中,但不会尝试添加哪个字典或尝试添加哪个重复键。
执行的探索
- 没有编译错误(除了Deps文件)
- 所有引用的项目都在正常生成,本身没有错误
- 所有NuGet参考均可用,无错误
- 清理和重建所有涉及的解决方案
- 跨代码库手动删除
obj
和bin
文件夹
3条答案
按热度按时间gmol16391#
The "GenerateDepsFile" task failed unexpectedly
太大,您应该检查其详细的构建日志以判断真实的的问题是什么。在【工具】-->【选项】-->【项目和解决方案】-->【构建和运行】-->将【MSBuild项目构建输出详细程度】设置为
Detailed
,然后再次构建,获取其详细日志。另外,您可以在这里与我们分享详细的错误构建日志。
**1)**清理nuget缓存或删除
C:\Users\xxx\.nuget\packages
下的所有缓存文件。**2)**不要忘记删除项目的解决方案文件夹下的
.vs
隐藏文件夹、bin
、obj
文件夹,然后使用dotnet restore
命令或msbuild -t:restore
命令恢复这些文件。**3)**将VS 2019更新为最新的
16.8.4
,将Net Core 3.1 Sdk更新为the latest 3.1.11。bq3bfh9z2#
经过大量的探索,它看起来像一个多版本的NuGet包场景(已经清理了NuGet缓存)
最后,我去了所有的子项目,并验证了所有NuGet包的相同版本是否被使用。结果发现,一些程序集(特别是Microsoft.Data.SqlClient)的版本在子项目和调用项目中是不同的。由于项目本身的构建都很好,所以在项目级别上没有报告这一点,但是当这些DLL在父DLL中被使用时,它开始给出错误。
原来这些子项目是用当时可用的最新版本构建的。父项目只是从输出文件夹引用DLL,不知道以前的版本,并更新了自己的版本。
因此,请确保当特定版本的NuGet在一个地方获得批准时,它会在整个生态系统中更新!
然而,MS应该更新错误,至少指出主消息中的哪个字典失败了,因为很难用详细日志进行调试。
eblbsuwk3#
“GenerateDepsFile”任务意外失败。
我相信你只需要删除bin和obj文件夹,然后清理和重建解决方案。
这应该可行,在经历了许多方法后,它对我有效。
编辑:
这对我也很有效,而清洁解决方案却没有。请采取您的bin和obj文件夹的备份,然后再删除它们,因为有罕见的情况下,这可能会适得其反,你和成本你很多的工作。