关于ASP.NET与CLR相互关系的总结2013-11-28 cnblogs JasenKinCLR(COM服务器)CLR作为一个COM服务器实现在MSCorWks.dll文件中。安装.NET Framework时,表示 CLR的COM服务器被注册到Windows的注册表里。MSCorEE.dll(垫片)MSCorEE.dll的职责是判 断创建何种版本的CLR。 非托管应用程序宿主调用MSCorEE.dll(shim)中CorBindToRuntimeEx函数或者另一个 相似的函数来创建CLR COM的实例。 一台机器可以安装多个版本的CLR,但在机器中只 有一个版本的MSCorEE.dll文件。以上两者之间的关系如下代码所示(c++): MSCorEE.dll(垫片)---->CLR(COM服务器)
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#include <Windows.h>#include <MSCorEE.h>#include <stdio.h>#pragma comment(lib,"mscoree.lib")int main(int argc, CHAR* argv[]){ICLRRuntimeHost *pClrHost;//调用<MSCorEE.h>中的CorBindToRuntimeEx()生成COM服务器HRESULT hr= CorBindToRuntimeEx(NULL, NULL, NULL, CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (LPVOID*)&pClrHost); //启动clrpClrHost->Start();//............................其他操作//终止clr pClrHost->Stop(); getchar(); return 0;}应用程序域(AppDomain) 一个应用程序域是一组程序集的一个容器。应用 程序域的全部目的就是提供隔离性。

上图为一个单独的Windows进程,该进程中运行着一个CLR COM服务器。该CLR中每个应用程序域都有自己的 加载器堆。(系统域,共享域,默认域#1,其他域#2)一些特殊的程序集如MSCorLib.dll,它需要被 所有的应用程序域共享,那么他就以一种对应用程序域保持中立的方式被加载,由CLR维护一个特殊的加载器 堆。