解决方案 »

  1.   

    2.在本机另外建立C#的调用工程,添加DLL引用,可正常使用
    =============
    你把这个工程拷贝到非本机上,能正常调用你那个dll吗?
      

  2.   

    正常来说 一样的系统(32 64) 应该没问题 也从来没遇到过..话说 这非托管的DLL 能注册?????
      

  3.   

    这个DLL没有调用其他自定义的DLL
      

  4.   

    刚接触C#,以为像C++一样,编译一个DLL,就可以在其他机器上正常调用;
    发现不行,就以为是C# DLL需要注册才能使用,但是注册也不成功;
      

  5.   

    别的机器上是否安装了 .NET framework ?
     C# 的支持 copy 模式的,不需要注册的。
      

  6.   


    将本机的调用工程连带DLL,拷到其他机器上,编译没有问题;
    删除之后重新添加引用也没有问题,真奇怪?
      

  7.   


    都是安装了VS2008 的机器,两台机器都能编译自己的C# DLL,及自己调用自己;
    拷贝给其他机器就不能调用了。
    DLL 添加引用后,看不到DLL的函数。
      

  8.   

    也就是,另外的机器,使用了你的 DLL 去编译时没有问题的。
    但是编译之后,使用你新编译的 DLL 就有问题了?如果是这样,那么就是版本的问题。
    强签名的 DLL 就是这样的。
    看看是不是这个问题?
      

  9.   

    不是,情况如下:
    A机器编译的A.dll,在A机器上调用没有问题;
    B机器编译的B.dll,在B机器上调用没有问题;
    问题是,A机器不能调用拷贝过来的B.dll,   B机器也不能调用拷贝过来的A.dll
    做过测试,将A机器上调用A.dll的工程,整个工程拷贝到B机器,移除引用A.dll再添加A.dll也没有问题,正常编译。
      

  10.   

    B 机器在编译工程的时候,是怎么引用 A 的 DLL 的呢?
      

  11.   

    在B机器上创建调用工程,拷贝A.dll到B机器的项目工程中,添加引用,进行调用;
      

  12.   

    你在 另外机器上引用你的 DLL ,如果可以引用,直接用代码调用她。
    然后编译,看看错误是什么?
    比如 CPU的架构是否一致等等。
      

  13.   

    应该和机器没有关系,你需要检查:
    1. 编译 DLL 的 .NET Framework 版本,目标机器上需要包含相应版本的 .NET Framework
    2. DLL 所引用的其他 DLL 是否在运行的机器上也存在
    3. 不需要 RegAsm 进行注册
      

  14.   


    A1.查看两个C# DLL的信息,所用.Net的版本都一样;
    A2.两个DLL都是用VS2008 在Win 7系统上编译出来的;
    A3.两个DLL都只调用了.Net本身的类库;
      

  15.   

    如果你做的不是com对象是不用regasm注册的。
      

  16.   

    因为看不到你的运行环境,所以只能这样来测试了:
    在不能正常调用 DLL 的机器上运行一个小程序,通过反射来加载类型并创建对象,通过捕获异常检查是哪里发生了问题
            static void Main(string[] args)
            {
                try
                {
                    // 例如我有一个类库,里面有一个 Class 叫 Class1
                    object obj = System.Reflection.Assembly.LoadFile(@"C:\PROJECTS\NET\CSDNTest\SampleLibrary\bin\Debug\SampleLibrary.dll").GetType("SampleLibrary.Class1").GetConstructor(new Type[] { }).Invoke(null);
                }
                catch (Exception ex)
                {
                    // 看看发生了什么
                    System.Console.WriteLine(ex.Message);
                }
            }
      

  17.   


    异常报错:未将对象引用设置到对象的实例
    也就是变量没有NewC# 示例是如下写的,new放在了构造函数里:这样有问题吗?
    namespace SampleSpace
    {
         class SampleClass
        {
             private Socket socketObj = null;
             public SampleClass()
            {
                 socketObj = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
            }
         }
    }
      

  18.   


    异常报错:未将对象引用设置到对象的实例
    也就是变量没有NewC# 示例是如下写的,new放在了构造函数里:这样有问题吗?
    namespace SampleSpace
    {
         class SampleClass
        {
             private Socket socketObj = null;
             public SampleClass()
            {
                 socketObj = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
            }
         }
    }哦,那还真的是奇怪了,SampleClass 的修饰符是 internal (C# 默认修饰符),所以反射的部分没有问题。我觉得你再检查一下你文件的属性吧,是不是你的应用没有访问那个 DLL 文件或者文件路径的权限(windows 权限)。然后再确认一下,你的反射的调用是这样写的吧
    object obj = System.Reflection.Assembly.LoadFile(@"C:\PROJECTS\NET\CSDNTest\SampleLibrary\bin\Debug\SampleLibrary.dll").GetType("SampleSpace.SampleClass").GetConstructor(new Type[] { }).Invoke(null);