Получить имя и значения перечислителя из ReflectionOnlyGetType - недопустимая операция в ReflectionOnlyContext - PullRequest
0 голосов
/ 22 января 2019

Мне нужно иметь возможность перечислять значения перечислителя в отдельной сборке, для которой у меня есть только квалифицированное имя сборки.

Я могу определить квалифицированное имя сборки, но не могурешить

'Запрошенная операция недопустима в контексте 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-файл может содержать полное имя сборки, он должен делать это динамически.

1 Ответ

0 голосов
/ 22 января 2019

Невозможно увидеть лес за деревьями:

string assemblyString = @"ClassLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
string name = @"ClassLibrary.MyEnum";

Type myEnumTypeDynamic = Assembly.Load(assemblyString).GetType(name);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...