解决方案 »
- (winform) DataGridView手动添加行后,怎样为行中的DataGridViewComboBoxColumn添加下拉选项?
- asp.net 关于时间日期控件的问题
- 求高手帮忙分析下代码。我想根据Modbus03功能码代码修改出01功能码代码,求高手给个思路,感激不尽!!(串口/Modbus~RTU,WINFORM)
- 想用C#写一个论坛挂机器,高人给点思路!!!
- 关于图片显示的问题
- SandBar的菜单项如何显示气泡提示
- MSDN安装问题
- c#接口与其派生类的关系的疑惑
- 怪事!关于SMTP
- 如何知道哪个窗口被激活?
- C# 串口 SerialPort读取串口数据回显到文本框(显示不出来?)
- c# GDI+绘图时,如何局部刷新?
=============
你把这个工程拷贝到非本机上,能正常调用你那个dll吗?
发现不行,就以为是C# DLL需要注册才能使用,但是注册也不成功;
C# 的支持 copy 模式的,不需要注册的。
将本机的调用工程连带DLL,拷到其他机器上,编译没有问题;
删除之后重新添加引用也没有问题,真奇怪?
都是安装了VS2008 的机器,两台机器都能编译自己的C# DLL,及自己调用自己;
拷贝给其他机器就不能调用了。
DLL 添加引用后,看不到DLL的函数。
但是编译之后,使用你新编译的 DLL 就有问题了?如果是这样,那么就是版本的问题。
强签名的 DLL 就是这样的。
看看是不是这个问题?
A机器编译的A.dll,在A机器上调用没有问题;
B机器编译的B.dll,在B机器上调用没有问题;
问题是,A机器不能调用拷贝过来的B.dll, B机器也不能调用拷贝过来的A.dll
做过测试,将A机器上调用A.dll的工程,整个工程拷贝到B机器,移除引用A.dll再添加A.dll也没有问题,正常编译。
然后编译,看看错误是什么?
比如 CPU的架构是否一致等等。
1. 编译 DLL 的 .NET Framework 版本,目标机器上需要包含相应版本的 .NET Framework
2. DLL 所引用的其他 DLL 是否在运行的机器上也存在
3. 不需要 RegAsm 进行注册
A1.查看两个C# DLL的信息,所用.Net的版本都一样;
A2.两个DLL都是用VS2008 在Win 7系统上编译出来的;
A3.两个DLL都只调用了.Net本身的类库;
在不能正常调用 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);
}
}
异常报错:未将对象引用设置到对象的实例
也就是变量没有NewC# 示例是如下写的,new放在了构造函数里:这样有问题吗?
namespace SampleSpace
{
class SampleClass
{
private Socket socketObj = null;
public SampleClass()
{
socketObj = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
}
}
}
异常报错:未将对象引用设置到对象的实例
也就是变量没有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);