为什么Assembly.GetType()返回null,求大神指点
我有一个程序片断
Assembly a = Assembly.LoadFrom("BaiduMusic.dll");
Type type = a.GetType("CMusicSearch.BaiduMusic.MainSearch ", false);
调试运行,a可以得到{BaiduMusic, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null},
不过不知道为什么type一直为null
BaiduMusic.dll中类MainSearch 的定义如下
Assembly a = Assembly.LoadFrom("BaiduMusic.dll");
Type type = a.GetType("CMusicSearch.BaiduMusic.MainSearch ", false);
调试运行,a可以得到{BaiduMusic, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null},
不过不知道为什么type一直为null
BaiduMusic.dll中类MainSearch 的定义如下
namespace CMusicSearch.BaiduMusic
{
using CMusicSearch.ISearch;
using CMusicSearch.MusicCommon;
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
public class MainSearch : IMusicSearch, IEncoding
{
/// <summary>
/// 获得TR块中每个TD块信息(歌曲地址、歌曲名、歌手名)
/// </summary>
private readonly string BAIDU_MUSIC_INFO_PATTERN = "<td class=tdn>.*?</td><td class=d><a href=\"(?<LinkUrl>.*?)\"\\s+target=.*?>(?<MusicName>.*?)\\s*</a></td><td>(<a.*?>(?<Singer1>.*?)</a>.*?)?(<a.*?>(?<Singer2>.*?)</a>.*?)?(<a.*?>(?<Singer3>.*?)</a>.*?)?(<a.*?>.*?</a>.*?).*?</td>";
/// <summary>
/// 获得TR块中每个TD块信息(专辑名)
/// </summary>
private readonly string BAIDU_MUSIC_INFO_PATTERN_2 = "<td class=al>(<a.*?>(?<Album>.*?)</a>)?.*?</td>";
/// <summary>
/// 获得Baidu网页中所有歌曲信息的TR块的正则表达式
/// </summary>
private readonly string BAIDU_TR_PATTERN = @"<tr>\s*<td class=tdn>.*?</tr>";
/// <summary>
/// 创建音乐获取URL
/// </summary>
/// <param name="info">音乐搜索信息</param>
/// <returns>URL</returns>
public string CreateMusicUrl(SearchMusicInfo info)
{
try
{
string format = "http://mp3.baidu.com/m?f=ms&rf=idx&tn=baidump3&ct=134217728&lf=&rn=&word={0}&lm={1}";
return string.Format(format, new object[] { info.MusicName + CommonSymbol.SYMBOL_SPACE + info.SingerName, info.MusicFormat.ToString("D") });
}
catch
{
return string.Empty;
}
}
/// <summary>
/// 分析返回的DIV快内的歌曲信息
/// </summary>
/// <param name="tr">歌曲tr块的HTML信息</param>
/// <returns>TR块中歌曲信息列表</returns>
private List<MusicInfo> MusicInfoBuild(string tr)
{
List<MusicInfo> list = new List<MusicInfo>();
tr = tr.Replace("\n", string.Empty);
GroupCollection groups = RegexHelper.GetRegexGroup(tr, this.BAIDU_MUSIC_INFO_PATTERN, RegexOptions.IgnoreCase);
if (groups != null)
{
MusicInfo info = new MusicInfo {
MusicSource = "百度音乐",
MusicName = EncodeConverter.HtmlDecode(groups["MusicName"].Value),
Album = EncodeConverter.HtmlDecode(RegexHelper.GetRegexGroupItem(tr, this.BAIDU_MUSIC_INFO_PATTERN_2, "Album", RegexOptions.IgnoreCase)),
SingerName = groups["Singer1"].Value + " " + groups["Singer2"].Value + " " + groups["Singer3"].Value
};
string str = groups["LinkUrl"].Value;
if (string.IsNullOrEmpty(str))
{
return list;
}
List<string> musicUrlList = MusicOperator.GetMusicUrlList(str);
if ((musicUrlList == null) || (musicUrlList.Count == 0))
{
return null;
}
List<string> list3 = musicUrlList;
foreach (string str2 in list3)
{
if (MusicOperator.urlIsValid(str2))
{
MusicInfo item = info.Clone() as MusicInfo;
item.MusicUrl = str2;
item.MusicFormat = MusicOperator.GetMusicFormat(str2);
list.Add(item);
}
}
}
return list;
}
public List<MusicInfo> PageAnalysis(string PageContent)
{
List<MusicInfo> list = new List<MusicInfo>();
try
{
List<string> list2 = RegexHelper.GetRegexStringList(PageContent, this.BAIDU_TR_PATTERN, RegexOptions.Singleline | RegexOptions.IgnoreCase);
if (list2 == null)
{
return list;
}
foreach (string str in list2)
{
list.AddRange(this.MusicInfoBuild(str));
}
}
catch
{
}
return list;
}
/// <summary>
/// 指定当前页面编码方式
/// </summary>
/// <returns></returns>
public Encoding PageEncode()
{
return Encoding.GetEncoding("GB2312");
}
}
}
...全文
相关推荐
一个基于.NET的在运行时动态装载组件assembly 并调用内部方法的程序源码例子
一个基于.NET的在运行时动态装载组件assembly 或者插件pluge并调用内部方法的程序源码例子。
C#反射电子书 小例子
反射是一个运行库类型发现的过程。通过反射可以得到一个给定程序集所包含的所有类型的列表, 这个列表包括给定类型中定义的方法、字段、属性和事件。也可以动态的发现一组给定类支持的接口、方法的参数和其他相关信息如基类、命名空间、数据清单等。 网上下的 挺好的
C#使用反射(Reflect)获取dll文件中的类型并调用方法
主要为大家详细介绍了C#使用反射(Reflect)获取dll文件中的类型并调用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
c# 动态加载dll文件,并实现调用其中的简单方法
下面小编就为大家带来一篇c# 动态加载dll文件,并实现调用其中的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
c# 在内存中装载并运行程序或程序集
在内存中装载并运行程序或程序集在内存中装载并运行程序或程序集


