【发布时间】:2014-10-13 11:13:57
【问题描述】:
以下代码示例生成 TempAssembly.dll,其中包含一个枚举 Elevation。
public static void Main()
{
AppDomain currentDomain = AppDomain.CurrentDomain;
AssemblyName aName = new AssemblyName("TempAssembly");
AssemblyBuilder ab = currentDomain.DefineDynamicAssembly(aName, AssemblyBuilderAccess.RunAndSave);
ModuleBuilder mb = ab.DefineDynamicModule(aName.Name, aName.Name + ".dll");
EnumBuilder eb = mb.DefineEnum("Elevation", TypeAttributes.Public, typeof(int));
eb.DefineLiteral("Low", 0);
eb.DefineLiteral("High", 1);
Type finished = eb.CreateType();
ab.Save(aName.Name + ".dll");
foreach (object o in Enum.GetValues(finished))
{
Console.WriteLine("{0}.{1} = {2}", finished, o, ((int)o));
}
}
我引用了 TempAssembly.dll 并在另一个项目(比如项目 TestA)中使用了枚举 Elevation。 由于我希望代码符合 CLS,因此我在项目 TestA 中添加了以下属性。
[程序集:System.CLSCompliant(true)]
我收到警告的代码是:
public class TestClass
{
public Elevation Elev { get; set; }
}
警告
警告 1 类型的“TestA.TestClass.Elev”不符合 CLS
我查看了有关如何编写符合 CLS 的代码的文档,但由于枚举是动态创建的,因此我无法做很多事情。任何建议,我怎样才能使枚举 CLS 兼容?
【问题讨论】:
标签: c# enums cls-compliant assemblybuilder