/// <summary> /// Gets the references. /// </summary> /// <param name="project">The project.</param> /// <param name="references">The references.</param> /// <param name="projectReferences">The project references.</param> private void GetReferences(Microsoft.Build.Evaluation.Project project, ref IList<VSProjectReference> references, ref IList<VSProjectReference> projectReferences) { foreach (ProjectItem projectItem in project.AllEvaluatedItems) { if (projectItem.ItemType == REFERENCE || projectItem.ItemType == PROJECT_REFERENCE) { VSProjectReference reference = new VSProjectReference(); reference.Include = projectItem.EvaluatedInclude; if (projectItem.ItemType == PROJECT_REFERENCE) { reference.IsProjectReference = true; reference.ProjectReferenceId = new Guid(projectItem.GetMetadataValue(PROJECT_REFERENCE_ID)); projectReferences.Add(reference); } else { reference.HintPath = projectItem.GetMetadataValue(REFERENCE_HINT_PATH); if (reference.HintPath == string.Empty) reference.HintPath = null; references.Add(reference); } } } }
private static IList<VSProjectReference> GetReferences(XmlDocument xmlDocument, string xpath, bool isProjectReference) { XmlNamespaceManager namespaceManager = GetNamespaceManager(xmlDocument); XmlNodeList nodeList = xmlDocument.SelectNodes(xpath, namespaceManager); List<VSProjectReference> references = new List<VSProjectReference>(); if (nodeList != null) { foreach (XmlNode node in nodeList) { string include = SelectAttributeValue(node, "Include"); string hintPath = null; Guid? projectReferenceId = null; foreach (XmlNode childNode in node.ChildNodes) { if (childNode.Name == "HintPath") { hintPath = childNode.InnerXml; } else if (childNode.Name == "Project") { projectReferenceId = new Guid(childNode.InnerXml); } } VSProjectReference reference = new VSProjectReference(); reference.Include = include; reference.HintPath = hintPath; reference.IsProjectReference = isProjectReference; reference.ProjectReferenceId = projectReferenceId.GetValueOrDefault(); references.Add(reference); } } return references; }
/// <summary> /// Parses the silverlight references. /// </summary> /// <param name="referenceList">The reference list.</param> /// <returns></returns> public static IList<VSProjectReference> ParseSilverlightReferences(string referenceList) { List<VSProjectReference> references = new List<VSProjectReference>(); if (!string.IsNullOrEmpty(referenceList)) { string[] projectNodes = referenceList.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); foreach (string projectNode in projectNodes) { string[] nodes = projectNode.Split("|".ToCharArray()); if (nodes.Length >= 2) { VSProjectReference reference = new VSProjectReference(); reference.HintPath = nodes[1]; reference.IsSilverlightReference = true; reference.ProjectReferenceId = new Guid(nodes[0]); references.Add(reference); } } } return references; }
private void ResolveProject(ProjectSetup projectSetup, ProjectLoader projectLoader, VSProject project, VSProjectReference reference, List<VSProject> referencedProjects) { VSProject vsProject; if (reference.IsProjectReference) { // resolve by ID vsProject = projectLoader.GetProjectById(reference.ProjectReferenceId); } else if (reference.IsSilverlightReference) { vsProject = projectLoader.GetProjectById(reference.ProjectReferenceId); } else { // resolve by output path vsProject = projectLoader.GetProjectByOutput(reference.ResolvedHintPath); } if (vsProject != null) { referencedProjects.Add(vsProject); } else { // fall back scenario, check assembly name in current project output path string outputDirectory = Path.GetDirectoryName(project.ResolvedOutput) ?? "."; string currentFolderAssembly = Path.Combine(outputDirectory, reference.ResolvedInclude) + ".dll"; vsProject = projectLoader.GetProjectByOutput(currentFolderAssembly); if (vsProject== null) { currentFolderAssembly = Path.Combine(outputDirectory, reference.ResolvedInclude) + ".exe"; vsProject = projectLoader.GetProjectByOutput(currentFolderAssembly); } if (vsProject == null) { if (projectSetup.WhenReferenceNotResolved == ProjectSetupBehavior.Fail) { throw new SolutionGeneratorException( "Reference {0} was not resolved. {3}Project {1}. {3}Expected location = {2}{3}", reference.ResolvedInclude, project.ProjectFileLocation, reference.ResolvedHintPath, Environment.NewLine); } if (projectSetup.WhenReferenceNotResolved == ProjectSetupBehavior.Warn) { Logger.Warn( "Reference {0} was not resolved. {3}Project {1}. {3}Expected location = {2}{3}", reference.ResolvedInclude, project.ProjectFileLocation, reference.ResolvedHintPath, Environment.NewLine); } } else { if (projectSetup.WhenReferenceResolvedInDifferentLocation == ProjectSetupBehavior.Fail) { throw new SolutionGeneratorException( "Reference {0} was not resolved. {4}Project {1}. {4}Expected location = {2}{4}However it was found in project output folder {3}.{4}", reference.ResolvedInclude, project.ProjectFileLocation, reference.ResolvedHintPath, outputDirectory, Environment.NewLine); } if (projectSetup.WhenReferenceResolvedInDifferentLocation == ProjectSetupBehavior.Warn) { Logger.Warn( "Reference {0} was not resolved. {4}Project {1}. {4}Expected location = {2}{4}However it was found in project output folder {3}.{4}", reference.ResolvedInclude, project.ProjectFileLocation, reference.ResolvedHintPath, outputDirectory, Environment.NewLine); } } } }