我想从http://localhost:8080/bin/下载DLL文件,并在我的Asp.Net Core应用程序中实例化类和函数。
我做了一个小的控制台应用程序(在.NET Framwork中)。代码如下:
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
using (var wc = new WebClient())
{
var myDll = Assembly.Load(wc.DownloadData("http://localhost:8080/test-dll/bin/myDll.dll"));
Type t = myDll .GetType("ConsoleApplication1.Test");
// Instantiate my class
object myObject = new object();
myObject = Activator.CreateInstance(t);
}
}
}
}
不幸的是,.Net Core不支持WebClient。
那么,我如何加载位于特定URL中的dll文件并实例化它? (在.Net Core中)
提前感谢您的回答!
答案 0 :(得分:1)
您应该可以使用以下代码在ASP.Net核心中下载文件。
using (HttpClient client = new HttpClient())
{
string url = "http://localhost:55272/myDll.dll";
using (var response = await client.GetAsync(url))
{
response.EnsureSuccessStatusCode();
using (var inputStream = await response.Content.ReadAsStreamAsync())
{
var mydll = AssemblyLoadContext.Default.LoadFromStream(inputStream);
}
}
}
但请记住,某些文件类型(如.config,.dll .exe)在IIS中受到保护,您将无法使用IIS的默认设置/配置下载此类文件。您需要明确配置该部分。可能这个link在这方面可能会有所帮助。
答案 1 :(得分:0)
namespace ConslApp
{
class Prog
{
static void Main(string[] args)
{
using (var web = new Web())
{
var myDll = Assembly.Load(web.DownloadData("http://localhost:8080/test-dll/bin/myDll.dll"));
Type t = myDll .GetType("ConslApp.Test");
// Instantiate my class
object Obj = new object();
obj = Activator.CreateInstance(t);
}
}
}
}