2 using System.CodeDom.Compiler;
5 using Microsoft.Build.Framework;
6 using Microsoft.Build.Utilities;
7 using Microsoft.CSharp;
11 namespace Tizen.NUI.Xaml.Build.Tasks
15 internal CssGenerator()
24 TaskLoggingHelper logger)
28 taskItem.GetMetadata("ManifestResourceName"),
29 taskItem.GetMetadata("TargetPath"),
36 internal static CodeDomProvider Provider = new CSharpCodeProvider();
38 public string CssFile { get; }
39 public string Language { get; }
40 public string ResourceId { get; }
41 public string TargetPath { get; }
42 public string AssemblyName { get; }
43 public string OutputFile { get; }
44 public TaskLoggingHelper Logger { get; }
53 TaskLoggingHelper logger = null)
57 ResourceId = resourceId;
58 TargetPath = targetPath;
59 AssemblyName = assemblyName;
60 OutputFile = outputFile;
64 //returns true if a file is generated
67 Logger?.LogMessage(MessageImportance.Low, "Source: {0}", CssFile);
68 Logger?.LogMessage(MessageImportance.Low, " Language: {0}", Language);
69 Logger?.LogMessage(MessageImportance.Low, " ResourceID: {0}", ResourceId);
70 Logger?.LogMessage(MessageImportance.Low, " TargetPath: {0}", TargetPath);
71 Logger?.LogMessage(MessageImportance.Low, " AssemblyName: {0}", AssemblyName);
72 Logger?.LogMessage(MessageImportance.Low, " OutputFile {0}", OutputFile);
81 //Create the target directory if required
82 Directory.CreateDirectory(System.IO.Path.GetDirectoryName(OutputFile));
84 var ccu = new CodeCompileUnit();
85 ccu.AssemblyCustomAttributes.Add(
86 new CodeAttributeDeclaration(new CodeTypeReference($"global::{typeof(XamlResourceIdAttribute).FullName}"),
87 new CodeAttributeArgument(new CodePrimitiveExpression(ResourceId)),
88 new CodeAttributeArgument(new CodePrimitiveExpression(TargetPath.Replace('\\', '/'))),
89 new CodeAttributeArgument(new CodePrimitiveExpression(null))
93 using (var writer = new StreamWriter(OutputFile))
94 Provider.GenerateCodeFromCompileUnit(ccu, writer, new CodeGeneratorOptions());