Отсутствующие атрибуты в динамически загруженном классе - PullRequest
0 голосов
/ 09 января 2012

Я использую Structure Map для загрузки плагинов из дочернего каталога.

И основное приложение, и плагин ссылаются на DLL FileHelpers. FileHelpers имеет атрибуты, которые вы помещаете в класс, чтобы определить, чем ограничивается запись. Они определены в моем плагине. например.

[Delimited('\t')] 
public class Test {
    public string name;
}

Файл FileHelpers запускается из основного приложения с использованием определений классов, предоставляемых плагинами. Если я помещаю плагин dll в каталог под основным приложением, то я получаю проблему с библиотекой FileHelpers, жалуясь на то, что атрибут не может быть найден, однако, если он расположен рядом с основной библиотекой (та же папка), то он работает нормально.

Я поместил еще несколько отладочных операторов в мой код и обнаружил, что если

var type = typeof(Test);
var attributes = type.GetCustomAttributes(true); 

используется, а не конкретный (тот, который использует FileHelpers)

var attributes = type.GetCustomAttributes(typeof(DelimitedAttribute), true);

затем он находит пользовательские атрибуты без каких-либо проблем.

Я думал, что это, возможно, вещь SM, но попробовал MEF и сделал это с помощью Assembly.Load (), и произошло то же самое.

1 Ответ

0 голосов
/ 11 января 2012

Я думаю, что вы столкнулись с проблемой, описанной здесь .

Согласно сообщению в блоге , указанному в ответе , похоже, что плагин должен быть строго назван и полностью доверен, в противном случае GetCustomAttributes отфильтрует DelimitedAttribute.Вы можете попробовать добавить атрибут AllowPartiallyTrustedCallers в сборку плагина.

...