在我的应用程序中,我想测试给定程序集列表中的任何条目是否符合请求的程序集名称。
由于我的应用程序的结构,我必须提供一些机制来帮助应用程序加载程序集(如 this knowledge base article 中所述。
这篇文章提供了一种确定加载的程序集是否符合请求的有趣方法。
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
显然,我可以改进字符串匹配直到它按我的需要工作,但是没有更好的方法来处理这个问题吗?我应该如何知道给定程序集何时是有效匹配项?
最佳答案
String.IndexOf
如果未找到 mtach,则返回 -1。请改用 String.Split
。
private Assembly CurrentDomainAssemblyResolve( object sender, ResolveEventArgs args ) {
foreach( Assembly pluginAssembly in LoadedPluginAssemblies ) {
if( pluginAssembly.FullName.Split(',')[0] == args.Name.Split(',')[0]) {
return pluginAssembly;
}
}
return null;
}
关于c# - 如何确定程序集名称是否与请求的部分程序集名称匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8792120/