在我的应用程序中,我想测试给定的程序集列表中是否有任何条目符合请求的程序集名称。
由于我的应用程序的结构,我必须提供一些机制来帮助应用程序加载程序集(如这篇知识库文章所述)
该文章有一种有趣的方法来确定加载的程序集是否符合要求。
if(strAssmbName.FullName.Substring(0, strAssmbName.FullName.IndexOf(","))==args.Name.Substring(0, args.Name.IndexOf(",")))
当所提供的程序集名称只包含名称时,这种方法会给我带来问题,因为 args.Name 不包含逗号
,
。private Assembly CurrentDomainAssemblyResolve( object sender, ResolveEventArgs args ) {
foreach( Assembly pluginAssembly in LoadedPluginAssemblies ) {
if( pluginAssembly.FullName.Substring( 0, pluginAssembly.FullName.IndexOf( "," ) ) == args.Name.Substring( 0, args.Name.IndexOf( "," ) ) ) {
return pluginAssembly;
}
}
return null;
}
作品:
MyApp.JobDetails, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
ArgumentOutOfRangeException:
MyApp.JobDetails
显然,我可以优化字符串匹配直到它按照我的要求工作,但是难道没有一种更好的方法来处理这个问题吗?当我需要确定给定的组件是否为有效匹配时,我应该怎么做呢?