0

アセンブリ 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")]

...
4

1 に答える 1

0

私は次のことをしました:

  1. AssemblyA、AssembmlyB、および WindowsFormApplication1 を作成しました
  2. AssemblyCategoryAttribute を含む AssemblyA の参照を AssemblyB と WindowsFormApplication1 に追加しました
  3. AssemblyB に AssemblyCategory 属性を追加しました

これは私にとってはうまくいくようです:

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();
于 2012-09-26T18:40:40.653 に答える