我正在使用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()来做同样的事情。
答案 0 :(得分:0)
我认为您遇到了here所描述的问题。
根据博文linked in the answer,看起来插件dll需要强烈命名并完全信任,否则GetCustomAttributes
会过滤掉DelimitedAttribute
。您可以尝试将AllowPartiallyTrustedCallers
attribute添加到插件程序集。