lin0799 发表于 2009-11-23 17:03:00

[讨论][求助]两个怪问题,附上源码

<p>遇到两个怪问题,请各位高手帮忙看看。</p><p>环境:Microsoft Visual Studio 2005 与 AutoCAD 2008 - Simplified Chinese</p><p>问题1:</p><p>用netload加载我的“CadNetTest.dll”,先执行里面的“savetest”命令,再执行“opentest”,出现图“Snap1.JPG”的错(无法找到程序集“CadNetTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”。);</p><p>问题1的解决方法是:将“CadNetTest.dll”放在cad的安装目录下,但会对于装有多个版本cad时,打包程序要复制多份到各cad的目录下,这样不好;</p><p><br/>问题2:</p><p>将“CadNetTest.dll”所在的目录加在cad的“支持文件搜索路径”下时(如图Snap2.JPG),重启cad,些时所有命令都无效呀(如图Snap3.JPG)</p><p>问题2的解决方法是:用图Snap4.JPG 生成的项目又可以,上面的项目我是用“类库”生成的,到底错在哪;</p>

雪山飞狐_lzh 发表于 2009-11-23 17:20:00

<p>反序列化的问题参考这个帖子</p><p><a href="http://www.mjtd.com/bbs/dispbbs.asp?boardid=33&amp;replyid=106005&amp;id=70085&amp;page=10&amp;skin=0&amp;landlord=0&amp;Star=2">http://www.mjtd.com/bbs/dispbbs.asp?boardid=33&amp;replyid=106005&amp;id=70085&amp;page=10&amp;skin=0&amp;landlord=0&amp;Star=2</a></p><p>将“CadNetTest.dll”所在的目录加在cad的“支持文件搜索路径”下时(如图Snap2.JPG),重启cad,些时所有命令都无效呀</p><p>应该不会出现这样的问题,贴上你的注册表项的内容看看</p>

lin0799 发表于 2009-11-23 17:26:00

狐哥,你就用我上面的工程试呀,我是用netload加载的呀,我在几台电脑上试过了,一样

雪山飞狐_lzh 发表于 2009-11-23 17:45:00

二楼的帖子有看么?

using System;
using System.Collections.Generic;
using System.Text;
using Autodesk.AutoCAD.Runtime;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using AcadApp = Autodesk.AutoCAD.ApplicationServices.Application;

namespace CadNetTest
{
    public class UBinder : SerializationBinder
    {
      public override Type BindToType(string assemblyName, string typeName)
      {
            return Type.GetType(typeName);
      }
    }
    public class Class1
    {
      
      public void test()
      {
            AcadApp.ShowAlertDialog("test");
      }
      
      public void savetest()
      {
            try
            {
                SaveProjData(@"c:\\li.tmp");
            }
            catch (System.Exception e)
            {
                AcadApp.ShowAlertDialog(e.Message);
            }
      }
      
      public void opentest()
      {
            try
            {
                GetProjData(@"c:\\li.tmp");
            }
            catch (System.Exception e)
            {
                AcadApp.ShowAlertDialog(e.Message);
            }
      }
      public static void GetProjData(string strProjFile)
      {
            ProjectData objRtn = new ProjectData();
            if (File.Exists(strProjFile))
            {
                IFormatter formatter = new BinaryFormatter();
                formatter.Binder = new UBinder();
                Stream stream = new FileStream(strProjFile, FileMode.Open, FileAccess.Read, FileShare.Read);
                objRtn = (ProjectData)formatter.Deserialize(stream);
                stream.Close();
            }
            string strTemp = objRtn.BeamFile;
      }
      /// <summary>
      /// 保存数据
      /// </summary>
      /// <param name="strProjFile"></param>      
      public static void SaveProjData(string strProjFile)
      {
            ProjectData objProjData = new ProjectData();
            objProjData.BeamFile = "test";
            if (File.Exists(strProjFile))
            {
                File.Delete(strProjFile);
            }
            IFormatter formatter = new BinaryFormatter();
            Stream stream = new FileStream(strProjFile, FileMode.Create, FileAccess.Write, FileShare.None);
            formatter.Serialize(stream, objProjData);
            stream.Close();
      }
    }
}

lin0799 发表于 2009-11-24 16:49:00

<p>第一问解决了;第二问呀,没解决,老出“未知命令”</p>

雪山飞狐_lzh 发表于 2009-11-24 21:36:00

<p>你提供的样例没有发现问题的</p><p>两个dll设置“复制本地”为false么?</p>

lin0799 发表于 2009-11-25 08:34:00

狐哥,dll复制到本地了呀,不加搜索路径是可以的,加了搜索路径就不行呀,我在多台电脑上试了,看看这个工程咱回事?
页: [1]
查看完整版本: [讨论][求助]两个怪问题,附上源码