如何将程序集动态加载到我的 C# 程序中,.NET Framework 4.7

How to dynamically load an Assembly Into My C# program, .NET Framework 4.7

我正在使用 NPOI 构建一个 Excel 到 .bin 的控制台应用程序,我想要做的是将读取的数据与 class 进行比较,让我更好地解释一下.. .

如果我有一个 Excel 文件:Sample.xlxs

_valueOne _valueTwo
0.0f 测试字符串

然后我将使用我的应用程序将其转换为数据表(然后将其序列化),但我会在写入数据表之前检查 Excel 文件中是否存在任何错误,例如在最终 class 将是:

public class Sample
{
   public float _valueOne;
   public string _valueTwo;
}

我想加载这个 class 来比较从 Excel 文件中获得的值以发现一些错误(比如是字符串而不是浮点数)

最终classes包含在另一个项目中,所以我想知道是否有办法“导入”它。

其实我在用

        private static System.Type GetType(
        string in_assemblyPath,
        string in_className)
    {
        System.Type typeCur
            = System.Type.GetType(in_className);
        if (typeCur != null)
        {
            return typeCur;
        }
        else
        {
            Debug.WriteLine(in_assemblyPath + "/" + in_className + ".cs");
            try
            {

                System.Reflection.Assembly asm
                            = Assembly.LoadFrom(in_assemblyPath + "/" + in_className + ".cs");
                typeCur
                    = asm.GetType(in_className);
                if (typeCur != null)
                {
                    return typeCur;
                }

            }catch(Exception ex )
            {
                Debug.WriteLine(">>>>>>>>>>>   " + "Error On Assembly Load"+" <<<<<<<<<" );
                Debug.WriteLine(ex.StackTrace);
                Debug.WriteLine(ex.Message);
                Debug.WriteLine(">>>>>>>>>>>   " + "End Error Report" + " <<<<<<<<<");
            }

        }

        return null;
    }

但我收到一条错误消息:该模块应包含程序集清单。

如果您正在使用 visual studio:您需要转到您的项目,转到参考 > 右键单击​​ > 添加参考。在window出现的select项目中,然后select包含类的项目。然后保存。

编辑:如果你想以动态方式添加它,那么,正如@Romka 建议的那样,使用这样的东西:

     var MainAssembly = Assembly.Load("yourpathtodll.dll");
     Type t = MainAssembly.GetType("Yournamespace." + filename);
     var finalobj = Activator.CreateInstance(t);

然后你可以使用反射获取字段和属性。