.Net Standard 2.0 类库:
namespace ClassLibrary1 { public class Class1 { public string Hello() { return "Hello!"; } } }
.Net Framework 4.61 Windows 桌面程序:
namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { ClassLibrary1.Class1 class1 = new ClassLibrary1.Class1(); string str = class1.Hello(); MessageBox.Show(str); } } }
编译译后,出现一堆DLL:
数了一下,不包括 ClassLibrary1.dll 一共96个DLL。
奇怪的是,单独把 ClassLibrary1.dll 和 WindowsFormsApp1.exe 复制出来也是可以正常运行的:
既然有 ClassLibrary1.dll 和 WindowsFormsApp1.exe 就可以运行,为什么给我生成另外96个dll文件?复杂的程序应该需要其他dll吧?怎么判断需要哪些dll?编译器就不能智能的判断,需要哪些dll,就生成哪些dll吗?
补充一下,exe的目标框架也是.Net Framework 4.6,这96个DLL的版本也是 .Net Framework 4.6:
编译时无法完全判断,只有运行了才能完全判断。多了很多是因为需要standard需要一套接口,这东西是设计上是可以跑在其他平台的,比如core、xamarin。
你这里的示例类库太简单了,根本没调用 .net standard 2.0 的 api