我有一个需要在运行时加载 dll 的应用程序,并且我想在动态加载的 DLL 中创建一些自定义属性,因此当它加载时,我可以在尝试使用它之前检查以确保某些属性具有某些值。
我创建一个这样的属性
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
更新2:
好的,问题是我在动态加载的 DLL 的项目中定义了属性。一旦我将属性定义移动到它自己的项目中,并将对该项目的引用添加到主项目和动态加载的 dll 中,建议的代码就起作用了。