У меня есть приложение, которое требует загрузки dll во время выполнения, и я хочу создать некоторые пользовательские атрибуты в динамически загружаемой DLL, поэтому при загрузке я могу убедиться, что определенные атрибуты имеют определенные значения, прежде чем пытаться использоватьit.
Я создаю атрибут, подобный этому
using System;
[AttributeUsage(AttributeTargets.Class)]
public class ValidReleaseToApp : Attribute
{
private string ReleaseToApplication;
public ValidReleaseToApp(string ReleaseToApp)
{
this.ReleaseToApplication = ReleaseToApp;
}
}
В динамически загружаемой DLL я устанавливаю атрибут следующим образом
[ValidReleaseToApp("TheAppName")]
public class ClassName : IInterfaceName
etc... etc....
Но когда я пытаюсь прочитатьЗначение атрибута Я получаю только имя атрибута «ValidReleaseToApp». Как мне получить значение «TheAppName»?
Assembly a = Assembly.LoadFrom(PathToDLL);
Type type = a.GetType("Namespace.ClassName", true);
System.Reflection.MemberInfo info = type;
var attributes = info.GetCustomAttributes(true);
MessageBox.Show(attributes[0].ToString());
Обновление:
Поскольку я динамически загружаю dll во время выполнения определенияАтрибут не помог.к основному приложению.Поэтому, когда я пытаюсь сделать следующее, как предложено
string value = ((ValidReleaseToApp)attributes[0]).ReleaseToApplication;
MessageBox.Show(value);
, я получаю эту ошибку
The type or namespace name 'ValidReleaseToApp' could not be found
Update2:
OK, поэтому проблема заключалась в том, что я определил атрибутв рамках проекта динамически загружаемой DLL.После того, как я переместил определения атрибутов в его собственный проект и добавил ссылку на этот проект как в основной проект, так и в динамически загружаемую dll, предложенный код сработал.