Exemplo n.º 1
0
        private static int ModifyPackagePaths(MsBuild.Project project, IReadOnlyCollection <IVsPackageMetadata> packages, string slnDir, ModifyPackagePathDelegate modifyPackagePath)
        {
            const string pathAttributeName = "HintPath";
            var          projectDirPath    = project.DirectoryPath;
            var          result            = 0;

            foreach (var reference in project.GetItems("Reference").Where(r => r.HasMetadata(pathAttributeName)))
            {
                var metadata = reference.GetMetadata(pathAttributeName);
                var newPath  = modifyPackagePath(metadata.EvaluatedValue, metadata.UnevaluatedValue, packages, slnDir, projectDirPath);
                result += SetIfNew("reference", x => metadata.UnevaluatedValue = x, newPath, metadata.UnevaluatedValue);
            }

            foreach (var import in project.Imports)
            {
                var unevaluatedOldPath = import.ImportingElement.Project;
                var evaluatedOldPath   = import.ImportedProject.FullPath;

                var newPath = modifyPackagePath(evaluatedOldPath, unevaluatedOldPath, packages, slnDir, projectDirPath);
                result += SetIfNew("import path", x => import.ImportingElement.Project = x, newPath, unevaluatedOldPath);

                var oldCondition = import.ImportingElement.Condition;
                var newCondition = GetNewImportCondition(oldCondition, evaluatedOldPath, unevaluatedOldPath, packages, slnDir, projectDirPath, modifyPackagePath);
                result += SetIfNew("import condition", x => import.ImportingElement.Condition = x, newCondition, oldCondition);
            }

            var errors = project.Xml.Targets
                         .Where(x => x.Name == "EnsureNuGetPackageBuildImports")
                         .SelectMany(t => t.Children)
                         .OfType <ProjectTaskElement>()
                         .Where(x => x.Name == "Error");

            foreach (var error in errors)
            {
                var oldCondition = error.Condition;
                var newCondition = GetNewErrorCondition(oldCondition, packages, slnDir, projectDirPath, modifyPackagePath, project);
                result += SetIfNew("error condition", x => error.Condition = x, newCondition, oldCondition);

                var oldText = error.GetParameter("Text");
                var newText = GetNewErrorText(oldText, packages, slnDir, projectDirPath, modifyPackagePath, project);
                result += SetIfNew("error text", x => error.SetParameter("Text", x), newText, oldText);
            }
            return(result);
        }
Exemplo n.º 2
0
 private static string GetNewErrorCondition(string oldCondition, IEnumerable <IVsPackageMetadata> packages, string slnDir, string projectDirPath, ModifyPackagePathDelegate modifyPackagePath, MsBuild.Project project)
 {
     return(Regex.Replace
                (oldCondition
                , @"(?<=^!Exists\(').*(?='\)$)"
                , m => modifyPackagePath(MsBuildHelper.Evaluate(m.Value, project), m.Value, packages, slnDir, projectDirPath) ?? m.Value
                ));
 }
Exemplo n.º 3
0
 private static string GetNewImportCondition(string oldCondition, string evaluatedOldPath, string unevaluatedOldPath, IEnumerable <IVsPackageMetadata> packages, string slnDir, string projectDirPath, ModifyPackagePathDelegate modifyPackagePath)
 {
     return(Regex.Replace
                (oldCondition
                , $@"(?<=^Exists\('){Regex.Escape(unevaluatedOldPath)}(?='\)$)"
                , m => modifyPackagePath(evaluatedOldPath, m.Value, packages, slnDir, projectDirPath) ?? m.Value
                ));
 }
Exemplo n.º 4
0
 private static string GetNewErrorText(string oldText, IEnumerable <IVsPackageMetadata> packages, string slnDir, string projectDirPath, ModifyPackagePathDelegate modifyPackagePath, MsBuild.Project project)
 {
     return(Regex.Replace
                (oldText
                , @"(?<=^\$\(\[System\.String\]::Format\('\$\(ErrorText\)', ').*(?='\)\)$)"
                , m => modifyPackagePath(MsBuildHelper.Evaluate(m.Value, project), m.Value, packages, slnDir, projectDirPath) ?? m.Value
                ));
 }