зеркало из https://github.com/DeGsoft/maui-linux.git
97 строки
2.6 KiB
C#
97 строки
2.6 KiB
C#
using System.CodeDom;
|
|
using System.CodeDom.Compiler;
|
|
using System.IO;
|
|
|
|
using Microsoft.Build.Framework;
|
|
using Microsoft.Build.Utilities;
|
|
using Microsoft.CSharp;
|
|
|
|
using Xamarin.Forms.Xaml;
|
|
|
|
namespace Xamarin.Forms.Build.Tasks
|
|
{
|
|
class CssGenerator
|
|
{
|
|
internal CssGenerator()
|
|
{
|
|
}
|
|
|
|
public CssGenerator(
|
|
ITaskItem taskItem,
|
|
string language,
|
|
string assemblyName,
|
|
string outputFile,
|
|
TaskLoggingHelper logger)
|
|
: this(
|
|
taskItem.ItemSpec,
|
|
language,
|
|
taskItem.GetMetadata("ManifestResourceName"),
|
|
taskItem.GetMetadata("TargetPath"),
|
|
assemblyName,
|
|
outputFile,
|
|
logger)
|
|
{
|
|
}
|
|
|
|
internal static CodeDomProvider Provider = new CSharpCodeProvider();
|
|
|
|
public string CssFile { get; }
|
|
public string Language { get; }
|
|
public string ResourceId { get; }
|
|
public string TargetPath { get; }
|
|
public string AssemblyName { get; }
|
|
public string OutputFile { get; }
|
|
public TaskLoggingHelper Logger { get; }
|
|
|
|
public CssGenerator(
|
|
string cssFile,
|
|
string language,
|
|
string resourceId,
|
|
string targetPath,
|
|
string assemblyName,
|
|
string outputFile,
|
|
TaskLoggingHelper logger = null)
|
|
{
|
|
CssFile = cssFile;
|
|
Language = language;
|
|
ResourceId = resourceId;
|
|
TargetPath = targetPath;
|
|
AssemblyName = assemblyName;
|
|
OutputFile = outputFile;
|
|
Logger = logger;
|
|
}
|
|
|
|
//returns true if a file is generated
|
|
public bool Execute()
|
|
{
|
|
Logger?.LogMessage(MessageImportance.Low, "Source: {0}", CssFile);
|
|
Logger?.LogMessage(MessageImportance.Low, " Language: {0}", Language);
|
|
Logger?.LogMessage(MessageImportance.Low, " ResourceID: {0}", ResourceId);
|
|
Logger?.LogMessage(MessageImportance.Low, " TargetPath: {0}", TargetPath);
|
|
Logger?.LogMessage(MessageImportance.Low, " AssemblyName: {0}", AssemblyName);
|
|
Logger?.LogMessage(MessageImportance.Low, " OutputFile {0}", OutputFile);
|
|
|
|
GenerateCode();
|
|
|
|
return true;
|
|
}
|
|
|
|
void GenerateCode()
|
|
{
|
|
//Create the target directory if required
|
|
Directory.CreateDirectory(Path.GetDirectoryName(OutputFile));
|
|
|
|
var ccu = new CodeCompileUnit();
|
|
ccu.AssemblyCustomAttributes.Add(
|
|
new CodeAttributeDeclaration(new CodeTypeReference($"global::{typeof(XamlResourceIdAttribute).FullName}"),
|
|
new CodeAttributeArgument(new CodePrimitiveExpression(ResourceId)),
|
|
new CodeAttributeArgument(new CodePrimitiveExpression(TargetPath.Replace('\\', '/'))),
|
|
new CodeAttributeArgument(new CodePrimitiveExpression(null))
|
|
));
|
|
|
|
//write the result
|
|
using (var writer = new StreamWriter(OutputFile))
|
|
Provider.GenerateCodeFromCompileUnit(ccu, writer, new CodeGeneratorOptions());
|
|
}
|
|
}
|
|
} |