Quellcode durchsuchen

Merge pull request #3151 from donandren/issues/xamlilpathgeneration

Fix avares name/path generation on macos
danwalmsley vor 5 Jahren
Ursprung
Commit
9168af04c7

+ 4 - 1
packages/Avalonia/AvaloniaBuildTasks.targets

@@ -2,6 +2,7 @@
   <PropertyGroup>
     <_AvaloniaUseExternalMSBuild>$(AvaloniaUseExternalMSBuild)</_AvaloniaUseExternalMSBuild>
     <_AvaloniaUseExternalMSBuild Condition="'$(_AvaloniaForceInternalMSBuild)' == 'true'">false</_AvaloniaUseExternalMSBuild>
+    <AvaloniaXamlReportImportance Condition="'$(AvaloniaXamlReportImportance)' == ''">low</AvaloniaXamlReportImportance>
   </PropertyGroup>
   
   <UsingTask TaskName="GenerateAvaloniaResourcesTask"
@@ -38,7 +39,8 @@
       Output="$(AvaloniaResourcesTemporaryFilePath)"
       Root="$(MSBuildProjectDirectory)"
       Resources="@(AvaloniaResource)"
-      EmbeddedResources="@(EmbeddedResources)"/>
+      EmbeddedResources="@(EmbeddedResources)"
+      ReportImportance="$(AvaloniaXamlReportImportance)"/>
     <Exec 
       Condition="'$(_AvaloniaUseExternalMSBuild)' == 'true'"
       Command="dotnet msbuild /nodereuse:false $(MSBuildProjectFile) /t:GenerateAvaloniaResources /p:_AvaloniaForceInternalMSBuild=true /p:Configuration=$(Configuration) /p:TargetFramework=$(TargetFramework) /p:BuildProjectReferences=false"/>
@@ -67,6 +69,7 @@
       OriginalCopyPath="$(AvaloniaXamlOriginalCopyFilePath)"
       ProjectDirectory="$(MSBuildProjectDirectory)"
       VerifyIl="$(AvaloniaXamlIlVerifyIl)"
+      ReportImportance="$(AvaloniaXamlReportImportance)"
     />
     <Exec
       Condition="'$(_AvaloniaUseExternalMSBuild)' == 'true'"

+ 9 - 2
src/Avalonia.Build.Tasks/CompileAvaloniaXamlTask.cs

@@ -12,6 +12,8 @@ namespace Avalonia.Build.Tasks
     {
         public bool Execute()
         {
+            Enum.TryParse(ReportImportance, true, out MessageImportance outputImportance);
+
             OutputPath = OutputPath ?? AssemblyFile;
             var outputPdb = GetPdbPath(OutputPath);
             var input = AssemblyFile;
@@ -32,9 +34,12 @@ namespace Avalonia.Build.Tasks
                 }
             }
 
+            var msg = $"CompileAvaloniaXamlTask -> AssemblyFile:{AssemblyFile}, ProjectDirectory:{ProjectDirectory}, OutputPath:{OutputPath}";
+            BuildEngine.LogMessage(msg, outputImportance < MessageImportance.Low ? MessageImportance.High : outputImportance);
+
             var res = XamlCompilerTaskExecutor.Compile(BuildEngine, input,
                 File.ReadAllLines(ReferencesFilePath).Where(l => !string.IsNullOrWhiteSpace(l)).ToArray(),
-                ProjectDirectory, OutputPath, VerifyIl);
+                ProjectDirectory, OutputPath, VerifyIl, outputImportance);
             if (!res.Success)
                 return false;
             if (!res.WrittenFile)
@@ -68,7 +73,9 @@ namespace Avalonia.Build.Tasks
         public string OutputPath { get; set; }
 
         public bool VerifyIl { get; set; }
-        
+
+        public string ReportImportance { get; set; }
+
         public IBuildEngine BuildEngine { get; set; }
         public ITaskHost HostObject { get; set; }
     }

+ 7 - 2
src/Avalonia.Build.Tasks/Extensions.cs

@@ -9,14 +9,19 @@ namespace Avalonia.Build.Tasks
 
         public static void LogError(this IBuildEngine engine, BuildEngineErrorCode code, string file, string message)
         {
-            engine.LogErrorEvent(new BuildErrorEventArgs("Avalonia", FormatErrorCode(code), file ?? "", 0, 0, 0, 0, message, 
+            engine.LogErrorEvent(new BuildErrorEventArgs("Avalonia", FormatErrorCode(code), file ?? "", 0, 0, 0, 0, message,
                 "", "Avalonia"));
         }
-        
+
         public static void LogWarning(this IBuildEngine engine, BuildEngineErrorCode code, string file, string message)
         {
             engine.LogWarningEvent(new BuildWarningEventArgs("Avalonia", FormatErrorCode(code), file ?? "", 0, 0, 0, 0, message,
                 "", "Avalonia"));
         }
+
+        public static void LogMessage(this IBuildEngine engine, string message, MessageImportance imp)
+        {
+            engine.LogMessageEvent(new BuildMessageEventArgs(message, "", "Avalonia", imp));
+        }
     }
 }

+ 21 - 10
src/Avalonia.Build.Tasks/GenerateAvaloniaResourcesTask.cs

@@ -22,6 +22,10 @@ namespace Avalonia.Build.Tasks
         [Required]
         public ITaskItem[] EmbeddedResources { get; set; }
 
+        public string ReportImportance { get; set; }
+
+        private MessageImportance _reportImportance;
+
         class Source
         {
             public string Path { get; set; }
@@ -29,15 +33,11 @@ namespace Avalonia.Build.Tasks
             private byte[] _data;
             private string _sourcePath;
 
-            public Source(string file, string root)
+            public Source(string relativePath, string root)
             {
-                file = SPath.GetFullPath(file);
                 root = SPath.GetFullPath(root);
-                var fileUri = new Uri(file, UriKind.Absolute);
-                var rootUri = new Uri(root, UriKind.Absolute);
-                rootUri = new Uri(rootUri.ToString().TrimEnd('/') + '/');
-                Path = '/' + rootUri.MakeRelativeUri(fileUri).ToString().TrimStart('/');
-                _sourcePath = file;
+                Path = "/" + relativePath.Replace('\\', '/');
+                _sourcePath = SPath.Combine(root, relativePath);
                 Size = (int)new FileInfo(_sourcePath).Length;
             }
 
@@ -65,7 +65,14 @@ namespace Avalonia.Build.Tasks
             }
         }
 
-        List<Source> BuildResourceSources() => Resources.Select(r => new Source(r.ItemSpec, Root)).ToList();
+        List<Source> BuildResourceSources()
+           => Resources.Select(r =>
+           {
+              
+               var src = new Source(r.ItemSpec, Root);
+               BuildEngine.LogMessage($"avares -> name:{src.Path}, path: {src.SystemPath}, size:{src.Size}, ItemSpec:{r.ItemSpec}", _reportImportance);
+               return src;
+           }).ToList();
 
         private void Pack(Stream output, List<Source> sources)
         {
@@ -136,10 +143,14 @@ namespace Avalonia.Build.Tasks
             sources.Add(new Source("/!AvaloniaResourceXamlInfo", ms.ToArray()));
             return true;
         }
-        
+
         public bool Execute()
         {
-            foreach(var r in EmbeddedResources.Where(r=>r.ItemSpec.EndsWith(".xaml")||r.ItemSpec.EndsWith(".paml")))
+            Enum.TryParse<MessageImportance>(ReportImportance, out _reportImportance);
+
+            BuildEngine.LogMessage($"GenerateAvaloniaResourcesTask -> Root: {Root}, {Resources?.Count()} resources, Output:{Output}", _reportImportance < MessageImportance.Low ? MessageImportance.High : _reportImportance);
+
+            foreach (var r in EmbeddedResources.Where(r => r.ItemSpec.EndsWith(".xaml") || r.ItemSpec.EndsWith(".paml")))
                 BuildEngine.LogWarning(BuildEngineErrorCode.LegacyResmScheme, r.ItemSpec,
                     "XAML file is packed using legacy EmbeddedResource/resm scheme, relative URIs won't work");
             var resources = BuildResourceSources();

+ 3 - 1
src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs

@@ -40,7 +40,7 @@ namespace Avalonia.Build.Tasks
         }
         
         public static CompileResult Compile(IBuildEngine engine, string input, string[] references, string projectDirectory,
-            string output, bool verifyIl)
+            string output, bool verifyIl, MessageImportance logImportance)
         {
             var typeSystem = new CecilTypeSystem(references.Concat(new[] {input}), input);
             var asm = typeSystem.TargetAssemblyDefinition;
@@ -121,6 +121,8 @@ namespace Avalonia.Build.Tasks
                 {
                     try
                     {
+                        engine.LogMessage($"XAMLIL: {res.Name} -> {res.Uri}", logImportance);
+
                         // StreamReader is needed here to handle BOM
                         var xaml = new StreamReader(new MemoryStream(res.FileContents)).ReadToEnd();
                         var parsed = XDocumentXamlIlParser.Parse(xaml);