zoukankan      html  css  js  c++  java
  • 测试篇 关于vs的 objDebug占用 问题研究

    我在这篇文 cad.net dll动态加载 上面提及了一个事情,在vs调试cad的时候如果这个时候使用 Assembly.Load(byte) 那么会出现objDebug占用而不是binDebug占用,这是为什么呢?

    查阅了下面的类似的问题,发现都不太对的样子.....

    测试文件下载

    然后我新建了一个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到控制台:

      

     

      

    出现了 objDebug占用!!

    我们这下知道了几个信息:

    1. 问题与cad无关.
    2. 问题与winform和wpf无关.
    3. 问题net standard和net frameworl无关
    4. [链式加载]
      Assembly.ReflectionOnlyLoad(File.ReadAllBytes(dll)); 映射区加载并不导致问题;
      Assembly.Load(File.ReadAllBytes(dll)); 导致问题的只有内存区加载;
    5. 占用objDebug而不是binDebug...
    6. 重复编译四次[被加载]会通过编译..(说明了vs内部有机制释放
    7. 如果写了一个编译后事件,将binDebug的dll复制到H盘目录下:
    copy $(TargetPath)  "H:"

    然后拖拉H盘下的这个dll,再去编译一次.你会惊讶地发现:

    严重性    代码    说明    项目    文件    行    禁止显示状态
    错误    CS2012    无法打开“D:桌面被加载ClassLibrary1objDebugClassLibrary1.pdb”进行写入 --“文件“D:桌面被加载ClassLibrary1objDebugClassLibrary1.pdb”正由另一进程使用,因此该进程无法访问此文件。”    
    ClassLibrary1 D:桌面被加载ClassLibrary1CSC 1 活动

    怎么也占用了呢?明明加载的都跨盘了......而且这个时候只需要再编译一次,就能通过...刚刚是四次....

    说明vs会检索现有所有打开的vs程序下的工程??

    如之前的文章所知:我们最后的解决方法是非vs调试打开软件,感觉或许可以通过设置vs来中断它原本的占用.. 

  • 相关阅读:
    noi 1944 吃糖果
    noi 6049 买书
    noi 2985 数字组合
    noi 2728 摘花生
    noi 2718 移动路线
    noi 4977 怪盗基德的滑翔翼
    noi 8780 拦截导弹
    noi 1996 登山
    NOI 动态规划题集
    图的色数
  • 原文地址:https://www.cnblogs.com/JJBox/p/14033677.html
Copyright © 2011-2022 走看看