public void TestBuilder2() { NAssembly assembly = new NAssembly(); assembly.CreateStruct() .Namespace("TestNamespace") .Private.OopName("TestUt2") .OopBody("public static void Test(){}") .PublicStaticField <string>("Name") .PrivateStaticField <int>("_age"); var result = assembly.Check(); Assert.Equal($@"using System;{Environment.NewLine}namespace TestNamespace{Environment.NewLine}{{{Environment.NewLine} private struct TestUt2{Environment.NewLine} {{{Environment.NewLine} public static String Name;{Environment.NewLine} private static Int32 _age;{Environment.NewLine} public static void Test() {{ }}{Environment.NewLine} }}{Environment.NewLine}}}", result[0].Formatter); }
public void RunClassName4() { //ScriptCompiler.Init(); string text = @" namespace HelloWorld {public class Test{public Test(){ Name=""111""; }public string Name; public int Age{get;set;} } }"; //根据脚本创建动态类 var oop = new NAssembly(); oop.AssemblyBuilder.Compiler.Domain = DomainManagement.Random; oop.AddScript(text); Type type = oop.GetTypeFromShortName("Test"); Assert.Equal("Test", type.Name); }
public static void RunClassName4() { //ScriptCompiler.Init(); string text = @" namespace HelloWorld {public class Test{public Test(){ Name=""111""; }public string Name; public int Age{get;set;} } }"; //根据脚本创建动态类 var oop = new NAssembly(); oop.AddScript(text); oop.Compile(); Type type = oop.GetType("HelloWorld.Test"); Assert.Equal("Test", type.Name); }
public void TestBuilder2() { NAssembly assembly = new NAssembly(); assembly.CreateStruct() .Namespace("TestNamespace") .OopAccess(AccessTypes.Private).OopName("TestUt2") .OopBody(@"public static void Test(){}") .PublicStaticField <string>("Name") .PrivateStaticField <int>("_age"); var result = assembly.Check(); Assert.Equal(@"using System; namespace TestNamespace { private struct TestUt2 { public static String Name; private static Int32 _age; public static void Test() { } } }", result[0].Formatter); }
/// <summary> /// Loads from an assembly source definition all types to document. /// </summary> /// <param name="assemblySource">The assembly source definition.</param> /// <param name="memberRegistry">The member registry to populate with types.</param> /// <returns> /// An assembly documentator that contains all documented types, methods. /// </returns> public void LoadFrom(NAssemblySource assemblySource, MemberRegistry memberRegistry) { CurrentMergeGroup = assemblySource.MergeGroup; _source = assemblySource; _registry = memberRegistry; var assemblyDefinition = (AssemblyDefinition)assemblySource.Assembly; var assemblyName = assemblyDefinition.Name.Name; var assemblyId = "A:" + assemblyName; var assembly = (NAssembly)_registry.FindById(assemblyId); // If new assembly if (assembly == null) { assembly = new NAssembly { Name = assemblyName }; assembly.FullName = assembly.Name; assembly.Id = assemblyId; assembly.PageId = PageIdFunction(assembly); assembly.PageTitle = assembly.Name + " " + assembly.Category; assembly.Version = assemblyDefinition.Name.Version.ToString(); assembly.FileName = Path.GetFileName(Utility.GetProperFilePathCapitalization(assemblySource.Filename)); // Apply documentation from AssemblyDoc special class assembly.DocNode = _source.Document.FindMemberDoc("T:" + assembly.Name + "." + AssemblyDocClass); _registry.Register(assembly); } assembly.SetApiGroup(CurrentMergeGroup, true); CurrentAssembly = assembly; Logger.Message("Processing assembly [{0}] [{1}]", assembly.FullName, CurrentMergeGroup); // Process namespaces // Namespaces are created only if a type is actually public foreach (var module in assemblyDefinition.Modules) { foreach (var type in module.Types) { // Todo add configurable filter if (!type.IsPublic) { continue; } // Skip empty namespaces and special <Module> if (string.IsNullOrEmpty(type.Namespace) || type.Namespace.StartsWith("<")) { continue; } // Create naemespace var parentNamespace = AddNamespace(assembly, type.Namespace); parentNamespace.SetApiGroup(CurrentMergeGroup, true); AddType(parentNamespace, type); } } //// Remove empty namespaces //foreach (var removeNamespace in namespaces.Values) //{ // if (removeNamespace.Types.Count == 0) // assembly.Namespaces.Remove(removeNamespace); //} // Sort namespace in alphabetical order //@assembly.Namespaces.Sort((left, right) => left.PageId.CompareTo(right.PageId)); //foreach (var namespaceName in @assembly.Namespaces) // namespaces[namespaceName].Types.Sort((left, right) => left.PageId.CompareTo(right.PageId)); }