我有一个应用程序,需要在运行时加载DLL,我想在动态加载的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
UPDATE2:
行,所以问题是,我的动态项目中定义的属性加载的DLL。一旦我将属性定义移动到它自己的项目中,并将该项目的引用添加到主项目和动态加载的dll中。建议的代码起作用。
的DLL有属性的定义,而不是应用程序,我一从上面的代码中调用它当我尝试上面的代码rec'd编译错误“无法找到类型或名称空间ValidReleaseToApp”如果我将Attrib def复制到调用应用程序中,我得到运行时错误无法投射类型为'ValidReleaseToApp '键入'ValidReleaseToApp'。“任何想法? – etoisarobot 2010-07-23 16:12:18
在这种情况下,您必须以获得该属性的相同方式获取属性的类型(你有'类型')。然后,而不是'是ValidReleaseToApp',我认为你可以''typeof(attributeTypeFromAssembly)' – 2010-07-23 16:35:18
感谢您的帮助,但如果我检索这样的类型“Type attrType = a.GetType(”ValidReleaseToApp“,true);” 如何使用它将对象转换为ValidReleaseToApp? – etoisarobot 2010-07-23 18:57:10