我正在.Net Core平台上制作一个控制台应用程序,并且想知道,如何使用C#动态功能加载程序集(.dll文件)和实例化类?它似乎与.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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
因此,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
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意: .Net Core我指的是RC2版本.
我需要typescript
在构建之后从我的一些C#类生成文件.
我创建dotnet cli tool
并添加了post-build事件
dotnet tsgenerator "$(TargetPath)"
Run Code Online (Sandbox Code Playgroud)
$(TargetPath)
例如,宏在哪里指向D:\Test\bin\Release\netcoreapp2.0\my.dll
接下来,我尝试下一步加载程序集:
public static void Main(string[] args)
{
var dllPath = args[0]; // "D:\Test\bin\Release\netcoreapp2.0\my.dll"
var assembly = Assembly.LoadFile(dllPath);
var types = assembly.GetExportedTypes(); // Throws exception
}
Run Code Online (Sandbox Code Playgroud)
但我得到了ReflectionTypeLoadException
,说Could not load file or assembly
了一些参考组件(例如,Microsoft.AspNetCore.Antiforgery
).
我如何为.NET Core应用程序加载程序集?