码迷,mamicode.com
首页 > 其他好文 > 详细

关于vs的 obj\Debug占用 问题研究

时间:2020-11-30 15:32:45      阅读:3      评论:0      收藏:0      [点我收藏+]

标签: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控制台工程: [受加载]

AssemblyDependent类在[链式加载]

技术图片
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);
                    }
                }
            }
        }
    }
}
View Code

 

然后加载了一个小型的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);
        }
    }
}
View Code

 

然后拖拉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来中断它原本的占用..

 

关于vs的 obj\Debug占用 问题研究

标签:framework   rom   console   name   加载   sed   复制   事件   ring   

原文地址:https://www.cnblogs.com/JJBox/p/14033677.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!