【问题标题】:Using reflection to dynamically query an assembly使用反射动态查询程序集
【发布时间】:2011-08-19 16:22:22
【问题描述】:

我在动态使用反射时遇到了困难,例如。查询 .exe 文件,而无需为我希望查询的每个程序集添加引用。

因此,例如,下面的代码是获取要检查的类的常规方法。

AssemblyName assembly_name = new AssemblyName( "Name" ); 

问题不是将参数添加到代码中,而是代码需要直接引用新程序集以进行检查。

欢迎提出任何建议。

【问题讨论】:

  • 不知道你所说的“查询”是什么意思
  • 我希望我的 exe 能够针对不同的构建程序集运行,因此查询是指我将参数发送到不同程序集的选择中。
  • 请显示一些代码...您的目标到底是什么?什么不工作?任何错误消息/异常?
  • 没有错误,但我会在下一次构建中尝试所有这些想法。谢谢大家

标签: c# visual-studio reflection assemblies


【解决方案1】:

听起来您实际上只是想在执行时加载程序集。看看Assembly.LoadAssembly.ReflectionOnlyLoad

【讨论】:

    【解决方案2】:

    也许您正在寻找类似Cecil 的东西。它是一个库(可在 Windows 和其他平台上使用),无需解析所有引用即可查询元数据。

    【讨论】:

      【解决方案3】:

      我不太确定您所说的“查询”是什么意思。如果您想知道如何使用反射从程序集创建实例,这里有一个示例:

      // From within the current assembly
      public CartesianType CreateInstance(string fullyQualifiedClassName)
      {
          Assembly assembly = Assembly.GetExecutingAssembly();
          Type target = assembly.GetType(fullyQualifiedClassName, true, true);
      
          return (CartesianType)Activator.CreateInstance(target);
      }
      
      // From an external assembly already referenced in your project
      public SomeClass CreateInstance(string fullyQualifiedClassName)
      {
          Assembly assembly = Assembly.GetAssembly(typeof(SomeClass));
          Type target = assembly.GetType(fullyQualifiedClassName, true, true);
      
          return (SomeClass)Activator.CreateInstance(target);
      }
      

      所有其他方法必须使用LoadLoadFileLoadFrom等。

      【讨论】:

        猜你喜欢
        • 2014-09-18
        • 1970-01-01
        • 2011-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-22
        • 1970-01-01
        相关资源
        最近更新 更多