跨程序集的自定义装配属性问题

时间:2012-09-26 17:50:26

标签: c# .net-assembly custom-attributes

我在程序集A中有以下代码:

[AttributeUsage(AttributeTargets.Assembly)]
public class AssemblyCategoryAttribute : Attribute {
    public string Category { get; set; }

    public AssemblyCategoryAttribute(string category) {
        Category = category;
    }
}

程序集B引用程序集A并应用此属性。最后,程序集C也引用程序集A,并具有以下代码:

var assembly = Assembly.LoadFrom("..."); // Get assembly B
var description = assembly.GetCustomAttributes(false).OfType<AssemblyDescriptionAttribute>().SingleOrDefault();
var category = assembly.GetCustomAttributes(false).OfType<AssemblyCategoryAttribute>().SingleOrDefault();

但是它的描述很好但类别返回null。如果有人能帮我解决这个问题,我会很感激。感谢

修改

根据评论中的要求,这是程序集B中的AssemblyInfo.cs文件:

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using AssemblyANameSpace;

[assembly: AssemblyTitle("Name")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyCategory("Core")]

...

1 个答案:

答案 0 :(得分:0)

我做了以下事情:

  1. 我创建了AssemblyA,AssebmlyB和WindowsFormApplication1
  2. 我添加了包含的AssemblyA的参考 AssemblyCategoryAttribute到AssemblyB和 WindowsFormApplication1
  3. 我将AssemblyCategory属性添加到AssemblyB
  4. 这似乎对我有用:

    string assemblyFile = @"D:\My Documents\Visual Studio 2008\Projects\ClassLibrary1\bin\x64\Debug\AssemblyB.dll";
    byte[] assemblyBytes = File.ReadAllBytes(assemblyFile);
    
    var assembly = Assembly.Load(assemblyBytes); // Get assembly B 
    var description = assembly.GetCustomAttributes(false).OfType<AssemblyDescriptionAttribute>().SingleOrDefault(); 
    var category = assembly.GetCustomAttributes(false).OfType<AssemblyCategoryAttribute>().SingleOrDefault();
    
相关问题