问题描述
我正在将System.Reflection
nuget软件包安装到我的项目中,但是当我检查dll的引用路径时,它显示了C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\Facades\System.Reflection.dll
我什至尝试从nuget包文件夹中删除它并手动添加它,但是它仍然显示相同的路径。如何确保它是从nuget包文件夹而不是程序文件中引用的?
解决方法
System.Reflection
软件包几乎没有任何内容,但文件夹为空。
在.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表面,并且编译器可以对其进行检查。