| 2056 | } |
| 2057 | |
| 2058 | static MonoAssembly* OnMonoAssemblyLoad(const char* aname) |
| 2059 | { |
| 2060 | PROFILE_CPU(); |
| 2061 | ZoneText(aname, StringUtils::Length(aname)); |
| 2062 | |
| 2063 | // Find assembly file |
| 2064 | const String name(aname); |
| 2065 | #if DOTNET_HOST_MONO_DEBUG |
| 2066 | LOG(Info, "Loading C# assembly {0}", name); |
| 2067 | #endif |
| 2068 | String fileName = name; |
| 2069 | if (!name.EndsWith(TEXT(".dll")) && !name.EndsWith(TEXT(".exe"))) |
| 2070 | fileName += TEXT(".dll"); |
| 2071 | String path = Globals::ProjectFolder / String(TEXT("/Dotnet/")) / fileName; |
| 2072 | if (!FileSystem::FileExists(path)) |
| 2073 | { |
| 2074 | path = Globals::ProjectFolder / String(TEXT("/Dotnet/shared/Microsoft.NETCore.App/")) / fileName; |
| 2075 | if (!FileSystem::FileExists(path)) |
| 2076 | { |
| 2077 | path = fileName; |
| 2078 | } |
| 2079 | } |
| 2080 | |
| 2081 | // Load assembly |
| 2082 | #if DOTNET_HOST_MONO_DEBUG |
| 2083 | LOG(Info, "Loading C# assembly from path = {0}, exist = {1}", path, FileSystem::FileExists(path)); |
| 2084 | #endif |
| 2085 | MonoAssembly* assembly = nullptr; |
| 2086 | MonoImageOpenStatus status = MONO_IMAGE_IMAGE_INVALID; |
| 2087 | if (FileSystem::FileExists(path)) |
| 2088 | { |
| 2089 | StringAnsi pathAnsi(path); |
| 2090 | #if PLATFORM_IOS |
| 2091 | Array<byte> data; |
| 2092 | File::ReadAllBytes(path, data); |
| 2093 | const auto name = path.ToStringAnsi(); |
| 2094 | const auto assemblyImage = mono_image_open_from_data_with_name(reinterpret_cast<char*>(data.Get()), data.Count(), true, &status, false, name.Get()); |
| 2095 | if (assemblyImage) |
| 2096 | { |
| 2097 | assembly = mono_assembly_load_from_full(assemblyImage, name.Substring(0, name.Length() - 3).Get(), &status, false); |
| 2098 | mono_image_close(assemblyImage); |
| 2099 | } |
| 2100 | #else |
| 2101 | assembly = mono_assembly_open(pathAnsi.Get(), &status); |
| 2102 | #endif |
| 2103 | } |
| 2104 | if (!assembly) |
| 2105 | { |
| 2106 | LOG(Error, "Failed to load C# assembly {0}", path); |
| 2107 | } |
| 2108 | return assembly; |
| 2109 | } |
| 2110 | |
| 2111 | static MonoAssembly* OnMonoAssemblyPreloadHook(MonoAssemblyName* aname, char** assemblies_path, void* user_data) |
| 2112 | { |