安装程序包:无法添加对'System.Runtime'的引用

22

我正在尝试使用命令在我的项目中安装Autofac NuGet包。

Install-Package -Prerelease Autofac

但是它遇到了错误

Install-Package : Failed to add reference to 'System.Runtime'. Please make sure that it is in the Global Assembly Cache.

我尝试重新安装 .NET Framework 4.5.2 (这是我的项目的目标版本),但是收到了消息“ .NET Framework 4.5.2 已经安装”。然而,在 C:\Windows\assembly\ 中搜索 System.Runtime.dll 没有找到任何精确匹配项(尽管有一些 System.Runtime.ni.dll 的实例,它们似乎表明它们确实是同一个程序集...)。

我该怎么办呢?

project config

更新:显然我对 GAC 的位置感到困惑。Amy 启示了我,在 C:\Windows\Microsoft.NET\assembly 中进行搜索,我确实找到了 System.Runtime.dll。为什么 Visual Studio 没有找到呢?


你的项目目标是什么? - Daniel A. White
@DanielA.White:正如问题所述:.NET Framework 4.5.2。 - Tomas Aschan
你验证了项目属性吗?它是否引用了框架的子集? - Daniel A. White
4
"c:\windows\assembly"不再是全局程序集缓存(GAC)的位置。现在的GAC位于"c:\windows\microsoft.net\assembly"。以前的位置在早期的.Net版本中使用过。 - user47589
2
这是一个非常令人困惑的错误信息,因为GAC不用于在编译时解析引用。Visual Studio应该在“C:\Program Files(x86)\Reference Assemblies”下查找,但该位置不应被称为全局程序集缓存。 - Damien_The_Unbeliever
显示剩余6条评论
2个回答

34

我遇到了同样的问题。

在这里找到了解决方案:https://github.com/aspnet/WebHooks/issues/18

为了解决它,我在项目的.csproj文件中添加了<Reference Include="System.Runtime"/>,重新构建后它就可以正常工作了。


17
请确保它在全局程序集缓存中{Global Assembly Cache}。
这是一个极其不友好的错误信息。它不仅没有描述真正的问题,而且还会让你彻底地迷失方向去寻找解决方法。.NET Framework程序集的引用永远不应该来自GAC。当它们来自GAC时,可能会出现非常难以诊断的故障模式。引用程序集必须来自C:\Program Files (x86)\Reference Assemblies目录。
查看Autofac nuget包的.nuspec文件,它支持两个不同的目标。其中一个是针对DNXCore版本4.0.10-beta-22816。希望您没有使用它,因为该项目正在快速更改。
另一个是.NET Portable,配置文件为259。它允许您的项目针对.NET 4.5.x、Store、Phone80和Phone81进行目标设置。直白的错误消息告诉您它无法找到该配置文件。使用Windows资源管理器查看,该配置文件存储在C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile259目录中。它具有所需的System.Runtime.dll参考程序集。好吧,肯定是失踪了,我无法猜测其根本原因。他们在.nuspec文件中犯了一些细微的错误。请考虑使用更稳定的Autofac版本,您可能不想成为测试版的测试人员。不要以4.5.2为目标,这没有任何意义。它并没有增加任何有趣的内容,并且强制用户更新他的.NET安装程序并不是很合理。

2
这篇文章对我来说非常有帮助,谢谢!不过,在你指定的目录中,我确实有一个 System.Runtime.dll。可能有什么问题吗?我该如何知道呢?我通过从头开始重新创建项目文件并从备份中复制代码文件来解决了我的问题。 - Tomas Aschan
如果重新创建项目解决了问题,那么您就不必担心引用程序集的问题。很难猜测出错的原因,我建议您一定要对硬盘驱动器运行一些完整性测试。 - Hans Passant
3
我和另一个用户遇到了这个问题,并使用不同的包“SerilogTimings”重现了它 - 我们通过手动添加参考、安装包,然后再次删除来解决了这个问题。看起来是基于project.json的包的工具问题。 - Nicholas Blumhardt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接