下载服务器dll文件并动态加载
1.新加一个类库
namespace ClassLibrary1
{
public class Class1
{
public int Add(int a, int b)
{
return a + b;
}
}
}
2.新建一个接口
[HttpPost]
[Route("TestStream")]
public HttpResponseMessage TestStream()
{
//获取Debug路径
string str = Environment.CurrentDirectory;
var filePath = str + @"\ClassLibrary1.dll";
var result = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StreamContent(new FileStream(filePath, FileMode.Open))
};
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); return result;
}
3.本地调用
static void Main()
{ var url = "http://localhost:9921/api/PrintService/TestStream";
HttpClient client = new HttpClient();
var response = client.PostAsync(url, new StringContent("", Encoding.UTF8, "application/json")).Result;
response.EnsureSuccessStatusCode();
var stream = response.Content.ReadAsStreamAsync().Result; //获取Debug路径
string str = Environment.CurrentDirectory;
var filePath = str + @"\ClassLibrary1.dll";
if (File.Exists(filePath) == false)
{
File.Create(filePath);//不存在就创建文件
} StreamToFile(stream, filePath); Assembly assembly = Assembly.Load("ClassLibrary1");
Type type = assembly.GetType("ClassLibrary1.Class1"); MethodInfo met = type.GetMethod("Add");
object obj = Activator.CreateInstance(type, null);
object[] parameter = { , };
var result = met.Invoke(obj, parameter);
Console.WriteLine("a + b = " + result); Console.ReadLine();
} /// <summary>
/// 将 Stream 写入文件
/// </summary>
public static void StreamToFile(Stream stream, string fileName)
{
// 把 Stream 转换成 byte[]
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, , bytes.Length);
// 设置当前流的位置为流的开始
stream.Seek(, SeekOrigin.Begin); // 把 byte[] 写入文件
using (FileStream fs = new FileStream(fileName, FileMode.Open))
{
using (BinaryWriter bw =new BinaryWriter(fs))
{
bw.Write(bytes);
}
}
}
下载服务器dll文件并动态加载的更多相关文章
- [转] 从 dll 程序集中动态加载窗体
无涯 原文 从 dll 程序集中动态加载窗体 [原创] 昨天晚上花了一晚上时间写了一个从程序集中动态加载窗体的程序.将任何包含窗体的代码编译成 dll 文件,再把 dll 文件拷贝到本程序的目录下,本 ...
- Java从Jar文件中动态加载类
动态加载jar包,在实际开发中经常会需要用到,尤其涉及平台和业务的关系的时候,业务逻辑部分可以独立出去交给业务方管理,业务方只需要提供jar包,就能在平台上运行. 下面通过一个实例来直观演示: 第一: ...
- C#调用DLL文件提示试图加载格式不正确的程序
最近在调用第三方的DLL遇到了一个问题:试图加载格式不正确的程序,找了好久发现都没有解决问题,一直报错,后来发现是程序编译时的配置错了,要将项目->属性->平台选中release-X86 ...
- Java_Java中动态加载jar文件和class文件
转自:http://blog.csdn.net/mousebaby808/article/details/31788325 概述 诸如tomcat这样的服务器,在启动的时候会加载应用程序中lib目录下 ...
- [转载] Java中动态加载jar文件和class文件
转载自http://blog.csdn.net/mousebaby808/article/details/31788325 概述 诸如tomcat这样的服务器,在启动的时候会加载应用程序中lib目录下 ...
- Assembly.Load动态加载程序集而不占用文件 z
方式一:占用文件的加载 Assembly assembly = Assembly.Load(path); 用上面的方法可以动态的加载到dll,但是用这种方法加载到的dll一直到程序运行结束都是占用的d ...
- PE文件动态加载执行过程
主要步骤: 1.将要加载的文件读取到内存中(简称为文内),检查文件格式无误后,根据可选PE头(简称op头)的SizeOfImage,申请出一块空间用于存储该文件加载到内存后展开的数据(简称为内内).记 ...
- C# 动态加载程序集dll (实现接口)
一.程序集(接口程序集):LyhInterface.Dll namespace LyhInterface { public interface ILyhInterface { void Run(); ...
- 动态加载js文件是异步的
动态加载js文件是异步的. 今天调试一个错误,一个js方法各种调不到. 原因是因为所调方法的js文件是动态加载进来的. <script type="text/javascript&qu ...
随机推荐
- kafka的一些名词
broker.id 区kafka集群中每台机器的标识 log.dirs 日志的存放目录,这个最好不要放到/tmp目录下,因为kafka的已被消费和未被消费的数据也被当成“日志”存放到了日志目录,: l ...
- docker 中运行 redis 服务
先使用 dockerfile 创建一个 redis 容器 FROM ubuntu:latest RUN apt-get update RUN apt-get -y install redis-serv ...
- 计算机网络中的TCP/UDP协议到底是怎么回事(二)
上一篇博客阐述了TCP/IP五层网络结构模型以及一些关于TCP.UDP的基础知识,这篇博客会接着写一些关于TCP拥塞控制的算法以及对TCP中常有的疑问进行解答. TCP拥塞控制 首先了解几个概念,为下 ...
- C++模拟Java“内部”类
代码思路来自Thinking in C++ 10.13.1内部类方法.类似多重继承,但是类型转换是单向的:Outer支持“向上”转型,但是不能“向下”转型回Outer. #include <io ...
- Emacs golang 配置
在配置前需要下载用到的包: godoc godef gocode oracle 在下载包之前需要设置好环境变量: # Golang export GOROOT=$HOME/go export GOPA ...
- 【Android 界面效果34】Android里Service的bindService()和startService()混合使用深入分析
.先讲讲怎么使用bindService()绑定服务 应用组件(客户端)可以调用bindService()绑定到一个service.Android系统之后调用service的onBind()方法,它返回 ...
- PreparedStatement和Statement的区别
转自:http://blog.sina.com.cn/s/blog_77eba18f01019csh.html 1. PreparedStatement接口继承Statement, PreparedS ...
- jQuery中json对象的复制(数组及对象) .
1.jQuery自带的$.map方式: $.map(json, function (n) { return n; }); 这种方式原来用于复制数组还可以,今天用它复制数组中的某一条记录,发现字段名称丢 ...
- BZOJ 3725
Description 有一堵长度为n的墙需要刷漆,你有一把长度为k的刷子.墙和刷子都被均匀划分成单位长度的小格,刷子的每一格中都沾有某种颜色(纯色)的漆.你需要用这把刷子在墙上每一个可能的位置(只要 ...
- windows下,python+scrapy环境搭建
•安装lxml(官网给出的地址http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml,下载whl文件安装) •安装zope.interface https:// ...