【问题标题】:How to dynamically load an Assembly Into My C# program, .NET Framework 4.7如何将程序集动态加载到我的 C# 程序中,.NET Framework 4.7
【发布时间】:2021-06-07 09:52:56
【问题描述】:

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

如果我有 Excel 文件:Sample.xlxs

_valueOne _valueTwo
0.0f testString

然后使用我的应用程序将其转换为数据表(然后对其进行序列化),但在编写数据表之前,我将检查 Excel 文件上的任何错误,例如在最终类中:

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

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

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

其实我在用

        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;
    }

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

【问题讨论】:

  • 看起来您正在尝试加载 .cs 文件,它不是程序集 - 它是需要构建以生成程序集的代码文件。你能澄清你的整个设置 - 你为什么要尝试获取 Excel 文件并将其转换为数据表?也许有关此目的的一些背景知识可以帮助我们了解您正在尝试做什么以及如何最好地实现它。

标签: c# .net-assembly dynamic-loading


【解决方案1】:

如果您使用的是 Visual Studio:您需要转到您的项目,请转到参考 > 右键单击​​ > 添加参考。在出现的窗口中选择项目,然后选择包含类的项目。然后保存。

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

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

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

【讨论】:

  • 谢谢你的帮助,实际上我正在寻找一种动态的方式,一旦编译我希望能够通过 args 传递包含程序集的文件夹然后它将运行时加载程序集跨度>
  • 使用 Assembly.LoadFrom 但针对 *.dll 文件,而不是 *.cs
  • 如果你想用cs,试试CSharpCompilation
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多