public static bool TryWeaveAssembly(string assemblyAssetPath) { var settings = ReflectionBakingInternalUtil.TryGetEnabledSettingsInstance(); if (settings == null) { return(false); } var stopwatch = new Stopwatch(); stopwatch.Start(); var runner = new ReflectionBakingRunner(settings); int numTypesChanged = runner.Run(assemblyAssetPath); stopwatch.Start(); if (numTypesChanged > 0) { UnityEngine.Debug.Log("Added reflection baking to '{0}' types in assembly '{1}', took {2:0.00} seconds" .Fmt(numTypesChanged, Path.GetFileName(assemblyAssetPath), stopwatch.Elapsed.TotalSeconds)); return(true); } return(false); }
static void TryWeaveAssembly(string assemblyAssetPath) { var settings = ReflectionBakingInternalUtil.TryGetEnabledSettingsInstance(); if (settings == null) { return; } if (settings.AllGeneratedAssemblies && settings.ExcludeAssemblies.Contains(assemblyAssetPath)) { return; } if (!settings.AllGeneratedAssemblies && !settings.IncludeAssemblies.Contains(assemblyAssetPath)) { return; } var stopwatch = new Stopwatch(); stopwatch.Start(); var assemblyFullPath = ReflectionBakingInternalUtil.ConvertAssetPathToSystemPath(assemblyAssetPath); var readerParameters = new ReaderParameters { AssemblyResolver = new UnityAssemblyResolver(), }; var module = ModuleDefinition.ReadModule(assemblyFullPath, readerParameters); var assemblyRefNames = module.AssemblyReferences.Select(x => x.Name.ToLower()).ToList(); if (!assemblyRefNames.Contains("zenject-usage")) { // Zenject-usage is used by the generated methods // Important that we do this check otherwise we can corrupt some dlls that don't have access to it return; } var assemblyName = Path.GetFileNameWithoutExtension(assemblyAssetPath); var assembly = AppDomain.CurrentDomain.GetAssemblies() .Where(x => x.GetName().Name == assemblyName).OnlyOrDefault(); Assert.IsNotNull(assembly, "Could not find unique assembly '{0}' in currently loaded list of assemblies", assemblyName); int numTypesChanged = ReflectionBakingModuleEditor.WeaveAssembly( module, assembly, settings.NamespacePatterns); if (numTypesChanged > 0) { module.Write(assemblyFullPath, new WriterParameters()); Debug.Log("Added reflection baking to '{0}' types in assembly '{1}', took {2:0.00} seconds" .Fmt(numTypesChanged, Path.GetFileName(assemblyAssetPath), stopwatch.Elapsed.TotalSeconds)); } }