Exemplo n.º 1
0
 public XslFile(XslFilename filename)
     : base(filename)
 {
     _lastModified = DateTime.MinValue;
 }
Exemplo n.º 2
0
        public override bool Execute()
        {
            string[] templates = ApplySecondaryValue(Transform, "Transform", Sources);
            string[] outputs   = ApplySecondaryValue(Outputs, "Output", Sources);

            if (Sources.Length == 0)
            {
                return(true);
            }

            for (int i = 0; i < Sources.Length; i++)
            {
                XslFilename name = new XslFilename(templates[i], _debug);
                XslFile     xsl;
                lock (_files)
                {
                    if (!_files.TryGetValue(name, out xsl))
                    {
                        xsl          = new XslFile(name);
                        _files[name] = xsl;
                    }
                }

                try
                {
                    xsl.EnsureCompiled();
                }
                catch (System.Xml.Xsl.XsltException xc)
                {
                    Log.LogError(null, null, null, xc.SourceUri, xc.LineNumber, xc.LinePosition, xc.LineNumber, xc.LinePosition, xc.Message);
                    Log.LogError(null, null, null, xc.SourceUri, xc.LineNumber, xc.LinePosition, xc.LineNumber, xc.LinePosition, xc.ToString());
                    return(false);
                }

                string   srcFile = Sources[i].ItemSpec;
                FileInfo fOut    = new FileInfo(outputs[i]);

                XsltArgumentList al = new XsltArgumentList();
                al.AddExtensionObject("http://schemas.qqn.nl/2008/02/ApplyXslTransform", new ApplyHelper(srcFile, this));                 // Allows calling back into MSBuild
                al.AddParam("Src", "", srcFile);
                al.AddParam("SrcFilename", "", Path.GetFileName(srcFile));
                al.AddParam("SrcFileTitle", "", Path.GetFileNameWithoutExtension(srcFile));
                al.AddParam("SrcDir", "", Path.GetDirectoryName(Path.GetFullPath(srcFile)));
                al.AddParam("Dest", "", outputs[i]);
                al.AddParam("DestFilename", "", Path.GetFileName(outputs[i]));
                al.AddParam("DestFileTitle", "", Path.GetFileNameWithoutExtension(outputs[i]));
                al.AddParam("DestDir", "", Path.GetDirectoryName(Path.GetFullPath(outputs[i])));
                al.AddParam("BaseDir", "", Environment.CurrentDirectory);
                al.AddParam("ProjectFile", "", BuildEngine.ProjectFileOfTaskNode);
                al.AddParam("TargetDir", "", TargetDir);
                al.AddParam("IntermediateDir", "", IntermediateDir);

                foreach (string iAttr in Attributes.Split(';'))
                {
                    if (string.IsNullOrEmpty(iAttr.Trim()))
                    {
                        continue;
                    }

                    string[] q = iAttr.Split('=');
                    al.AddParam(q[0].Trim(), "", q[1].Trim());
                }

                Log.LogMessage(MessageImportance.High, "Transforming '{0}' into '{1}' using '{2}'", Sources[i].ItemSpec, outputs[i], Path.GetFileName(xsl.Filename));

                try
                {
                    using (Stream wtr = File.Create(outputs[i]))
                    {
                        xsl.Transform.Transform(srcFile, al, wtr);
                    }
                }
                catch (XsltException xe)
                {
                    Log.LogError(null, null, null, xe.SourceUri, xe.LineNumber, xe.LinePosition, xe.LineNumber, xe.LinePosition, xe.Message);
                    Log.LogError(null, null, null, xe.SourceUri, xe.LineNumber, xe.LinePosition, xe.LineNumber, xe.LinePosition, xe.ToString());
                    try
                    {
                        File.Delete(outputs[i]);
                    }
                    catch
                    { }
                }
                catch (Exception)
                {
                    try
                    {
                        File.Delete(outputs[i]);
                    }
                    catch
                    { }
                    throw;
                }

                _filesWritten.Add(new TaskItem(outputs[i]));
            }

            return(true);
        }