GetExportedTypes 显示在程序集外可见的类

GetExportedTypes 显示在程序集外可见的类,反射时候会用到。构建程序集里public的类的实例时候,可以用这个函数得到这些类。
Roslyn(Roslyn 编译器)是一个.NET平台的开源项目,它提供了一种全新的方式来编译、分析和修改.NET源代码。通过Roslyn,你可以动态地创建、编译和操作C#或VB.NET程序集,包括生成新的。 如果你想动态地生成并在.NET中调用其属性,你可以这样做: 1. **创建代码模型**:首先,使用Roslyn API创建一个新的`SyntaxTree`,这是代码的基本结构。然后使用`CompilationUnitBuilder`构建包含新的单元。 ```csharp var namespaceName = "Generated"; var className = "YourClass"; var classDeclaration = SyntaxFactory.ClassDeclaration( SyntaxFactory.Identifier(className)) .AddBaseListTypes(SyntaxFactory.SimpleBaseType(SyntaxFactory.ParseTypeName("YourBaseClass"))) .AddMembers( SyntaxFactory.PropertyDeclaration( SyntaxFactory.ParseTypeName("string"), SyntaxFactory.Identifier("YourProperty"), default_accessor: Accessibility.Private)); ``` 2. **编译代码**:将代码模型转换为`Compilation`实例,并编译成`Assembly`. ```csharp var compilationOptions = new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary); var compilation = CSharpCompilation.Create( name: "DynamicCode", syntaxTrees: new[] { classDeclaration.SyntaxTree }, references: // 添加所需的.NET框架引用, options: compilationOptions); var assembly = compilation.Emit(); ``` 3. **反射调用属性**:现在你可以使用`Assembly`的`GetTypes()`方法获取新生成的型,然后通过反射访问其属性。 ```csharp var generatedType = assembly.GetExportedTypes().Single(t => t.Name == className); var propertyInfo = generatedType.GetProperty("YourProperty"); dynamic instance = Activator.CreateInstance(generatedType); var value = propertyInfo.GetValue(instance); // 调用属性值 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值