IMonoAssembly *CScriptDomain::LoadAssembly(const char *file, bool shadowCopy, bool convertPdbToMdb) { const char *path; if(shadowCopy) path = GetTempPath().append(PathUtil::GetFile(file)); else path = file; for each(auto assembly in m_assemblies) { if(!strcmp(path, assembly->GetPath())) return assembly; } if(shadowCopy) CopyFile(file, path, false); string sAssemblyPath(path); #ifndef _RELEASE if(g_pMonoCVars->mono_generateMdbIfPdbIsPresent != 0 && convertPdbToMdb && sAssemblyPath.find("pdb2mdb")==-1) { if (IMonoAssembly *pDebugDatabaseCreator = static_cast<CScriptSystem *>(GetMonoScriptSystem())->GetDebugDatabaseCreator()) { if(IMonoClass *pDriverClass = pDebugDatabaseCreator->GetClass("Driver", "")) { if(IMonoMethod *pConvertMethod = pDriverClass->GetMethod("Convert", 1)) { IMonoArray *pArgs = CreateMonoArray(1); pArgs->Insert(path); pConvertMethod->InvokeArray(nullptr, pArgs); SAFE_RELEASE(pArgs); } } } } #endif if(MonoAssembly *pMonoAssembly = mono_domain_assembly_open(m_pDomain, path)) { CScriptAssembly *pAssembly = new CScriptAssembly(this, mono_assembly_get_image(pMonoAssembly), path); m_assemblies.push_back(pAssembly); return pAssembly; } return nullptr; }
IMonoAssembly *CScriptDomain::LoadAssembly(const char *file, bool shadowCopy, bool convertPdbToMdb) { const char *path; if(shadowCopy) path = GetTempPath().append(PathUtil::GetFile(file)); else path = file; for each(auto assembly in m_assemblies) { if(!strcmp(path, assembly->GetPath())) return assembly; } if(shadowCopy) CopyFile(file, path, false); string sAssemblyPath(path); #ifndef _RELEASE if(convertPdbToMdb && sAssemblyPath.find("pdb2mdb")==-1) { if(IMonoAssembly *pDebugDatabaseCreator = g_pScriptSystem->GetDebugDatabaseCreator()) { if(IMonoClass *pDriverClass = pDebugDatabaseCreator->GetClass("Driver", "")) { IMonoArray *pArgs = CreateMonoArray(1); pArgs->Insert(path); pDriverClass->InvokeArray(NULL, "Convert", pArgs); SAFE_RELEASE(pArgs); } } } #endif MonoAssembly *pMonoAssembly = mono_domain_assembly_open(m_pDomain, path); CRY_ASSERT(pMonoAssembly); CScriptAssembly *pAssembly = new CScriptAssembly(this, mono_assembly_get_image(pMonoAssembly), path); m_assemblies.push_back(pAssembly); return pAssembly; }