动态加载的类缺少属性

时间:2012-01-09 01:44:29

标签: c# plugins dll structuremap filehelpers

我正在使用Structure Map从子目录加载插件。

主应用程序和插件都引用了FileHelpers dll。 FileHelpers具有您放在类上的属性,用于定义记录所分隔的内容。这些是在我的插件中定义的。例如

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

FileHelpers utitlity使用插件提供的类定义从主应用程序运行。如果我将插件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 :(得分:0)

我认为您遇到了here所描述的问题。

根据博文linked in the answer,看起来插件dll需要强烈命名并完全信任,否则GetCustomAttributes会过滤掉DelimitedAttribute。您可以尝试将AllowPartiallyTrustedCallers attribute添加到插件程序集。