protected override void ExecuteCore() { OutputAppConfigFileWithMetadata = new TaskItem(GeneratedAppConfigFile); if (AppConfigFile != null) { AppConfigFile.CopyMetadataTo(OutputAppConfigFileWithMetadata); } else { OutputAppConfigFileWithMetadata.SetMetadata(MetadataKeys.TargetPath, TargetName); } }
public override bool Execute() { if (SuggestedRedirects == null || SuggestedRedirects.Length == 0) { Log.LogMessageFromResources("GenerateBindingRedirects.NoSuggestedRedirects"); OutputAppConfigFile = null; return(true); } var redirects = ParseSuggestedRedirects(); var doc = LoadAppConfig(AppConfigFile); if (doc == null) { return(false); } XElement runtimeNode = doc.Root .Nodes() .OfType <XElement>() .FirstOrDefault(e => e.Name.LocalName == "runtime"); if (runtimeNode == null) { runtimeNode = new XElement("runtime"); doc.Root.Add(runtimeNode); } else { UpdateExistingBindingRedirects(runtimeNode, redirects); } var ns = XNamespace.Get("urn:schemas-microsoft-com:asm.v1"); var redirectNodes = from redirect in redirects select new XElement( ns + "assemblyBinding", new XElement( ns + "dependentAssembly", new XElement( ns + "assemblyIdentity", new XAttribute("name", redirect.Key.Name), new XAttribute("publicKeyToken", ResolveAssemblyReference.ByteArrayToString(redirect.Key.GetPublicKeyToken())), new XAttribute("culture", String.IsNullOrEmpty(redirect.Key.CultureName) ? "neutral" : redirect.Key.CultureName)), new XElement( ns + "bindingRedirect", new XAttribute("oldVersion", "0.0.0.0-" + redirect.Value), new XAttribute("newVersion", redirect.Value)))); runtimeNode.Add(redirectNodes); var writeOutput = true; if (FileSystems.Default.FileExists(OutputAppConfigFile.ItemSpec)) { try { var outputDoc = LoadAppConfig(OutputAppConfigFile); if (outputDoc.ToString() == doc.ToString()) { writeOutput = false; } } catch (System.Xml.XmlException) { writeOutput = true; } } if (AppConfigFile != null) { AppConfigFile.CopyMetadataTo(OutputAppConfigFile); } else { OutputAppConfigFile.SetMetadata(ItemMetadataNames.targetPath, TargetName); } if (writeOutput) { using (var stream = FileUtilities.OpenWrite(OutputAppConfigFile.ItemSpec, false)) { doc.Save(stream); } } return(!Log.HasLoggedErrors); }