如何将程序集动态加载到我的 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);
然后你可以使用反射获取字段和属性。
我正在使用 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);
然后你可以使用反射获取字段和属性。