public static System.Type[] GetCreatableObjectImplementsInterface(Type interfaceType, string path, AppDomain domain) { var al = new ArrayList(); if (System.IO.File.Exists(path)) { al.Add(Assembly.LoadFile(path)); } else { var fullPath = StringHelper.EnsureDirectorySeparatorAtEnd(path); if (!System.IO.Directory.Exists(fullPath)) //Check for path existence { return new System.Type[] { } } ; al = LoadAllAssembliesForPath(fullPath); } var retval = new ArrayList(); try { foreach (System.Reflection.Assembly assembly in al) { try { foreach (var t in assembly.GetTypes()) { if (ImplementsInterface(t, interfaceType) && !t.IsAbstract && !t.IsInterface) { retval.Add(t); } } } catch (System.Reflection.ReflectionTypeLoadException ex) { nHydrateLog.LogError(ex, "Could not load types for assembly: " + assembly.FullName); foreach (var innerEx in ex.LoaderExceptions) { nHydrateLog.LogError(innerEx, "Loader Exception: " + innerEx.Message); } } catch (Exception ex) { nHydrateLog.LogError(ex, "Could not load types for assembly: " + assembly.FullName); } } } catch (Exception ex) { throw; } return((System.Type[])retval.ToArray(typeof(System.Type))); } #endregion }
public ProjectItem AddFileAsProjectItem(Project project, string fileName, string relativePathAndName, bool overwrite, out FileStateInfo fileStateInfo) { try { fileStateInfo = new FileStateInfo(); fileStateInfo.FileState = FileStateConstants.Failed; FileInfo newFile = null; if (project.Kind == Constants.vsProjectKindUnmodeled) { var applicationObject = (DTE)EnvDTEHelper.Instance._applicationObject; //Handle on Solution Explorer window var slnExplorer = applicationObject.Windows.Item(Constants.vsWindowKindSolutionExplorer); var slnHierarchy = (UIHierarchy)slnExplorer.Object; slnExplorer.Activate(); var dbProject = EnvDTEHelper.Instance.Find(project); dbProject.Select(vsUISelectionType.vsUISelectionTypeSelect); } else { var currentProjectFile = new FileInfo(project.FileName); var fullName = StringHelper.EnsureDirectorySeparatorAtEnd(currentProjectFile.Directory.FullName) + relativePathAndName; fullName = fullName.Replace(@"\\", @"\"); fileStateInfo.FileName = fullName; newFile = new FileInfo(fullName); if (newFile.Exists && !overwrite) { fileStateInfo.FileState = FileStateConstants.Skipped; return(null); } else if (newFile.Exists && (newFile.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) { fileStateInfo.FileState = FileStateConstants.Failed; return(null); } if (!newFile.Directory.Exists) { newFile.Directory.Create(); } File.Copy(fileName, newFile.FullName); } try { fileStateInfo.FileState = FileStateConstants.Success; return(project.ProjectItems.AddFromFile(newFile.FullName)); } catch (Exception ex) { fileStateInfo.FileState = FileStateConstants.Failed; return(null); } } catch (Exception ex) { throw; } }
public FileInfo[] Find(string fileExtension) { var fileInfos = new ArrayList(); foreach (UIHierarchyItem hierarchyItem in SolutionHierarchy.UIHierarchyItems.Item(1).UIHierarchyItems) { if (hierarchyItem.Name == "Solution Items") { foreach (UIHierarchyItem subHierarchyItem in hierarchyItem.UIHierarchyItems) { if (subHierarchyItem.Name.EndsWith(".xml")) { var fi = new FileInfo(StringHelper.EnsureDirectorySeparatorAtEnd(this.SolutionDirectory.FullName) + "doc/" + subHierarchyItem.Name); if (fi.Extension == fileExtension) { fileInfos.Add(fi); } } } } } return((FileInfo[])fileInfos.ToArray(typeof(FileInfo))); }
public ProjectItem AddProjectItem(Project project, string fileContent, byte[] fileContentBinary, ProjectItemContentType contentType, string relativePathAndName, bool overwrite, out FileStateInfo fileStateInfo) { try { BuildCache(project); fileStateInfo = new FileStateInfo(); fileStateInfo.FileState = FileStateConstants.Failed; FileInfo newFile = null; if (project.Kind == Constants.vsProjectKindUnmodeled) { var applicationObject = (DTE)EnvDTEHelper.Instance._applicationObject; //Handle on Solution Explorer window var slnExplorer = applicationObject.Windows.Item(Constants.vsWindowKindSolutionExplorer); var slnHierarchy = (UIHierarchy)slnExplorer.Object; slnExplorer.Activate(); var dbProject = EnvDTEHelper.Instance.Find(project); dbProject.Select(vsUISelectionType.vsUISelectionTypeSelect); } else { var currentProjectFile = new FileInfo(project.FileName); var fullName = StringHelper.EnsureDirectorySeparatorAtEnd(currentProjectFile.Directory.FullName) + relativePathAndName; fullName = fullName.Replace(@"\\", @"\"); fileStateInfo.FileName = fullName; newFile = new FileInfo(fullName); if (newFile.Exists && !overwrite) { fileStateInfo.FileState = FileStateConstants.Skipped; if (_projectCache[project].Select(x => x.Name).Contains(fullName.ToLower())) { //Do Nothing return(null); } else { return(project.ProjectItems.AddFromFile(newFile.FullName)); } } else if (newFile.Exists && (newFile.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) { fileStateInfo.FileState = FileStateConstants.Failed; return(null); } if (!newFile.Directory.Exists) { newFile.Directory.Create(); } if (contentType == ProjectItemContentType.String) { using (var sw = newFile.CreateText()) { sw.Write(fileContent); } } else { File.WriteAllBytes(newFile.FullName, fileContentBinary); } } try { fileStateInfo.FileState = FileStateConstants.Success; if (_projectCache[project].Select(x => x.Name).Contains(newFile.FullName.ToLower())) { //Do Nothing return(null); } else { return(project.ProjectItems.AddFromFile(newFile.FullName)); } } catch (Exception ex) { fileStateInfo.FileState = FileStateConstants.Failed; return(null); } } catch (Exception ex) { throw; } }