C# 动态加载的类上缺少属性

C# 动态加载的类上缺少属性,c#,plugins,dll,structuremap,filehelpers,C#,Plugins,Dll,Structuremap,Filehelpers,我使用结构图从子目录加载插件 主应用程序和插件都引用FileHelpers dll。FileHelpers具有您放在类上的属性,用于定义记录的分隔符。这些都是在我的插件中定义的。例如 [Delimited('\t')] public class Test { public string name; } FileHelpers实用程序使用插件提供的类定义从主应用程序运行。如果我将插件dll放在主应用程序下面的目录中,那么FileHelpers库就会出现问题,抱怨找不到该属性,但是如果该

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

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

[Delimited('\t')] 
public class Test {
    public string name;
}
FileHelpers实用程序使用插件提供的类定义从主应用程序运行。如果我将插件dll放在主应用程序下面的目录中,那么FileHelpers库就会出现问题,抱怨找不到该属性,但是如果该属性放在主库(同一文件夹)的旁边,那么它就可以正常工作

我在代码中添加了一些进一步的调试语句,并发现如果

var type = typeof(Test);
var attributes = type.GetCustomAttributes(true); 
已使用,而不是特定的(FileHelpers正在使用的)

然后,它会毫无困难地找到自定义属性


我认为这可能是一个SM问题,但我尝试了MEF,并使用Assembly.Load()执行此操作,同样的情况也发生了。

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


根据这篇博文,插件dll似乎需要被强命名和完全信任,否则
GetCustomAttributes
将过滤掉
DelimitedAttribute
。您可以尝试将添加到插件程序集。

是否
类型
表示
测试
类型或
测试
的祖先?抱歉,是的..测试表示测试类型可能我缺少一些东西,但
类型。GetCustomAttributes(bool)
似乎不是根据的
GetCustomAttributes
的有效重载。这是StructureMap特有的吗?就是这个。
var attributes = type.GetCustomAttributes(typeof(DelimitedAttribute), true);