我正在 .NET Core 平台上制作一个控制台应用程序,并且想知道如何加载程序集(.dll 文件)并使用 C# 动态功能实例化类?它看起来与 .NET 4.X 有很大不同,并且没有真正记录下来......
例如,假设我有一个类库(.NET Core),它只有一个类:
namespace MyClassLib.SampleClasses
{
public class Sample
{
public string SayHello(string name)
{
return $"Hello {name}";
}
public DateTime SayDateTime()
{
return DateTime.Now;
}
}
}
所以dll文件的名称是MyClassLib.dll
它位于/dlls/MyClassLib.dll
.
现在我想将其加载到一个简单的控制台应用程序(.NET Core)中并实例化Sample
类并在以下控制台应用程序中使用 C# 的动态功能调用方法:
namespace AssemblyLoadingDynamic
{
public class Program
{
public static void Main(string[] args)
{
// load the assembly and use the classes
}
}
}
Note:我所说的 .NET Core 是指 RC2 版本。
目前正在对抗netcoreapp1.0
你实际上不需要去实现你自己的AssemblyLoader
。有一个Default
存在并且工作得很好。 (因此@VSG24提到Load
不执行任何操作)。
using System;
using System.Runtime.Loader;
namespace AssemblyLoadingDynamic
{
public class Program
{
public static void Main(string[] args)
{
var myAssembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(@"C:\MyDirectory\bin\Custom.Thing.dll");
var myType = myAssembly.GetType("Custom.Thing.SampleClass");
var myInstance = Activator.CreateInstance(myType);
}
}
}
with project.json
看起来像:
{
"version": "1.0.0-*",
"buildOptions": {
"emitEntryPoint": true
},
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.1"
},
"System.Runtime.Loader": "4.0.0"
},
"frameworks": {
"netcoreapp1.0": {
"imports": "dnxcore50"
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)