.NET如何定位名称空间的DLL我是using谁?是的,我们确实提到了/ referene中的路径:c:\ program files**但是在构建和部署之后以及在某个用户的机器上安装软件时.它可能与我(开发人员)提到的路径不同.我的意思是它可能在某些地方正确吗?
如果运行fuslogvw.exe(来自.NET SDK)并启用所有绑定到磁盘的日志,您可以看到各种探测步骤.您将能够看到.NET CLR用于解析程序集引用的各种路径.但经验法则是首先尝试全局程序集缓存,然后检查本地目录以及一堆其他备用路径.
从技术上讲,DLL中没有任何名称空间.
在CLR级别,根本没有名称空间,只有完整的类名.CLR类名称可以包含任意Unicode字符的任意长序列 - 例如@#$%,就CLR而言,它将是一个非常精细的类名.
现在,根据惯例(CLS,具体而言),类名限制为某些Unicode字符(字母数字和_一堆其他奇特的Unicode类别 - 请参阅规范以获取更多信息)和点,而dot用于表示名称空间.这纯粹是编译器(和其他工具)之间的约定.
因此,每当程序集因任何原因引用某种类型时,它只使用其完整的CLR名称,例如System.String.但还有更多 - 实际上,它使用了一个完全限定的名称,其中也包含一个程序集.如果你看ildasm输出你可以看到它们- 它们看起来像[mscorlib]System.String,所以运行时知道在哪里看.
换句话说,CLR确实看到程序集mscorlib.dll有类System.String,而程序集B.exe引用该类为[mscorlib]System.String.您的using语句本身不会在输出DLL/EXE中生成任何代码; 它只是为了让你不必一直写System.String.
这是编译器的工作来翻译你的代码的说法String,在一个范围内using System;声明,其中引用的一个项目mscorlib.dll,来[mscorlib]System.String.这一切都是在编译时完成的.CLR在运行时唯一做的就是解析mscorlib在磁盘上找到实际的mscorlib.dll(另一个答案解释了究竟是怎么回事).
| 归档时间: |
|
| 查看次数: |
1493 次 |
| 最近记录: |