string ProjectName(EnvDTE.Project project) { string fileName = project.FileName.TrimEnd(Path.DirectorySeparatorChar); fileName = ExtendedPath.GetRelativePath(this.solutionDir, fileName); return(fileName); }
public static System.IServiceProvider GetServiceProvider(EnvDTE.Project project) { System.IServiceProvider sp = new Microsoft.VisualStudio.Shell.ServiceProvider(project.DTE as Microsoft.VisualStudio.OLE.Interop.IServiceProvider); return(sp); }
public static IVsHierarchy GetVsHierarchy(EnvDTE.Project project) { return(GetVsHierarchy(GetServiceProvider(project), project)); }
string GetAssemblyPath(SemanticModel semanticModel, string assemblyDef, out bool isProject) { IEnumerator <AssemblyIdentity> refAsmNames = semanticModel.Compilation.ReferencedAssemblyNames.GetEnumerator(); IEnumerator <MetadataReference> refs = semanticModel.Compilation.References.GetEnumerator(); isProject = false; var projName = assemblyDef.Split(',').First().Trim(); // try find in referenced assemblies first MetadataReference metReference = null; string displayName = assemblyDef; while (refAsmNames.MoveNext()) { refs.MoveNext(); if (!string.Equals(refAsmNames.Current.ToString(), assemblyDef, StringComparison.OrdinalIgnoreCase)) { continue; } displayName = refs.Current.Display; metReference = refs.Current; //maybe a reference assembly such as "C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.5.1\\mscorlib.dll" if (displayName.Contains("Reference Assemblies")) { var fileName = Path.GetFileName(displayName); displayName = Path.GetFileNameWithoutExtension(fileName); //e.g. C:\windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll var gacPath = GacHelper.GetAssemblyPath(displayName); if (gacPath.Item2) { return(gacPath.Item1); } else { return(displayName); } } if (displayName.ToLower().Contains("\\packages\\")) { return(displayName); } if (metReference.Properties.Kind == MetadataImageKind.Assembly && File.Exists(displayName)) { return(displayName); } } //var assembly = semanticModel.Compilation.GetAssemblyOrModuleSymbol(metReference); //symbols defined in other projects of the same solution EnvDTE.Project project = null; // try found project var prjItem = _dte.Solution.FindProjectItem(projName); if (prjItem != null) { project = prjItem.ContainingProject; } foreach (EnvDTE.Project proj in _dte.Solution.Projects) { project = _findProject(proj, projName); if (project != null) { break; } } //project reference if (project != null) { isProject = true; return(getProjectOutputPath(project)); } //symbol defined in current project of active document EnvDTE.Project curProject = _dte.ActiveDocument.ProjectItem.ContainingProject as EnvDTE.Project; if (curProject != null) { isProject = true; return(getProjectOutputPath(curProject)); } return(assemblyDef); }