当我看到 PostSharp 将一个切面代码注入到程序集中(这个表达式是对的吗?)时,
我看到了这个带有CompilerGeneratedAttribute
.
它被命名为<>AspectsImplementationDetails_1
。
据我所知,类名不能以<>
.
但是 PostSharp 怎么可能创建这样的类呢?
是<>
某种未知/内部运营商吗?
[更新]
我做了一些测试,看起来我能够生成具有有趣名称的类型。
这是使用的示例代码
using System;
using System.Reflection;
using System.Reflection.Emit;
namespace ReflectionDemo
{
class Program
{
public static void Main(string[] args)
{
var typeNames = new[]
{
"<>", "-", "+", "~", "!", "@", "#", "$", "%", "^", "&",
"*", "(", ")", "="
};
const string assemblyName = "Test";
foreach (var typeName in typeNames)
{
PrintTypeName(
BuildType(assemblyName, typeName).CreateType());
}
}
private static void PrintTypeName(Type type)
{
Console.WriteLine("TypeName = '{0}'", type.FullName);
}
private static TypeBuilder BuildType(
string assemblyName, string typeName)
{
var name = new AssemblyName(assemblyName);
var assemblyBuilder =
AppDomain.CurrentDomain.DefineDynamicAssembly(
name, AssemblyBuilderAccess.Run);
var moduleBuilder =
assemblyBuilder.DefineDynamicModule(name.Name, false);
return moduleBuilder.DefineType(
typeName, TypeAttributes.Public);
}
}
}