@@ -193,16 +193,16 @@ private set
193193 internal AssemblyPool GameAssemblyPool { get ; }
194194 internal AssemblyPool PatcherAssemblyPool { get ; }
195195 internal AssemblyPool RuntimeAssemblyPool { get ; }
196-
196+
197197 public IAssemblyLoadStrategy AssemblyLoadStrategy { get ; }
198198
199199 public Assembly ? ResolveAssemblyFromPoolsAndMods ( System . Reflection . AssemblyName assemblyName )
200200 {
201201 var mlAssemblyName = new AssemblyName ( assemblyName . FullName ) ;
202-
202+
203203 if ( PatcherAssemblyPool . TryResolveAssembly ( mlAssemblyName , out var assembly ) )
204204 return assembly ;
205-
205+
206206 if ( GameAssemblyPool . TryResolveAssembly ( mlAssemblyName , out assembly ) )
207207 return assembly ;
208208
@@ -223,14 +223,14 @@ static MonkeyLoader()
223223
224224 // Assume Unity structure
225225 var gameName = Path . GetFileNameWithoutExtension ( executablePath ) ;
226- var gameAssemblyPath = Path . Combine ( Path . GetDirectoryName ( executablePath ) , $ "{ GameName } _Data", "Managed" ) ;
226+ var gameAssemblyPath = Path . Combine ( Path . GetDirectoryName ( executablePath ) ! , $ "{ GameName } _Data", "Managed" ) ;
227227
228228 if ( ! Directory . Exists ( gameAssemblyPath ) )
229229 {
230230 // If Unity directory doesn't exist, assume plain .NET application
231231 DirectoryInfo executablePathInfo = new ( executablePath ) ;
232232
233- gameName = executablePathInfo . Parent . Name ;
233+ gameName = executablePathInfo . Parent ! . Name ;
234234 gameAssemblyPath = executablePathInfo . Parent . FullName ;
235235 }
236236
@@ -268,7 +268,7 @@ public MonkeyLoader(LoggingController loggingController, string configPath = Def
268268#if NET5_0_OR_GREATER
269269 AssemblyLoadStrategy = new AssemblyLoadContextLoadStrategy ( ) ;
270270#endif
271-
271+
272272 ConfigPath = configPath ;
273273 Id = GetId ( configPath ) ;
274274
@@ -284,25 +284,33 @@ public MonkeyLoader(LoggingController loggingController, string configPath = Def
284284
285285 foreach ( var modLocation in Locations . Mods )
286286 {
287- modLocation . LoadMod += ( mL , path ) => TryLoadAndRunMod ( path , out _ ) ;
287+ modLocation . LoadMod += ( mL , path ) =>
288+ {
289+ Logger . Info ( ( ) => $ "Trying to hot-load mod from: { path } ") ;
290+
291+ TryLoadAndRunMod ( path , out _ ) ;
292+ } ;
293+
288294 modLocation . UnloadMod += ( mL , path ) =>
289295 {
296+ Logger . Info ( ( ) => $ "Trying to unload mod from: { path } ") ;
297+
290298 if ( TryFindModByLocation ( path , out var mod ) )
291299 ShutdownMod ( mod ) ;
292300 } ;
293301 }
294302
295303 // TODO: do this properly - scan all loaded assemblies?
296304 NuGet = new NuGetManager ( this ) ;
297- NuGet . Add ( new LoadedNuGetPackage ( new PackageIdentity ( "MonkeyLoader" , new NuGetVersion ( Assembly . GetExecutingAssembly ( ) . GetName ( ) . Version ) ) , NuGetHelper . Framework ) ) ;
298- NuGet . Add ( new LoadedNuGetPackage ( new PackageIdentity ( "Newtonsoft.Json" , new NuGetVersion ( 13 , 0 , 3 ) ) , NuGetHelper . Framework ) ) ;
299- NuGet . Add ( new LoadedNuGetPackage ( new PackageIdentity ( "NuGet.Packaging" , new NuGetVersion ( 6 , 10 , 0 ) ) , NuGetHelper . Framework ) ) ;
300- NuGet . Add ( new LoadedNuGetPackage ( new PackageIdentity ( "NuGet.Protocol" , new NuGetVersion ( 6 , 10 , 0 ) ) , NuGetHelper . Framework ) ) ;
301- NuGet . Add ( new LoadedNuGetPackage ( new PackageIdentity ( "Mono.Cecil" , new NuGetVersion ( 0 , 11 , 5 ) ) , NuGetHelper . Framework ) ) ;
302- NuGet . Add ( new LoadedNuGetPackage ( new PackageIdentity ( "Harmony" , new NuGetVersion ( 2 , 3 , 3 ) ) , NuGetHelper . Framework ) ) ;
303- NuGet . Add ( new LoadedNuGetPackage ( new PackageIdentity ( "Lib.Harmony" , new NuGetVersion ( 2 , 3 , 3 ) ) , NuGetHelper . Framework ) ) ;
304- NuGet . Add ( new LoadedNuGetPackage ( new PackageIdentity ( "Lib.Harmony.Thin" , new NuGetVersion ( 2 , 3 , 3 ) ) , NuGetHelper . Framework ) ) ;
305- NuGet . Add ( new LoadedNuGetPackage ( new PackageIdentity ( "Zio" , new NuGetVersion ( 0 , 18 , 0 ) ) , NuGetHelper . Framework ) ) ;
305+ NuGet . Add ( new LoadedNuGetPackage ( new PackageIdentity ( "MonkeyLoader" , new NuGetVersion ( Assembly . GetExecutingAssembly ( ) . GetName ( ) . Version ! ) ) , NuGetHelper . Framework ) ) ;
306+ NuGet . Add ( new LoadedNuGetPackage ( new PackageIdentity ( "Newtonsoft.Json" , new NuGetVersion ( 13 , 0 , 4 ) ) , NuGetHelper . Framework ) ) ;
307+ NuGet . Add ( new LoadedNuGetPackage ( new PackageIdentity ( "NuGet.Packaging" , new NuGetVersion ( 6 , 14 , 0 ) ) , NuGetHelper . Framework ) ) ;
308+ NuGet . Add ( new LoadedNuGetPackage ( new PackageIdentity ( "NuGet.Protocol" , new NuGetVersion ( 6 , 14 , 0 ) ) , NuGetHelper . Framework ) ) ;
309+ NuGet . Add ( new LoadedNuGetPackage ( new PackageIdentity ( "Mono.Cecil" , new NuGetVersion ( 0 , 11 , 6 ) ) , NuGetHelper . Framework ) ) ;
310+ NuGet . Add ( new LoadedNuGetPackage ( new PackageIdentity ( "Harmony" , new NuGetVersion ( 2 , 4 , 2 ) ) , NuGetHelper . Framework ) ) ;
311+ NuGet . Add ( new LoadedNuGetPackage ( new PackageIdentity ( "Lib.Harmony" , new NuGetVersion ( 2 , 4 , 2 ) ) , NuGetHelper . Framework ) ) ;
312+ NuGet . Add ( new LoadedNuGetPackage ( new PackageIdentity ( "Lib.Harmony.Thin" , new NuGetVersion ( 2 , 4 , 2 ) ) , NuGetHelper . Framework ) ) ;
313+ NuGet . Add ( new LoadedNuGetPackage ( new PackageIdentity ( "Zio" , new NuGetVersion ( 0 , 22 , 1 ) ) , NuGetHelper . Framework ) ) ;
306314
307315 RuntimeAssemblyPool = new AssemblyPool ( this , "RuntimeAssemblyPool" , ( ) => Locations . PatchedAssemblies ) ;
308316 RuntimeAssemblyPool . AddSearchDirectory ( RuntimeAssemblyPath ) ;
@@ -623,6 +631,8 @@ public void LoadGamePackMonkeys()
623631 /// <returns>The loaded mod.</returns>
624632 public NuGetPackageMod LoadMod ( string path , bool isGamePack = false )
625633 {
634+ path = Path . GetFullPath ( path ) ;
635+
626636 Logger . Debug ( ( ) => $ "Loading { ( isGamePack ? "game pack" : "regular" ) } mod from: { path } ") ;
627637
628638 var mod = new NuGetPackageMod ( this , path , isGamePack ) ;
@@ -1035,7 +1045,8 @@ public bool TryFindModByLocation(string location, [NotNullWhen(true)] out Mod? m
10351045 return false ;
10361046 }
10371047
1038- var mods = _allMods . Where ( mod => location . Equals ( mod . Location , StringComparison . Ordinal ) ) . ToArray ( ) ;
1048+ // Ignores case, which may be technically wrong for some file systems, but makes sense for mod files.
1049+ var mods = _allMods . Where ( mod => location . Equals ( mod . Location , StringComparison . OrdinalIgnoreCase ) ) . ToArray ( ) ;
10391050
10401051 if ( mods . Length == 0 )
10411052 return false ;
0 commit comments