.Net Core 宿主托管的.Net Core 程式一共分为七个步骤,非常简单,基本如下

 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

 

1.加载CoreCLR.DLL

            HMODULE ret = LoadLibraryExW("CoreCLR.dll", NULL, 0);

2.获取CoreCLR.DLL 接口GetCLRRuntimeHost

               

            FnGetCLRRuntimeHost pfnGetCLRRuntimeHost =(FnGetCLRRuntimeHost)::GetProcAddress(coreCLRModule, "GetCLRRuntimeHost");

 

3.通过接口查找IID_ICLRRuntimeHost4的宿主运行时RunTimeHost

              

          HRESULT hr = pfnGetCLRRuntimeHost(IID_ICLRRuntimeHost4, (IUnknown**)&runtimeHost);

 

4.设置runtimehost的标志

             

          hr = runtimeHost->SetStartupFlags( static_cast<STARTUP_FLAGS>( STARTUP_FLAGS::STARTUP_CONCURRENT_GC |                        
            STARTUP_FLAGS::STARTUP_SINGLE_APPDOMAIN |                   
            STARTUP_FLAGS::STARTUP_LOADER_OPTIMIZATION_SINGLE_DOMAIN    
 ) );

 

5.启动runtimehost

       

          hr = runtimeHost->Start();

 

6.设置TpaList

          

const wchar_t* propertyValues[] = { trustedPlatformAssemblies, appPaths, appNiPaths, nativeDllSearchDirectories, platformResourceRoots };

 

7.创建Dome管理器

          

hr = runtimeHost->CreateAppDomainWithManager( L"Sample Host AppDomain",       
 appDomainFlags, NULL, 
        NULL,                          
        sizeof(propertyKeys) / sizeof(wchar_t*), propertyKeys, propertyValues, &domainId);

 

8.执行托管程式

         

         hr = runtimeHost->ExecuteAssembly(domainId, targetApp, argc-1, (LPCWSTR*)(argc > 1 ? &argv[1] : NULL), &exitCode);
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄