Ale*_*lex 7 .net dll .net-core
.NET Core 2.0 SDK中的每个DLL都有两个副本(它们具有不同的内容和文件大小).例如:
"c:\ Program Files\dotnet\sdk\2.0.0\Microsoft\Microsoft.NET.Build.Extensions \net461\ref\System.Threading.Thread.dll"(14432 bytes)
"c:\ Program Files\dotnet\sdk\2.0.0\Microsoft\Microsoft.NET.Build.Extensions \net461\lib\System.Threading.Thread.dll"(14352 bytes)
他们之间有什么区别(和两个人的目的)?
正如Hans Passant已经提到的,"引用"程序集用于构建程序,这意味着这是作为引用传递给编译器的程序集.但是,在运行时,实现可能会有所不同.除了框架本身之外,任何NuGet包都可以使用它,它可以为每个目标(.NET Core,.NET Framework,MonoAndroid等)分发单个编译时引用程序集,但需要各种实现程序集.libNuGet包中的文件夹甚至可以用于添加更多私有实现程序集,它们不希望消费应用程序直接引用.
引用程序集只有"stub"方法,因此可以定义可用的API表面,并且可以由编译器进行检查.
但是,你提到的Microsoft.NET.Build.Extensions文件夹.它遵循NuGet包的结构(因为它是如何构建并集成到SDK中的),但它与您使用的普通库有着完全不同的目的.它用于允许.NET标准库在部分兼容的.NET Framework版本上运行.它的工作原理是将实现程序集添加到构建输出中 - 但这些是特殊的,因为它们只转发到相应的.NET Framework类型并添加API表面,这些表面抛出.NET Framework PlatformNotSupportedException中可用但.NET Framework未实现的类型.例如.NET标准1.*库将引用System.Object,System.Runtime.dll.NET Standard 2.0库将引用它netstandard.dll.在Microsoft.NET.Build.Extensions同时包含System.Runtime.dll与netstandard.dll包含转发类型的声明转发到.NET框架的mscorlib.dll.这适用于其他类型和程序集.
仅在必要时添加这些组件..NET Framework 4.7.1将包含所有这些程序集和转发,因此不会将其他文件添加到构建输出中.