动态加载的类缺少属性

本文关键字:属性 加载 动态 | 更新日期: 2023-09-27 18:19:50

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

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

动态加载的类缺少属性

我认为您遇到了这里描述的问题。

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