diwar的个人博客分享 http://blog.sciencenet.cn/u/diwar

博文

NETUNLOAD功能的实现

已有 906 次阅读 2024-11-1 16:05 |系统分类:科研笔记

调试.NET程序时,由于.NET程序模块只能在AutoCAD结束时才能被卸载,所以重新编译必须频繁关闭、打开AutoCAD,十分不便,可尝试一下解决方案。

用System.IO.File.ReadAllBytes将.NET程序类库dll读取到内存,然后用Assembly.Load加载内存中的dll。

由于System.IO.File.ReadAllBytes读取完dll文件后会自动关闭,不占用dll文件,所以可以重新编译.NET程序。

这样,我们可以在不关闭AutoCAD的前提下卸载.NET程序。

关键的C#代码是以下四句:

//调用Windows.Forms选择一个文件

OpenFileDialog fileDialog = new OpenFileDialog();

//选择的文件路径

string file_dir = fileDialog.FileName;

//打开文件,将文件以二进制方式复制到内存,自动关闭文件

byte[] buffer = System.IO.File.ReadAllBytes(file_dir);

//加载内存中的文件

Assembly assembly = Assembly.Load(buffer);

=================

using System;

using System.Linq;

using Autodesk.AutoCAD.EditorInput;

using Autodesk.AutoCAD.Runtime;

using System.Windows.Forms;

using System.Reflection;

namespace myNetLoad

{

  public class MyClass

  {

     [CommandMethod("NL")]

    public void myLoad()

    {

       Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;

      OpenFileDialog fileDialog = new OpenFileDialog();

       if (fileDialog.ShowDialog() == DialogResult.OK) {

       string file_dir = fileDialog.FileName;

      ed.WriteMessage("文件路径:" + file_dir);

       byte[] buffer = System.IO.File.ReadAllBytes(file_dir);

       Assembly assembly = Assembly.Load(buffer);

     }

    }

  }

}

======================

修改AssemblyInfo.cs中的版本信息。

[assembly: AssemblyVersion("1.0.0.0")]

只有不同版本的dll才能用Assembly.Load覆盖。



https://blog.sciencenet.cn/blog-3620912-1458093.html


下一篇:2024秋
收藏 IP: 111.187.47.*| 热度|

1 杨正瓴

该博文允许注册用户评论 请点击登录 评论 (1 个评论)

数据加载中...
扫一扫,分享此博文

全部作者的其他最新博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-22 22:15

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部