C#:如何动态加载/实例化DLL?

Xst*_*ity 8 c# dynamic dllimport

我已经看到了一些可能对我有帮助的例子,但是我没有那么多时间来探索它们,因为我今天刚刚发现我的老板必须比计划提前一周演示这个,我想要添加此新功能.我会尽量保持这简短而甜蜜.

好吧,这就像我第10次尝试纠正这一点,希望它是明确的.这是一个应用程序.需要在DataGridView(已完成)中显示数据行.根据报告(完成),某些行的突出显示不同.大多数报告都有自己的SQL文件,并在运行时从INI文件(完成)实现.但是,有些报告需要调用函数.该应用程序正在使用SQLite数据库.我想拥有作为报告的DLL,所有格式相同,并且所有这些都返回ReportRecord列表.ReportRecord是在我的主应用程序中定义的类,但我也会在创建它们时在每个DLL中定义它.我想实例化DLL,调用它的"GetRecords"函数,并在我的主应用程序中使用它.这是一些伪代码.如果你们能告诉我是否可能,

伪码

 foreach (string str in System.IO.Directory.GetFiles("C:\\ReportDlls", "*.dll"))
 {
   //Instantiate DLL e.g. newReport
   //_lstReportRecords.AddRange(newReport.GetReportRecords());
 }    
Run Code Online (Sandbox Code Playgroud)

反正有没有这样做?

目前,我有以下补充,直到我发现:

        private void RefreshReports(string strReportTitle)
        {
            _lstReportRecords = _lstReportRecords.Where(rr => rr.Description != strReportTitle).ToList<ReportRecord>();
            string strColumn = iniFile.GetString(strReportTitle, "Column", "");


            if (strColumn != null)
            {
                _lstReportRecords.AddRange(_dataController.BuildReportList(strColumn, strReportTitle, GetReportSQL(strReportTitle)));
            }
            else
            {
                switch (strReportTitle)
                {
                    case "Improper Indenture":
                        _lstReportRecords.AddRange(_dataController.ImproperIndenture());
                        break;
                    case "Skipping Figure":
                        _lstReportRecords.AddRange(_dataController.SkippingFigure());
                        break;
                    default: break;
                }
            }
            FormatCells();
        }
Run Code Online (Sandbox Code Playgroud)

感谢大家.

编辑:对不起伙计们,看着那些东西老老实实让我感到愚蠢.就像,我的思绪一片空白,一切都无法集中精力.:)你们提供的可能是最好的方法,但是因为我必须在星期二之前准备好一个高质量的演示,并且在此之前不应该再添加任何需要功能的报告,我将保持开放.一旦我的老板出城去演示它,我就会努力实现它.但是现在,除非我看到一个非常非常(2岁)的例子,否则它将无法回答.

Ste*_*dit 1

不要从 DLL 的角度来看待它,它们是原始文件,而是从程序集的角度来看待,这就是 .NET 看待事物的方式。您可以使用加载程序集Assembly.Load。话虽如此,您是否考虑过更通用的解决方案,例如控制反转