Fix loading C# assemblies from Mono AOT output

This commit is contained in:
Wojtek Figat
2023-03-31 18:31:25 +02:00
parent 7bec45dacf
commit e562a7d72c
3 changed files with 25 additions and 3 deletions

View File

@@ -65,16 +65,23 @@ bool MAssembly::Load(const String& assemblyPath, const StringView& nativePath)
PROFILE_CPU();
ZoneText(*assemblyPath, assemblyPath.Length());
const String* pathPtr = &assemblyPath;
String path;
if (!FileSystem::FileExists(assemblyPath))
{
Log::FileNotFoundException ex(assemblyPath);
return true;
path = assemblyPath;
pathPtr = &path;
if (ResolveMissingFile(path))
{
Log::FileNotFoundException ex(assemblyPath);
return true;
}
}
const auto startTime = DateTime::NowUTC();
OnLoading();
if (LoadImage(assemblyPath, nativePath))
if (LoadImage(*pathPtr, nativePath))
{
OnLoadFailed();
return true;

View File

@@ -761,6 +761,16 @@ MClass::MClass(const MAssembly* parentAssembly, void* handle, const char* name,
classHandles.Add(handle, this);
}
bool MAssembly::ResolveMissingFile(String& assemblyPath) const
{
#if DOTNET_HOST_MONO
// Fallback to AOT-ed assembly location
assemblyPath = Globals::BinariesFolder / TEXT("Dotnet") / StringUtils::GetFileName(assemblyPath);
return !FileSystem::FileExists(assemblyPath);
#endif
return true;
}
MClass::~MClass()
{
_methods.ClearDelete();

View File

@@ -1170,6 +1170,11 @@ bool MAssembly::UnloadImage(bool isReloading)
return false;
}
bool MAssembly::ResolveMissingFile(String& assemblyPath) const
{
return true;
}
MClass::MClass(const MAssembly* parentAssembly, MonoClass* monoClass, const StringAnsi& fullname)
: _assembly(parentAssembly)
, _fullname(fullname)