nuget包文件夹未引用System.Reflection

问题描述

我正在将System.Reflection nuget软件包安装到我的项目中,但是当我检查dll的引用路径时,它显示了C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\Facades\System.Reflection.dll

我什至尝试从nuget包文件夹中删除它并手动添加它,但是它仍然显示相同的路径。如何确保它是从nuget包文件夹而不是程序文件中引用的?

解决方法

System.Reflection软件包几乎没有任何内容,但文件夹为空。

System.Reflection package content

在.NET Framework 4.6.2的lib文件夹中,只有一个System.Reflection.dll,但是除了引用mscorlib之外,该程序集也为空。因此,除了.NET Framework 4.6.2,NuGet软件包文件夹或您的项目输出目录中没有任何程序集。这些程序集由基础框架运行时提供。

您看到的路径是参考程序集的路径。这也是软件包在ref文件夹中提供的内容。有关引用程序集和运行时程序集之间的区别,请参见此related post。引用@hansPassant和@MartinUllrich:

因此,正如Hans Passant已经提到的那样,“引用”程序集用于构建程序,这意味着这是作为引用传递给编译器的程序集。但是,在运行时,实现可能有所不同。除了框架本身之外,任何分发单个编译时参考程序集但为每个目标(.NET Core,.NET Framework,MonoAndroid等)提供各种实现程序集的NuGet包都可以使用此框架。 NuGet包中的lib文件夹甚至可以用于添加更多私有实现程序集,而这些程序集不希望消耗应用程序直接引用。

引用程序集仅具有“存根”方法,以便定义可用的API表面,并且编译器可以对其进行检查。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...