• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

c#-使用Assembly.Load正确加载依赖项

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

主程序代码

删除dll依旧可以执行

https://files.cnblogs.com/files/NanShengBlogs/sample.zip

 

 

 

 1  static void Main(string[] args)
 2         {
 3             //PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN");
 4             string dir= Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
 5 
 6             AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
 7 
 8             Assembly ass = Assembly.Load(File.ReadAllBytes(Path.Combine(dir,"ClassLibrary2.dll")));
 9 
10             List<Assembly> assDepe = new List<Assembly>();
11 
12             Type t = ass.GetType("ClassLibrary2.Class");
13 
14             var obj=Activator.CreateInstance(t);
15             
16             var refereces = ass.GetReferencedAssemblies();
17 
18             foreach (AssemblyName item in refereces)
19             {
20                 if (AppDomain.CurrentDomain.GetAssemblies().Count(c => c.FullName== item.FullName)==0)
21                 {
22                     assDepe.Add(Assembly.Load(File.ReadAllBytes(Path.Combine(dir,item.Name + ".dll"))));
23                 }
24             }
25             var ms = t.GetMethod("MyFunc").Invoke(obj, new object[] { 20, 30 });
26             Console.WriteLine(ms);
27             Console.ReadLine();
28         }
29 
30         private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
31         {
32            return AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(a => a.GetName().FullName.Split(',')[0] == args.Name.Split(',')[0]);
33         }
34     }
"ClassLibrary2"项目

 

 

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 using ClassLibrary1;
 8 
 9 namespace ClassLibrary2
10 {
11     public class Class
12     {
13         public double MyFunc(double a, double b)
14         {
15             return ClassLibrary1.mycls.MyAdd(a, b);
16         }
17     }
18 }

 

"ClassLibrary1"项目

 

 

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace ClassLibrary1
 8 {
 9     public static class mycls
10     {
11         public static double MyAdd(double a,double b)
12         {
13             return a + 2*b;
14 
15         }
16         public static double MyMinus(double a, double b)
17         {
18             return a -b+5;
19 
20         }
21     }
22 }

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#string[]转listlong发布时间:2022-07-10
下一篇:
C#设计模式-代理模式发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap