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

时间:2017-03-10 10:03:54

标签: c# .net asp.net-core webclient .net-assembly

我想从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中)

提前感谢您的回答!

2 个答案:

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