我在.net中有一个类库项目说"A",它在构建时会创建一个dll,即"A.dll".我有另一个项目说"B",这个项目包含dll"A.dll"的引用.当我在B中添加A的引用时到底发生了什么?任何人都可以告诉我在编译期间和运行时期间会发生什么?
编译器将A.dll与任何using指令和别名结合使用,以执行类型解析.当找到这些类型时,IL中包含A.dll中类型的标记.如果完全不使用A.dll,则会默默地删除引用.
没有代码被复制 - 只有合格的名称等 - 因此你仍然需要在你的B.dll(或GAC)中部署A.dll.
在运行时,当找到A.dll中类型的标记时,"fusion"会尝试加载并验证A.dll(这里有复杂的规则和可选的间接) - 一旦加载它就会解析指定的类型并继续(使用来自A.dll的类型).