0

我正在使用结构图从子目录加载插件。

主应用程序和插件都引用 FileHelpers dll。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() 进行,同样的事情发生了。

4

1 回答 1

0

我认为您遇到了此处描述的问题。

根据答案中链接的博客文章,看起来插件 dll 需要被强命名并完全受信任,否则GetCustomAttributes将过滤掉DelimitedAttribute. 您可以尝试将AllowPartiallyTrustedCallers属性添加 到插件程序集中。

于 2012-01-11T09:26:41.527 回答