Мне нужно иметь возможность перечислять значения перечислителя в отдельной сборке, для которой у меня есть только квалифицированное имя сборки.
Я могу определить квалифицированное имя сборки, но не могурешить
'Запрошенная операция недопустима в контексте ReflectionOnly.'
, когда я пытаюсь ее перечислить.
Мой основной код в сборке DevExample:
using System;
using ClassLibrary;
namespace DevExample
{
public class Program
{
static void Main(string[] args)
{
Type myEnumType = MyEnum.One.GetType();
WriteToConsole(myEnumType);
Type myEnumType_null = Type.GetType(myEnumType.FullName); // will return null
string assemblyName = myEnumType.AssemblyQualifiedName;
// assemblyName will be "ClassLibrary.MyEnum, ClassLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
Type myEnumTypeFromReflection = Type.ReflectionOnlyGetType(assemblyName, true, false); // Will get type succesfully
WriteToConsole(myEnumTypeFromReflection);
}
private static void WriteToConsole(Type enumType)
{
foreach (int val in Enum.GetValues(enumType))
{
Console.WriteLine("{0} - {0}", Enum.GetName(enumType, val));
}
}
}
}
Then in another assembly (ClassLibrary.dll) I just defined a simple enumerator
namespace ClassLibrary
{
public enum MyEnum
{
Zero = 0,
One = 1,
Two = 2
};
}
При второй записи в консоль я получаю:
Запрошенная операция недопустима в ReflectionOnlycontext.
Мне нужно сделать это, чтобы проверить .xml, который определяет, какие перечислители использует конкретная часть оборудования.
Предыдущий код только что загрузил словарь с именем и типами вручную, но, учитывая, что XML-файл может содержать полное имя сборки, он должен делать это динамически.