上一个以前用过项目中的简化案例,
为了控制进程间通讯,实际情况要复杂的多:
[1]接口 - namespace MyAddin
- {
- public interface IAddin
- {
- void PrintName();
- }
- }
[2]dll文件
- using System;
- namespace MyAddin
- {
- public class Addin : MarshalByRefObject, IAddin
- {
- private const string name = "My name is addin-01!";
- public void PrintName()
- {
- Console.WriteLine(name);
- }
- }
- }
[3]主域
- using System;
- using System.IO;
- namespace MyAddin
- {
- class Program
- {
- static void Main()
- {
- //开始
- Console.WriteLine("Begin!");
- //准备工作:得到插件路径
- string pathNameOfAddin = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "MyAddin.dll");
- //构建AppDomainSetup实例
- AppDomainSetup setup = new AppDomainSetup();
- setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
- setup.ShadowCopyFiles = "true";
- //装载AppDomainOfAddin
- AppDomain appDomainOfAddin = AppDomain.CreateDomain("AppDomainOfAddin", null, setup);
- //调用AppDomainOfAddin
- IAddin myAddin = (IAddin)appDomainOfAddin.CreateInstanceFromAndUnwrap(pathNameOfAddin, "MyAddin.Addin");
- myAddin.PrintName();
- //卸载AppDomainOfAddin
- AppDomain.Unload(appDomainOfAddin);
- //删除AppDomainOfAddin
- File.Delete(pathNameOfAddin);
- Console.WriteLine(pathNameOfAddin+(File.Exists(pathNameOfAddin) ? "删除失败!" : "删除成功!"));
- //结束
- Console.ReadKey();
- }
- }
- }
//输出:
//Begin!
//My name is addin-01!
//F:/开发项目/临时区间/SolutionNew/Test/bin/Debug/MyAddin.dll删除成功!
|