如何检查c#控制台应用程序的基本类型



我有几个继承自通用BaseExe的小型控制台应用程序。各自独立地按预期正确工作。我需要通过执行的中心位置提供对这些应用程序的访问。

我的想法是这是一个小的web应用程序,为用户提供所有可用的exe的列表,可以执行。目前,我使用web.config文件来定义我的选项。然而,我希望这个列表更加动态,因为这个列表将不断增长。我认为可以使用反射从服务器目录中确定可执行文件的类型,并基于可用的内容,从中生成列表。至少,生成这个列表所需的信息是

  1. exe的路径(我有)
  2. 名称和描述(这是我需要得到的)

所有的exe都有相同的依赖关系,并且位于相同的服务器目录。

实际上,我一直在尝试

  • 从服务器目录
  • 获取exe的列表
  • 使用Assembly.LoadFile
  • 检查每个exe的类型
  • 获取exe
  • NameDescription

我可以绕过第二步,因为我可以检查GetReferencedAssemblies的结果包含BaseExe类型的程序集。然而,最后一部分完全避开了我。

var path = @"C:CodeESG ServerExeOutputbindebug";
string[] filePaths = Directory.GetFiles(path, "*.exe");
foreach (var exeReport in filePaths)
{
    Assembly exe = Assembly.LoadFile(exeReport);
    var exeType = exe.GetType();
    var referencedAssemblies = exe.GetReferencedAssemblies();   
}

如何检查c#控制台应用程序的基本类型?

简化费用

public class exe1 : BaseExe
{
    public exe1 ()
    {
        this.Name = "exe1";
        this.Description = "exe1";
    }
    static void Main(string[] args){  
       var exe1 = new exe1();
       /* snip */
    }
}
public class exe2 : BaseExe
{
    public exe2 ()
    {
        this.Name = "exe2";
        this.Description = "exe2";
    }
    static void Main(string[] args){  
       var exe2 = new exe2();
       /* snip */
    }
}

编辑:我刚刚意识到类型所有这一切,NameDescription属性在构造函数中设置。我目前的方法行不通。我将研究自定义属性作为一种替代方法,并使用它来保存信息。

using System;
using System.IO;
using System.Reflection;
class Sample {
    static void Main(){
        var path = @"C:CodeESG ServerExeOutputbindebug";
        string[] filePaths = Directory.GetFiles(path, "*.exe");
        foreach (var exeReport in filePaths){
            Assembly exe = Assembly.LoadFile(exeReport);
            var exeType = exe.GetTypes()[0];//only one class;
            if(exeType.BaseType.Name != "BaseExe") continue;
            dynamic obj = exe.CreateInstance(exeType.Name);
            Console.WriteLine("Name:{0},Description:{1}", obj.Name, obj.Description);
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新