def _create_asm_file(extension, ext_asm_file_name, ext_asm_file_path): # check to see if any older assemblies have been loaded for this package ext_asm_full_file_name = make_canonical_name(ext_asm_file_name, ASSEMBLY_FILE_TYPE) # this means that we currently have this package loaded and # we're reloading a new version is_reloading_pkg = _is_any_ext_asm_loaded(extension) # create assembly logger.debug('Building assembly for package: {}'.format(extension)) pyrvt_ver_int_tuple = get_pyrevit_version().as_int_tuple() win_asm_name = AssemblyName(Name=ext_asm_file_name, Version=Version(pyrvt_ver_int_tuple[0], pyrvt_ver_int_tuple[1], pyrvt_ver_int_tuple[2])) logger.debug('Generated assembly name for this package: {0}'.format( ext_asm_file_name)) logger.debug( 'Generated windows assembly name for this package: {0}'.format( win_asm_name)) logger.debug('Generated assembly file name for this package: {0}'.format( ext_asm_full_file_name)) # get assembly builder asm_builder = AppDomain.CurrentDomain.DefineDynamicAssembly( win_asm_name, AssemblyBuilderAccess.RunAndSave, op.dirname(ext_asm_file_path)) # get module builder module_builder = asm_builder.DefineDynamicModule(ext_asm_file_name, ext_asm_full_file_name) # create classes that could be called from any button (shared classes) # currently only default availability class is implemented. # Default availability class is for resetting buttons back to normal # context state (when reloading and after their context # has changed during a session). make_shared_types(module_builder) # create command classes for cmd_component in extension.get_all_commands(): # create command executor class for this command logger.debug('Creating types for command: {}'.format(cmd_component)) make_cmd_types(extension, cmd_component, module_builder) # save final assembly asm_builder.Save(ext_asm_full_file_name) load_asm_file(ext_asm_file_path) logger.debug('Executer assembly saved.') return ExtensionAssemblyInfo(ext_asm_file_name, ext_asm_file_path, is_reloading_pkg)
def _update_component_cmd_types(extension): for cmd_component in extension.get_all_commands(): make_cmd_types(extension, cmd_component, module_builder=None)