/// <param name="extensionDir">the directory where the entire extension is located, relative to application</param> /// <param name="files">an array files the extension consists of, relative to extensionDir</param> public void LoadExtension(String name, String extensionDir, String[] files) { String[] filesPath = new String[files.Length]; int i = 0; foreach (String p in files) { filesPath[i] = Path.Combine(extensionDir, p); // check source code presence if (!File.Exists(filesPath[i])) { throw new FileNotFoundException("Cannot find file for compiling extension", filesPath[i]); } i++; } // compile or load already compiled assembly String assemblyPath = Path.Combine(extensionDir, name + ".dll"); Assembly compiledAssembly; if (File.Exists(assemblyPath) && (!checkRecompiling(assemblyPath, filesPath))) { compiledAssembly = loadAssembly(assemblyPath); } else { File.Delete(assemblyPath); compiledAssembly = compileAssembly(assemblyPath, filesPath); } // process it by the layerFactory layerFactory.SearchAssembly(compiledAssembly); geometryFactory.SearchAssembly(compiledAssembly); // now run it ArrayList plugins = createInstances(compiledAssembly); foreach (IExtension p in plugins) { p.Init(); } }