2012-01-09 3 views
0

Я использую 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(), и то же самое происходит.

+0

Является ли 'type' символом' Test' или предком 'Test'? –

+0

Извините yes..test представляет тип теста – Schotime

+0

Возможно, мне что-то не хватает, но 'Type.GetCustomAttributes (bool)' не является допустимой перегрузкой 'GetCustomAttributes' в соответствии с [документами MSDN] (http://msdn.microsoft.com/en-us/library/system.attribute.getcustomattributes.aspx). Это что-то особенное для StructureMap? –

ответ

0

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

Согласно сообщению в блоге linked in the answer, это выглядит как DLL плагин должен был бы быть сильно названы и полностью доверять, иначе GetCustomAttributes будет отфильтровывать DelimitedAttribute. Вы можете попытаться добавить AllowPartiallyTrustedCallers attribute в сборку плагина.

Смежные вопросы