Использование Reflection EWS API C # - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь использовать EWS API в скриптовой задаче SSIS, но у сервера нет соответствующей dll: Microsoft.Exchange.WebServices.dll

Итак, отражение - единственное решение, которое я нашел, файл dll находится на сервере, и я могу его использовать.

Мне нужно создать экземпляр подкласса абстрактного класса, но компилятор выдает следующее сообщение об ошибке: Не найден конструктор Microsoft.Exchange.WebServices.Data.SearchFilter + IsEqualTo

Я попытался использовать Microsoft.Exchange.WebServices.Data.SearchFilter + IsEqualTo, Microsoft.Exchange.WebServices.Data.SearchFilter.IsEqualTo и получить вложенный тип SearchFilter, но ни один из них не работает

   Type typeSearchFilter = DLL2.GetType("Microsoft.Exchange.WebServices.Data.SearchFilter");


    var typeSearchFilterIsEqualTo = typeSearchFilter.GetNestedType("IsEqualTo");

    Type typeSearchFilterIsEqualTo0 = DLL2.GetType("Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo");

    Type typeSearchFilterIsEqualTo1 = DLL2.GetType("Microsoft.Exchange.WebServices.Data.SearchFilter.IsEqualTo");

    dynamic searcherFilter = Activator.CreateInstance(typeSearchFilterIsEqualTo, new object[] { folderSchemaDisplayName, folder})

Я ожидал создать новый экземпляр SearchFilter.IsEqualTo и передать параметры конструктору и сохранить результат в переменной, например,

          dynamic searcherFilter = Activator.CreateInstance(typeSearchFilterIsEqualTo, new object[] { folderSchemaDisplayName, folder});

            var filter = searcherFilter;

1 Ответ

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

Я думаю, что ваш параметр "typeSearchFilterIsEqualTo" должен быть ссылкой на Microsoft.Exchange.WebServices.Data.FolderSchema.DisplayName, это открытое статическое поле, которое также находится в DLL.

Вот полный пример:

var DLL = Assembly.LoadFile(@"C:\Microsoft.Exchange.WebServices.dll");

var isEqualsTo = DLL.GetType("Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo");

var param1 = DLL.GetType("Microsoft.Exchange.WebServices.Data.FolderSchema").GetField("DisplayName").GetValue(null);
var param2 = "C:\\";

var instance1 = Activator.CreateInstance(isEqualsTo, new[] { param1, param2 });

// or...

var typeParam1 = DLL.GetType("Microsoft.Exchange.WebServices.Data.PropertyDefinitionBase");
var typeParam2 = typeof(object);

var ctor = isEqualsTo.GetConstructor(new[] { typeParam1, typeParam2 });

var instance2 = ctor.Invoke(new[] { param1, param2 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...