From a204cc92dda615a9148dc6f8fd877d1e7faff9ad Mon Sep 17 00:00:00 2001 From: Michael Letterle Date: Fri, 31 Mar 2017 11:31:53 -0400 Subject: [PATCH] Lookup System.Runtime and mscorlib references by Assembly name Rather than by alias. Fixes dotnet/coreclr#10595 Commit migrated from https://github.com/dotnet/coreclr/commit/bf579f8fdc6dbc77c3d989b9992590d55784028e --- src/coreclr/src/ilasm/asmman.cpp | 11 +++++++++++ src/coreclr/src/ilasm/asmman.hpp | 2 ++ src/coreclr/src/ilasm/assembler.cpp | 16 ++++++++++++---- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/coreclr/src/ilasm/asmman.cpp b/src/coreclr/src/ilasm/asmman.cpp index 22e780f..47dc6eb 100644 --- a/src/coreclr/src/ilasm/asmman.cpp +++ b/src/coreclr/src/ilasm/asmman.cpp @@ -131,6 +131,17 @@ mdToken AsmMan::GetAsmRefTokByName(__in __nullterminated const char* AsmManAssembly* tmp = GetAsmRefByName(szAsmRefName); return(tmp ? tmp->tkTok : mdAssemblyRefNil); } +AsmManAssembly* AsmMan::GetAsmRefByAsmName(__in __nullterminated const char* szAsmName) +{ + AsmManAssembly* ret = NULL; + if(szAsmName) + { + for(int i=0; (ret = m_AsmRefLst.PEEK(i))&& + (strcmp(ret->szName,szAsmName)); i++); + } + return ret; +} + //============================================================================================================== void AsmMan::SetModuleName(__inout_opt __nullterminated char* szName) { diff --git a/src/coreclr/src/ilasm/asmman.hpp b/src/coreclr/src/ilasm/asmman.hpp index 0ee875b..00f4d52 100644 --- a/src/coreclr/src/ilasm/asmman.hpp +++ b/src/coreclr/src/ilasm/asmman.hpp @@ -272,6 +272,8 @@ public: void SetManifestResFile(__in __nullterminated char* szFileName, ULONG ulOffset); void SetManifestResAsmRef(__in __nullterminated char* szAsmRefName); + AsmManAssembly* GetAsmRefByAsmName(__in __nullterminated const char* szAsmName); + mdToken GetFileTokByName(__in __nullterminated char* szFileName); mdToken GetAsmRefTokByName(__in __nullterminated const char* szAsmRefName); mdToken GetAsmTokByName(__in __nullterminated const char* szAsmName) diff --git a/src/coreclr/src/ilasm/assembler.cpp b/src/coreclr/src/ilasm/assembler.cpp index 957b0bd..be535ab 100644 --- a/src/coreclr/src/ilasm/assembler.cpp +++ b/src/coreclr/src/ilasm/assembler.cpp @@ -276,14 +276,22 @@ mdToken Assembler::GetAsmRef(__in __nullterminated const char* szName) mdToken Assembler::GetBaseAsmRef() { - if (RidFromToken(m_pManifest->GetAsmRefTokByName("System.Runtime")) != 0) + AsmManAssembly* sysRuntime = m_pManifest->GetAsmRefByAsmName("System.Runtime"); + if(sysRuntime != NULL) { - return GetAsmRef("System.Runtime"); + return GetAsmRef(sysRuntime->szAlias ? sysRuntime->szAlias : sysRuntime->szName); } - if (RidFromToken(m_pManifest->GetAsmRefTokByName("netstandard")) != 0) + AsmManAssembly* mscorlibAsm = m_pManifest->GetAsmRefByAsmName("mscorlib"); + if(mscorlibAsm != NULL) { - return GetAsmRef("netstandard"); + return GetAsmRef(mscorlibAsm->szAlias ? mscorlibAsm->szAlias : mscorlibAsm->szName); + } + + AsmManAssembly* netstandardAsm = m_pManifest->GetAsmRefByAsmName("netstandard"); + if (netstandardAsm != NULL) + { + return GetAsmRef(netstandardAsm->szAlias ? netstandardAsm->szAlias : netstandardAsm->szName); } return GetAsmRef("mscorlib"); -- 2.7.4