给梦一个奔跑的方向!
PDF Print E-mail
User Rating: / 1
PoorBest 
Written by xlingfairy
Monday, 24 August 2009 23:32
写了一个类库,这个类库不涉及数据库存储、信息显示,只用来做一件特定的事情,然后把结果以 delegate 方法返回 UI 界面。
我把类名写到一个表里,在 UI 界面里把这个类名给读出来,在跟据这个类名,用 Activator.CreateInstance 方法得到实例。
但这个方法,基本上要求 assemblyName 这个字符串,或是要求一个 Type ,要取得 Type 可以用 Type.GetType(string typeName) 这个方法,但是这个 typeName 里面也必须包含 assemblyName ,否则是取不到 Type 的。
首先想到的是从 AppDomain.CurrentDomain.GetAssemblies() 返回的 Assembly 数组里取出这个类库的 assemblyName, 我这样做了:
先 using 这个类库的 namespace
再:
            string fetcherName = crawlerInfo.FetcherName;
            string ns = fetcherName;
            if( fetcherName.IndexOf('.') != -1 ) {
                ns = fetcherName.Remove(fetcherName.LastIndexOf('.'));
            }

            Assembly[] asbs = AppDomain.CurrentDomain.GetAssemblies();
            Type[] ts;
            Type fetcherType = null;
            foreach( Assembly asb in asbs ) {
                if( asb.FullName.IndexOf(ns) == 0 ) {
                    ts = asb.GetTypes();
                    foreach( Type t in ts ) {
                        if( t.FullName == fetcherName ) {
                            fetcherType = t;
                            break;
                        }
                    }
                }
            }

在 Debug 模式下运行,这个 fetcherType 是有值的。
但是换成 Release 模式,这个 fetcherType 就是 null 了。原因就如:不存在的 以声明变量 里所描述的一样。
看来,只好预先把要用到那几个类库的 assemblyName 给取出来了。
汗。。。这样启不是要每加一个类库,就是把这个程序给改一把?
不知道有没有其它方法没有。
 

Add comment


Security code
Refresh

Popular Contents

Recommend

Site Info

Members : 1
Content : 143
Web Links : 7
Content View Hits : 113049

Links

 

Trace