예제 #1
0
        public override string ToString()
        {
            if (HintPath.IsNotNullOrEmpty())
            {
                var fi = new FileInfo(HintPath);
                if (!fi.Exists)
                {
                    Warnings.Add("HintPath not found.");
                }
            }

            HintPathAbsolute = HintPath;

            if (HintPath.StartsWith("."))
            {
                // Try and find the dll referred to
                var projectFileFolder = new FileInfo(ProjectFile).Directory;
                this.ProjectRoot = projectFileFolder.FullName;

                var absoluteAssembly = new FileInfo(Path.Combine(projectFileFolder.FullName, HintPath));
                HintPathAbsoluteExists = absoluteAssembly.Exists;

                HintPathAbsolute = absoluteAssembly.FullName;

                Warnings.Add("Checking: " + absoluteAssembly.FullName);

                if (absoluteAssembly.Exists == false)
                {
                    Warnings.Add("@@" + absoluteAssembly.FullName + " not found.");
                }
            }

            var result = new StringBuilder("[" + GetType().FullName + "]\n");

            result.AppendLine("Assembly: " + Assembly);
            result.AppendLine("ProjectRoot: " + ProjectRoot);
            result.AppendLine("HintPath: " + HintPath);
            result.AppendLine("HintPathAbsolute: " + HintPathAbsolute);
            result.AppendLine("HintPathAbsoluteExists: " + HintPathAbsoluteExists);
            result.AppendLine("IsOutSideProjectPath: " + IsOutSideProjectPath(HintPathAbsolute));

            foreach (var item in Warnings)
            {
                result.AppendLine("Warning: " + item);
            }

            return(result.ToString());
        }
        private void LoadHintPath(VsProject project, ProjectItem projectItem)
        {
            HintPath = projectItem.Metadata.Any(m => m.Name == "HintPath") ? projectItem.Metadata.Single(m => m.Name == "HintPath").EvaluatedValue : null;
            if (HintPath != null)
            {
                var packagesPath = project.RelativeNuGetPackagesPath;
                if (HintPath.StartsWith(packagesPath))
                {
                    var startIndex = packagesPath.Length;
                    var endIndex   = HintPath.IndexOf("\\", startIndex, StringComparison.InvariantCulture);
                    if (endIndex != -1)
                    {
                        IsNuGetReference = true;

                        var isVersionPart       = true;
                        var nuGetPackageVersion = string.Empty;
                        var nuGetPackage        = string.Empty;

                        var segments = HintPath.Substring(startIndex, endIndex - startIndex).Split('.');
                        foreach (var segment in segments.Reverse())
                        {
                            if (isVersionPart)
                            {
                                int number = 0;
                                if (int.TryParse(segment, out number))
                                {
                                    nuGetPackageVersion = segment + "." + nuGetPackageVersion;
                                }
                                else
                                {
                                    nuGetPackage  = segment;
                                    isVersionPart = false;
                                }
                            }
                            else
                            {
                                nuGetPackage = segment + "." + nuGetPackage;
                            }
                        }

                        NuGetPackageName    = nuGetPackage.Trim('.');
                        NuGetPackageVersion = nuGetPackageVersion.Trim('.');
                    }
                }
            }
        }