c# - 如何确定程序集名称是否与请求的部分程序集名称匹配

标签 c# .net

在我的应用程序中,我想测试给定程序集列表中的任何条目是否符合请求的程序集名称。

由于我的应用程序的结构,我必须提供一些机制来帮助应用程序加载程序集(如 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/

相关文章:

c# - 匿名类型 - 是否有任何显着特征?

c# - 如何在 C# 中获取当前的 DNS 服务器?

c# - 从 ASP.NET Core 3 应用程序执行 Linux Shell 命令

c# - 将 Web 引用复制到新项目

.net - NUnit 文本输出不正常

.net - Windows 需要单击以激活窗口,然后第二次单击才能选择按钮。我怎样才能改变这个?

c# - System.Numerics 是一个单独的程序集的原因

c# - 我如何[我的LAN或至少]全局运行ASP.NET网站

.net - 检查数据网格中的双击是否单击了滚动条

c# - .NET System.Net.Mail 消息在内部服务器上始终被标记为垃圾邮件