如何从 Asp.Net 核心中的特定 URL 加载 DLL 文件

How to load a DLL file from a specific URL in Asp.Net Core

我想从 http://localhost:8080/bin/ 下载 DLL 文件并在我的 Asp.Net 核心应用程序中实例化 类 和功能。

我已经制作了一个小型控制台应用程序(在 .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 核心中)

提前感谢您的回答!

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

您应该可以使用以下代码在 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 settings/configuration 下载此类文件。您需要明确配置该部分。可能这个 link 在这方面会有所帮助。