Esempio n. 1
0
        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);
        }
Esempio n. 3
0
        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);
        }