MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / OnMonoAssemblyLoad

Function OnMonoAssemblyLoad

Source/Engine/Scripting/Runtime/DotNet.cpp:2058–2109  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2056}
2057
2058static 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
2111static MonoAssembly* OnMonoAssemblyPreloadHook(MonoAssemblyName* aname, char** assemblies_path, void* user_data)
2112{

Callers 2

GetStaticMethodPointerFunction · 0.85

Calls 8

SubstringMethod · 0.80
LengthFunction · 0.50
StringFunction · 0.50
EndsWithMethod · 0.45
ToStringAnsiMethod · 0.45
GetMethod · 0.45
CountMethod · 0.45
LengthMethod · 0.45

Tested by

no test coverage detected