1.在写一个记录日志到文件中的类库(生成dll文件copy到一个目录中去,然后在主函数的appconfig中去配置。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace WriteToTxtLib
{
public class WriteLog
{
public void Write(string logMessage)
{
using (StreamWriter sw = new StreamWriter("e:\\test\\writelog.txt",true))
{
sw.WriteLine(DateTime.Now.ToLongDateString() + logMessage);
}
}
}
}

2.新建一个测试的主函数,其中appconfig进行如下配置

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<appSettings>
<add key="dllNamespaceName" value="WriteToWordLib"/>
<add key="dllClassName" value="WriteLog"/>
<add key="dllMethodName" value="Write"/>
<add key="dllPath" value="e:\test\WriteToWordLib.dll"/> </appSettings>
</configuration>

3.给主函数添加如下代码

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Configuration;
using System.Linq;
using System.Management.Instrumentation;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.Text;
using System.IO;
using System.Collections;
using System.Configuration; namespace 我的日志功能函数
{
class Program
{
static void Main(string[] args)
{
WriteLog("主函数开始");
Console.ReadKey();
} private static void WriteLog(string logMessage)
{
/*
* 这是appconfig文件中的指定的内容
<add key="dllNamespaceName" value="WriteToTxtLib"/>
<add key="dllClassName" value="WriteLog"/>
<add key="dllMethodName" value="Write"/>
<add key="dllPath" value="e:\\test\WriteToTxtLib.dll"/>
*/
//获取到命名空间,类名,方法名,dll路径
string dllNamespaceName = System.Configuration.ConfigurationSettings.AppSettings["dllNamespaceName"].ToString();
string dllClassName = System.Configuration.ConfigurationSettings.AppSettings["dllClassName"].ToString();
string dllMethodName = System.Configuration.ConfigurationSettings.AppSettings["dllMethodName"].ToString();
string dllPath = System.Configuration.ConfigurationSettings.AppSettings["dllPath"].ToString(); Assembly asm = Assembly.LoadFile(dllPath);//加载dll
Type classType = asm.GetType(dllNamespaceName + "." + dllClassName);//获取类型
object obj = Activator.CreateInstance(classType);//根据类型创建对象
MethodInfo method = classType.GetMethod(dllMethodName);//找到指定的方法
object o = method.Invoke(obj, new object[] { logMessage });//调用方法
}
}
}

c#动态加载dll文件的更多相关文章

  1. c# 如何进行动态加载dll

    最近遇到了在c#中如何进行动态加载dll的话,搞定了,下面介绍一下自己的步骤. 1,新建dll. 打开vs,新建project->Class Library->项目名为testdll1.在 ...

  2. Delphi静态加载DLL和动态加载DLL示例

    下面以Delphi调用触摸屏动态库xtkutility.dll为例子,说明如何静态加载DLL和动态加载DLL. 直接上代码. 1.静态加载示例 unit Unit1; interface uses W ...

  3. C# 利用反射动态加载dll

    笔者遇到的一个问题,dll文件在客户端可以加载成功,在web端引用程序报错.解决方法:利用反射动态加载dll 头部引用加: using System.Reflection; 主要代码: Assembl ...

  4. c#实现动态加载Dll(转)

    c#实现动态加载Dll 分类: .net2009-12-28 13:54 3652人阅读 评论(1) 收藏 举报 dllc#assemblynullexceptionclass 原理如下: 1.利用反 ...

  5. unity3d动态加载dll的API以及限制

    Unity3D的坑系列:动态加载dll 一.使用限制 现在参与的项目是做MMO手游,目标平台是Android和iOS,iOS平台不能动态加载dll(什么原因找乔布斯去),可以直接忽略,而在Androi ...

  6. C#,动态加载DLL,通过反射,调用参数,方法,窗体

    .net中常会用到动态加载DLL,而DLL中可能包含各种参数.方法.窗体,如何来调用动态加载这些参数.方法.窗体呢? 在C#中,我们要使用反射,首先要搞清楚以下命名空间中几个类的关系: System. ...

  7. c#实现动态加载Dll

    原文:c#实现动态加载Dll 原理如下: 1.利用反射进行动态加载和调用. Assembly assembly=Assembly.LoadFrom(DllPath); //利用dll的路径加载,同时将 ...

  8. 动态加载dll的实现+远线程注入

    1.在目标进程中申请内存 2.向目标进程内存中写入shellcode(没有特征,编码比较麻烦) 3.创建远线程执行shellcode 之前可以看到shellcode很难编写还要去依赖库,去字符串区等等 ...

  9. Java_Java中动态加载jar文件和class文件

    转自:http://blog.csdn.net/mousebaby808/article/details/31788325 概述 诸如tomcat这样的服务器,在启动的时候会加载应用程序中lib目录下 ...

随机推荐

  1. 瞎折腾之Mvc WebApi的使用以及跨域问题

    在公司经常会用到调用接口的情况,但是一直是用的webservice,我感觉真是太笨重了.虽然某些人感觉用的很爽.非常爽.比如说:公司在开发的时候需要对接另一组的接口,然后就只能是指定端口和ip到他的电 ...

  2. UVa 1225 Digit Counting

    题意:给出n,将前n个整数顺次写在一起,统计各个数字出现的次数. 用的最笨的办法--直接统计-- 后来发现网上的题解有先打表来做的 #include<iostream> #include& ...

  3. BZOJ 3624 免费道路

    第一反应:这不先0后1做并查集就行了吗? 然后WA了... 哦....啊?哦...233 如果按顺序做并查集,有些0的边可能很重要(只能由它作为0连起两个联通块),但并没有被选. 于是先按1做并查集, ...

  4. BZOJ 2120/BZOJ 2453

    分块傻逼题. memset很慢的...而且其实也没有用.... #include<iostream> #include<cstdio> #include<cstring& ...

  5. 流程引擎的API和服务基础

    RepositoryService :  管理和控制 发布包 和 流程定义(包含了一个流程每个环节的结构和行为) 的操作 除此之外,服务可以 查询引擎中的发布包和流程定义. 暂停或激活发布包,对应全部 ...

  6. 每天一个Linux命令(3): cd

    Linux cd 命令可以说是Linux中最基本的命令语句,其他的命令语句要进行操作,都是建立在使用 cd 命令上的. 所以,学习Linux 常用命令,首先就要学好 cd 命令的使用方法技巧. 1.  ...

  7. android 单独编译某个模块

    第一次下载好Android源代码工程后,我们通常是在Android源代码工程目录下执行make命令,经过漫长的等待之后,就可以得到Android系统镜像system.img了.以后如果我们修改了And ...

  8. concat、reverse面试题

    1.concat数组连接 ,,]; ,,]; ,,]; alert(arr3.concat(arr1,arr2)); 结果:9,9,9,2,3,4,5,6,7 2.reverse将数组内容颠个个 ,, ...

  9. 百度地图Api详解之地图标注

    标注概述 标注(Marker)是用来表示一个点位置的可见元素,每个标注自身都包含地理信息.比如你在西单商场位置添加了一个标注,不论地图移动.缩放,标注都会跟随一起移动,保证其始终指向正确的地理位置. ...

  10. web开发中禁止因为网速慢导致重复提交数据

    var checkSubmitFlg = false;  function check() {                if (!checkSubmitFlg) {                ...