BFA_UNEXPECTED_TOKEN_AFTER_GENINST "A valid typedef or typeref token is expected to follow a ELEMENT_TYPE_GENERICINST."
BFA_TYPEDBYREFCANNOTHAVEBYREF "An ELEMENT_TYPE_TYPEDBYREF cannot have a ELEMENT_TYPE_BYREF modifier."
BFA_REFERENCE_ASSEMBLY "Cannot load a reference assembly for execution."
+ BFA_IJW_IN_COLLECTIBLE_ALC "Cannot load a mixed assembly into a collectible AssemblyLoadContext."
#ifdef FEATURE_COMINTEROP
BFA_WINRT_INVALID_NAMESPACE_FOR_TYPE "Windows Runtime type '%1' has invalid namespace that does not begin with the file name in assembly '%2'."
#define BFA_BAD_CLASS_INT_CA_FORMAT 0x2048
#define BFA_BAD_COMPLUS_SIG 0x2049
#define BFA_BAD_ELEM_IN_SIZEOF 0x204b
+#define BFA_IJW_IN_COLLECTIBLE_ALC 0x204c
#define IDS_CLASSLOAD_INTERFACE_NO_ACCESS 0x204f
// Need to verify that this is a valid CLR assembly.
if (!pILImage->CheckILFormat())
ThrowHR(COR_E_BADIMAGEFORMAT, BFA_BAD_IL);
+
+ LoaderAllocator* pLoaderAllocator = NULL;
+ if (SUCCEEDED(pBinderContext->GetLoaderAllocator((LPVOID*)&pLoaderAllocator)) && pLoaderAllocator->IsCollectible() && !pILImage->IsILOnly())
+ {
+ // Loading IJW assemblies into a collectible AssemblyLoadContext is not allowed
+ ThrowHR(COR_E_BADIMAGEFORMAT, BFA_IJW_IN_COLLECTIBLE_ALC);
+ }
}
// Form the PEImage for the NI assembly, if specified
// Get the binder context in which the assembly will be loaded
ICLRPrivBinder *pBinderContext = reinterpret_cast<ICLRPrivBinder*>(ptrNativeAssemblyLoadContext);
-
+
+ LoaderAllocator* pLoaderAllocator = NULL;
+ if (SUCCEEDED(pBinderContext->GetLoaderAllocator((LPVOID*)&pLoaderAllocator)) && pLoaderAllocator->IsCollectible() && !pILImage->IsILOnly())
+ {
+ // Loading IJW assemblies into a collectible AssemblyLoadContext is not allowed
+ ThrowHR(COR_E_BADIMAGEFORMAT, BFA_IJW_IN_COLLECTIBLE_ALC);
+ }
+
// Pass the stream based assembly as IL and NI in an attempt to bind and load it
Assembly* pLoadedAssembly = AssemblyNative::LoadFromPEImage(pBinderContext, pILImage, NULL);
{
<!-- IJW is not supported on ARM64 -->
<DisableProjectBuild Condition="'$(Platform)' == 'arm64'">true</DisableProjectBuild>
+ <!-- Loading IJW assemblies into an unloadable context is not allowed -->
+ <UnloadabilityIncompatible>true</UnloadabilityIncompatible>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<!-- IJW is not supported on ARM64 -->
<DisableProjectBuild Condition="'$(Platform)' == 'arm64'">true</DisableProjectBuild>
+ <!-- Loading IJW assemblies into an unloadable context is not allowed -->
+ <UnloadabilityIncompatible>true</UnloadabilityIncompatible>
</PropertyGroup>
<!-- Default configurations to help VS understand the configurations -->
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">