public override bool Execute() { bool success = true; Log.LogMessage(MessageImportance.Normal, "Generating code behind for XAML files"); //NOTE: should not happen due to [Required], but there appears to be a place this is class is called directly if (XamlFiles == null || OutputFiles == null) { Log.LogMessage("Skipping XamlG"); return(true); } if (XamlFiles.Length != OutputFiles.Length) { Log.LogError("\"{2}\" refers to {0} item(s), and \"{3}\" refers to {1} item(s). They must have the same number of items.", XamlFiles.Length, OutputFiles.Length, "XamlFiles", "OutputFiles"); return(false); } for (int i = 0; i < XamlFiles.Length; i++) { var xamlFile = XamlFiles[i]; var outputFile = OutputFiles[i].ItemSpec; if (IOPath.DirectorySeparatorChar == '/' && outputFile.Contains(@"\")) { outputFile = outputFile.Replace('\\', '/'); } else if (IOPath.DirectorySeparatorChar == '\\' && outputFile.Contains(@"/")) { outputFile = outputFile.Replace('/', '\\'); } var generator = new XamlGenerator(xamlFile, Language, AssemblyName, outputFile, References, Log); try { if (!generator.Execute()) { //If Execute() fails, the file still needs to exist because it is added to the <Compile/> ItemGroup File.WriteAllText(outputFile, string.Empty); } } catch (XmlException xe) { Log.LogError(null, null, null, xamlFile.ItemSpec, xe.LineNumber, xe.LinePosition, 0, 0, xe.Message, xe.HelpLink, xe.Source); Log.LogMessage(MessageImportance.Low, xe.StackTrace); success = false; } catch (Exception e) { Log.LogError(null, null, null, xamlFile.ItemSpec, 0, 0, 0, 0, e.Message, e.HelpLink, e.Source); Log.LogMessage(MessageImportance.Low, e.StackTrace); success = false; } } return(success); }
public override bool Execute() { bool success = true; Log.LogMessage(MessageImportance.Normal, "Generating code behind for XAML files"); if (XamlFiles == null) { Log.LogMessage("Skipping XamlG"); return(true); } foreach (var xamlFile in XamlFiles) { //when invoked from `UpdateDesigntimeXaml` target, the `TargetPath` isn't set, use a random one instead var targetPath = xamlFile.GetMetadata("TargetPath"); if (string.IsNullOrWhiteSpace(targetPath)) { targetPath = $".{Path.GetRandomFileName()}"; } var outputFile = Path.Combine(OutputPath, $"{targetPath}.g.cs"); if (Path.DirectorySeparatorChar == '/' && outputFile.Contains(@"\")) { outputFile = outputFile.Replace('\\', '/'); } else if (Path.DirectorySeparatorChar == '\\' && outputFile.Contains(@"/")) { outputFile = outputFile.Replace('/', '\\'); } var generator = new XamlGenerator(xamlFile, Language, AssemblyName, outputFile, Log); try { if (generator.Execute()) { _generatedCodeFiles.Add(new TaskItem(Microsoft.Build.Evaluation.ProjectCollection.Escape(outputFile))); } } catch (XmlException xe) { Log.LogError(null, null, null, xamlFile.ItemSpec, xe.LineNumber, xe.LinePosition, 0, 0, xe.Message, xe.HelpLink, xe.Source); success = false; } catch (Exception e) { Log.LogError(null, null, null, xamlFile.ItemSpec, 0, 0, 0, 0, e.Message, e.HelpLink, e.Source); success = false; } } return(success); }
public override bool Execute() { bool success = true; if (XamlFiles == null) { Log.LogMessage("Skipping XamlG"); return(true); } foreach (var xamlFile in XamlFiles) { var outputFile = Path.Combine(OutputPath, $"{xamlFile.GetMetadata("TargetPath")}.g.cs"); if (Path.DirectorySeparatorChar == '/' && outputFile.Contains(@"\")) { outputFile = outputFile.Replace('\\', '/'); } else if (Path.DirectorySeparatorChar == '\\' && outputFile.Contains(@"/")) { outputFile = outputFile.Replace('/', '\\'); } var generator = new XamlGenerator(xamlFile, Language, AssemblyName, outputFile, Log); try { if (generator.Execute()) { _generatedCodeFiles.Add(new TaskItem(Microsoft.Build.Evaluation.ProjectCollection.Escape(outputFile))); } } catch (XmlException xe) { Log.LogError(null, null, null, xamlFile.ItemSpec, xe.LineNumber, xe.LinePosition, 0, 0, xe.Message, xe.HelpLink, xe.Source); success = false; } catch (Exception e) { Log.LogError(null, null, null, xamlFile.ItemSpec, 0, 0, 0, 0, e.Message, e.HelpLink, e.Source); success = false; } } return(success); }