除了 EXE 之外,为什么 .NET 5 项目还创建两个名称相同的 DLL,一个位于主二进制文件文件夹中,一个位于 refs 子文件夹中?

eko*_*lis 4 .net visual-studio visual-studio-2019 .net-5

如果我构建一个生成可执行文件的 .NET 5 项目,我会得到以下文件:

  • bin/调试/net5.0-windows/MyProject.exe
  • bin/调试/net5.0-windows/MyProject.dll
  • bin/Debug/net5.0-windows/ref/MyProject.dll

为什么要创建这三个文件?旧版本的.NET 仅生成一个 EXE。为什么我们需要在不同的文件夹中放置两个相同名称的 DLL 来与 EXE 一起使用?

Fir*_*zar 5

MyProject.exe:
为方便起见生成特定于平台的可执行文件,因此您无需编写dotnet MyProject.dll即可启动应用程序。
根据文件,.NET SDK 2.1没有生产它。

MyProject.dll:
主应用程序 dll - 具有入口点的跨平台 dll。您可以选择使用https://learn.microsoft.com/en-us/dotnet/core/deploying/single-file
将其放入特定于平台的内部.exeSingle file deployment and executable

ref/MyProject.dll:
用于其他工具的某些运行时编译的 Dll。@Andrew 的回答中有描述。可以通过编译器选项禁用生成。

总结
通过跨平台,.NET Core您可以通过多种不同的方式分发应用程序,但代价是新的间接级别和新的编译器选项。