Ejemplo n.º 1
0
        string ProjectName(EnvDTE.Project project)
        {
            string fileName = project.FileName.TrimEnd(Path.DirectorySeparatorChar);

            fileName = ExtendedPath.GetRelativePath(this.solutionDir, fileName);
            return(fileName);
        }
Ejemplo n.º 2
0
 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);
 }
Ejemplo n.º 3
0
 public static IVsHierarchy GetVsHierarchy(EnvDTE.Project project)
 {
     return(GetVsHierarchy(GetServiceProvider(project), project));
 }
Ejemplo n.º 4
0
        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);
        }