2013-04-16 3 views
1

Я определил следующий ассемблер сборки для DLL, но я не могу его прочитать в другом проекте. Есть ли у вас какие-либо предложения?Чтение атрибута пользовательской сборки

атрибут сборки:

Namespace Extensions.CustomAttributes 

    <AttributeUsage(AttributeTargets.All, Inherited:=True, AllowMultiple:=True)> 

    Public Class DeveloperNoteAttribute 
     Inherits System.Attribute 

     Protected strName, strComment As String 
     Protected blnBug As Boolean 

     Public Sub New(ByVal Name As String, ByVal Comment As String, ByVal DateRecorded As String) 
      MyBase.New() 
      strName = Name 
      strComment = Comment 
     End Sub 

     Public Property Name As String 
      Get 
       Return strName 
      End Get 
      Set(ByVal value As String) 
       strName = value 
      End Set 
     End Property 

     Public Property Comment As String 
      Get 
       Return strComment 
      End Get 
      Set(ByVal value As String) 
       strComment = value 
      End Set 
     End Property 

     Public Property Bug As Boolean 
      Get 
       Return blnBug 
      End Get 
      Set(ByVal value As Boolean) 
       blnBug = value 
      End Set 
     End Property 

    End Class 

End Namespace 

Assemblyinfo.vb:

<Assembly: Extensions.CustomAttributes.DeveloperNoteAttribute("Test1", "Test2", "Test3")> 

Получить атрибуты в другом проекте (через переменную: Имя файла)

Dim oAssem As System.Reflection.Assembly = System.Reflection.Assembly.LoadFrom(Filename) 

' Get any assembly-level attributes 
Dim oAttribs() As Attribute = Attribute.GetCustomAttributes(oAssem) 
For Each att In oAttribs 
    Try 
     Dim at As Extensions.CustomAttributes.DeveloperNoteAttribute = CType(att, Extensions.CustomAttributes.DeveloperNoteAttribute) 
     Debug.WriteLine(at.Name.ToString) 
    Catch ex As Exception 

    End Try 
Next 

В отладчике я просто получить лот "System.InvalidCastException"

+0

Если вы «Dim at As Object = att», удалив бросок, то как выглядит 'att' при отладке? – djv

+0

После этого «at» -Var становится 'System.Reflection.AssemblyCompanyAttribute' – hark

+0

Они должны все вытекать из' System.Attribute', который имеет много операций. Вы должны иметь возможность получать свои пользовательские атрибуты. См. Методы http://msdn.microsoft.com/en-us/library/system.attribute.aspx и примеры. – djv

ответ

0

Решение проблемы для будущих посетителей:

  1. Вы можете определить пользовательское собрание атрибутов, как я сделал в моем вопросе выше.

  2. Для считывания пользовательского атрибута вы можете использовать System.Attribute.GetCustomAttributes() для получения массива всех атрибутов. Но вы также можете использовать System.Attribute.GetCustomAttribute(), который получает конкретный атрибут пройденного вами типа.

Информация:

Большое спасибо к @DanVerdolino за помощь!

Смежные вопросы