Следующий код создает сборку с именем MyAssembly.dll, которая содержит один интерфейс с именем IMyType.IMyType имеет единственное свойство, которое называется my property.
string assemblyName = "MyAssembly";
AssemblyBuilder assemblyBuilder =
AppDomain.CurrentDomain.DefineDynamicAssembly(
new AssemblyName(assemblyName),
AssemblyBuilderAccess.RunAndSave
);
ModuleBuilder moduleBuilder =
assemblyBuilder.DefineDynamicModule(
assemblyName,
$"{assemblyName}.dll",
true
);
TypeBuilder typeBuilder =
moduleBuilder.DefineType(
$"{assemblyName}.IMyType",
TypeAttributes.Public |
TypeAttributes.Interface |
TypeAttributes.Abstract
);
PropertyBuilder propertyBuilder =
typeBuilder.DefineProperty(
"MyProperty",
System.Reflection.PropertyAttributes.HasDefault |
System.Reflection.PropertyAttributes.SpecialName,
typeof(int),
null
);
MethodBuilder getBuilder =
typeBuilder.DefineMethod(
"get_MyProperty",
MethodAttributes.Virtual |
MethodAttributes.Abstract |
MethodAttributes.SpecialName,
typeof(int),
Type.EmptyTypes
);
MethodBuilder setBuilder =
typeBuilder.DefineMethod(
"set_MyProperty",
MethodAttributes.Virtual |
MethodAttributes.Abstract |
MethodAttributes.SpecialName,
typeof(int),
Type.EmptyTypes
);
propertyBuilder.SetGetMethod(getBuilder);
propertyBuilder.SetSetMethod(setBuilder);
typeBuilder.CreateType();
assemblyBuilder.Save($"{assemblyName}.dll");
Когда я декомпилирую сборку в DotPeek, я вижу код, который я ожидаю увидеть:
Однако в другом проекте, который ссылается на эту сборку, я создаю класс, который реализует мой новый IMyType, а Visual Studio создает это:
Что мне нужно для этого сделатьчто визуальная студия увидит это как свойство auto вместо двух методов?