托管可扩展框架和AssemblyInfo.cs

时间:2013-01-02 10:16:07

标签: c# mef

是否可以向AssemblyInfo.cs添加信息使用汇编属性,例如assembly:MyProjectAssembly,

因此,当MEF扫描rutime文件夹中的程序集时,它将只扫描那些用MyProjectAssembly修饰的程序集。

1 个答案:

答案 0 :(得分:0)

我不认为MEF有这个功能。我不是百分百肯定的。

你可以做的是使用Mono.Cecil,它是System.Reflection的一个非常强大的替代品。 Mono.Cecil允许您检查(并重写但这是另一个故事).NET程序集而不加载它们。这意味着您可以轻松添加所需的功能。例如:

public static bool AssemblyIncludesCustomAttribute(string assemblyPath, string customAttributeName)
        {
            if (assemblyPath == null) throw new ArgumentNullException("assemblyPath");
            if (customAttributeName == null) throw new ArgumentNullException("customAttributeName");            

            AssemblyDefinition assemblyDef = AssemblyDefinition.ReadAssembly(assemblyPath);

            return assemblyDef.CustomAttributes.Any(ca => ca.AttributeType.FullName == customAttributeName);
        }

然后像这样使用它:

var catalog = new AggregateCatalog();
            string dirPath = @".\Extensions";
            foreach (string assemblyFile in Directory.EnumerateFiles(dirPath, "*.dll"))
            {
                if (AssemblyIncludesCustomAttribute("Blah.dll", "System.Reflection.AssemblyConfigurationAttribute"))
                {
                    catalog.Catalogs.Add(new AssemblyCatalog(assemblyFile));                    
                }
            }