XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension.NetCore.XApp

【DLL】XApp开发支持

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFEExtension.NetCore.XApp

添加API文档,诊断信息现可被获取

91f61d0
XFE工作室室长 <mail@xfegzs.com>
提交于

代码差异

5 个文件 +79 -14
Added XFEExtension.NetCore.XApp/CompilateResult.cs +11 -0
@@ -0,0 +1,11 @@
1 using Microsoft.CodeAnalysis;
2 using System.Collections.Immutable;
3
4 namespace XFEExtension.NetCore.XApp;
5 /// <summary>
6 /// XApp编译结果
7 /// </summary>
8 /// <param name="IsCompilateSuccessful">是否编译成功</param>
9 /// <param name="Page">程序主页面</param>
10 /// <param name="Diagnostics">诊断信息</param>
11 public record class CompilateResult(bool IsCompilateSuccessful, Page? Page, ImmutableArray<Diagnostic> Diagnostics) { }
Modified XFEExtension.NetCore.XApp/XAppBuilder.cs +26 -2
@@ -2,24 +2,48 @@
2 2
3 3 namespace XFEExtension.NetCore.XApp;
4 4
5 /// <summary>
6 /// XApp应用构建器
7 /// </summary>
5 8 [CreateImpl]
6 9 public abstract class XAppBuilder
7 10 {
8 11 internal static Page? CurrentXAppMainPage { get; private set; }
12 /// <summary>
13 /// 主页(Page布局)
14 /// </summary>
9 15 public Page? MainPage { get; set; }
16 /// <summary>
17 /// 主页(Shell布局)
18 /// </summary>
10 19 public Shell? MainShell { get; set; }
20 /// <summary>
21 /// 创建构建器
22 /// </summary>
23 /// <returns></returns>
11 24 public static XAppBuilder CreateBuilder() => new XAppBuilderImpl();
25 /// <summary>
26 /// 使用Shell布局
27 /// </summary>
28 /// <param name="mainShell"></param>
29 /// <returns></returns>
12 30 public XAppBuilder WithShellDev(Shell mainShell)
13 31 {
14 32 MainShell = mainShell;
15 33 return this;
16 34 }
17
35 /// <summary>
36 /// 使用Page布局
37 /// </summary>
38 /// <param name="mainPage"></param>
39 /// <returns></returns>
18 40 public XAppBuilder WithPageDev(Page mainPage)
19 41 {
20 42 MainPage = mainPage;
21 43 return this;
22 44 }
23
45 /// <summary>
46 /// 构建并运行
47 /// </summary>
24 48 public void BuildAndRun() => CurrentXAppMainPage = MainPage ?? MainShell;
25 49 }
Modified XFEExtension.NetCore.XApp/XAppExtensions.cs +9 -1
@@ -1,6 +1,14 @@
1 1 namespace XFEExtension.NetCore.XApp.Extensions;
2 2
3 /// <summary>
4 /// XApp拓展
5 /// </summary>
3 6 public static class XAppExtensions
4 7 {
5 public static async Task<Page?> GetMainPage(this Core.XApp xApp) => await XAppLoader.GetMainPage(xApp);
8 /// <summary>
9 /// 获取主页面
10 /// </summary>
11 /// <param name="xApp">XApp应用</param>
12 /// <returns></returns>
13 public static async Task<CompilateResult> GetMainPage(this Core.XApp xApp) => await XAppLoader.GetMainPage(xApp);
6 14 }
Modified XFEExtension.NetCore.XApp/XAppLoader.cs +30 -9
@@ -1,38 +1,58 @@
1 1 using Microsoft.CodeAnalysis;
2 2 using Microsoft.CodeAnalysis.CSharp;
3 using System.Collections.Immutable;
3 4 using System.Diagnostics;
4 5 using System.Reflection;
5 6 using XFEExtension.NetCore.XApp.Core;
6 using XFEExtension.NetCore.XFETransform;
7 7
8 8 namespace XFEExtension.NetCore.XApp;
9 9
10 /// <summary>
11 /// XApp加载器
12 /// </summary>
10 13 public static class XAppLoader
11 14 {
12 public static async Task<Page?> GetMainPage(Core.XApp xApp)
15 /// <summary>
16 /// 编译并获取主页面
17 /// </summary>
18 /// <param name="xApp">XApp对象</param>
19 /// <returns>编译结果信息</returns>
20 public static async Task<CompilateResult> GetMainPage(Core.XApp xApp)
13 21 {
14 var mainMethod = LoadAssemblyFromXApp(xApp)?.EntryPoint;
22 var mainMethod = LoadAssemblyFromXApp(xApp, out var diagnostic)?.EntryPoint;
15 23 if (mainMethod is not null)
16 24 {
17 25 if (mainMethod?.ReturnType == typeof(Task))
18 26 await (Task)mainMethod.Invoke(null, [Array.Empty<string>()])!;
19 27 else
20 28 mainMethod?.Invoke(null, [Array.Empty<string>()]);
21 return XAppBuilder.CurrentXAppMainPage;
29 var pageIsNotNull = XAppBuilder.CurrentXAppMainPage is not null;
30 return new CompilateResult(pageIsNotNull, XAppBuilder.CurrentXAppMainPage, diagnostic);
22 31 }
23 32 else
24 33 {
25 return null;
34 return new CompilateResult(false, null, diagnostic);
26 35 }
27 36 }
28
29 public static Assembly? LoadAssemblyFromXApp(Core.XApp xApp) => CompilateCode(xApp.AppFiles.CodeFiles);
30 public static Assembly? CompilateCode(params XAppCode[] xAppCodes)
37 /// <summary>
38 /// 从XApp对象中加载程序集
39 /// </summary>
40 /// <param name="xApp">XApp对象</param>
41 /// <param name="diagnostic">诊断信息</param>
42 /// <returns></returns>
43 public static Assembly? LoadAssemblyFromXApp(Core.XApp xApp, out ImmutableArray<Diagnostic> diagnostic) => CompilateCode(out diagnostic, xApp.AppFiles.CodeFiles);
44 /// <summary>
45 /// 编译代码
46 /// </summary>
47 /// <param name="diagnostics">诊断信息</param>
48 /// <param name="xAppCodes">XApp的代码文件</param>
49 /// <returns></returns>
50 public static Assembly? CompilateCode(out ImmutableArray<Diagnostic> diagnostics, params XAppCode[] xAppCodes)
31 51 {
32 52 var syntaxTrees = new List<SyntaxTree>();
33 53 foreach (var xAppCode in xAppCodes)
34 54 {
35 if (xAppCode.FileType == XAppFileType.XFML)
55 if (xAppCode.FileType == XAppFileType.XFML || xAppCode.FileType == XAppFileType.Resource || xAppCode.FileType == XAppFileType.Image)
36 56 continue;
37 57 var fileName = Path.GetFileNameWithoutExtension(xAppCode.FileName);
38 58 var split = fileName.Split('.');
@@ -95,6 +115,7 @@ public static class XAppLoader
95 115 else
96 116 Trace.WriteLine(diagnostic.ToString());
97 117 }
118 diagnostics = result.Diagnostics;
98 119 if (result.Success)
99 120 {
100 121 assemblyBytes = stream.ToArray();
Modified XFEExtension.NetCore.XApp/XFEExtension.NetCore.XApp.csproj +3 -2
@@ -15,9 +15,10 @@
15 15 <PackageIcon>logoIcon.png</PackageIcon>
16 16 <RepositoryUrl>https://github.com/XFEstudio/XFEExtension.NetCore.XApp</RepositoryUrl>
17 17 <PackageTags>XApp;XFE</PackageTags>
18 <PackageReleaseNotes>优化程序解包结构</PackageReleaseNotes>
18 <PackageReleaseNotes>添加API文档,诊断信息现可被获取</PackageReleaseNotes>
19 19 <PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
20 <Version>1.0.3</Version>
20 <Version>1.1.0</Version>
21 <GenerateDocumentationFile>True</GenerateDocumentationFile>
21 22 </PropertyGroup>
22 23
23 24 <ItemGroup>