标签:framework rom console name 加载 sed 复制 事件 ring
我在这篇文上面提及了一个事情 cad.net dll动态加载
在vs调试cad的时候如果这个时候使用 Assembly.Load(byte) 那么会出现obj\Debug占用,这是为什么呢?
查阅了下面的地址,发现都不太对的样子.....
https://blog.csdn.net/guangod/article/details/88799393 https://bbs.csdn.net/topics/390744522?utm_medium=distribute.pc_relevant_t0.none-task-discussion_topic-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-discussion_topic-BlogCommendFromBaidu-1.control https://www.cnblogs.com/ifendou/p/9088265.html
然后我新建了一个net framework控制台工程: [受加载]
namespace ConsoleApp1 { class Program { static void Main(string[] args) { while (true) { Console.WriteLine("输入路径:--------------------------------------------------"); var path = Console.ReadLine(); if (path != null) { var ad = new AssemblyDependent(path); var msg = ad.Load(); Console.WriteLine("反馈:--------------------------------------------------"); bool allyes = true; foreach (var item in msg) { if (!item.LoadYes) { Console.WriteLine(Environment.NewLine + "**" + item.Path + Environment.NewLine + "**此文件已加载过,重复名称,重复版本号,本次不加载!" + Environment.NewLine); allyes = false; } } if (allyes) { Console.WriteLine(Environment.NewLine + "**链式加载成功!" + Environment.NewLine); } } } } } }
然后加载了一个小型的dll工程:[被加载]
代码没有什么意义...只是为了生成一个dll
using System; namespace ClassLibrary1 { public class Class1 { public void Princ() { Console.WriteLine(Environment.NewLine + "a a a a a a a a a a a a a a " + Environment.NewLine); } } }
然后拖拉dll到控制台:
出现了 obj\Debug占用!!
我们这下知道了几个信息:
1,这问题和cad无关.
2,这个问题是vs的机制,和winform.wpf也无关.
3,[链式加载]的
Assembly.ReflectionOnlyLoad(File.ReadAllBytes(dll)); 映射区加载并不导致问题;
Assembly.Load(File.ReadAllBytes(dll)); 导致问题的只有内存区加载;
4,占用obj\Debug而不是bin\Debug...
5,重复编译四次[被加载]会通过编译..(说明了vs内部有机制释放
6,如果写了一个编译后事件,将bin\Debug的dll复制到H盘目录下:
copy $(TargetPath) "H:\"
然后拖拉H盘下的这个dll,再去编译一次.你会惊讶地发现:
严重性 代码 说明 项目 文件 行 禁止显示状态 错误 CS2012 无法打开“D:\桌面\被加载\ClassLibrary1\obj\Debug\ClassLibrary1.pdb”进行写入 --“文件“D:\桌面\被加载\ClassLibrary1\obj\Debug\ClassLibrary1.pdb”正由另一进程使用,因此该进程无法访问此文件。”
ClassLibrary1 D:\桌面\被加载\ClassLibrary1\CSC 1 活动
怎么也占用了呢?明明加载的都跨盘了......而且这个时候只需要再编译一次,就能通过...刚刚是四次....
说明vs会检索现有所有打开的vs程序下的工程??
如之前的文章所知:我们最后的解决方法是非vs调试打开软件,感觉或许可以通过设置vs来中断它原本的占用..
标签:framework rom console name 加载 sed 复制 事件 ring
原文地址:https://www.cnblogs.com/JJBox/p/14033677.html