可能原因1:
引用库的路径发生了改变,在相应的路径下没有此库,如下图:
选中引用的库,属性栏可以看到引用库的路径,在此路径下去查找,是否有这个库,如果没有的话,就会出现报错:CS0246未找到类型或命名空间名"HalconDotNet'"(是否缺少using指令或程序集引用?)
此时,如果之前正常编译过,在bin->x64->debug下有此库的话,虽然会报错,但是编译也会正常运行。
解决方案:
1. 把库拷贝到此路径下。
2. 移除此库,重新添加引用库到新的位置。
建议把项目引用的dll文件都放到这个项目的目录下,避免程序拷贝到其他电脑的时候出现找不到库的问题。
可能原因2:
dll目标的 .net 版本与现在的 .net 版本不匹配。
dll库的属性信息里面可以看到运行时版本,这里是4.0
在菜单栏里面找到项目,属性,查看当前工程的目标框架,比如这里由于目标框架是3.0,跟库的版本不匹配,所以导致
的报错。
解决方案:
设置比库更高的目标框架版本。
设置框架为4.0后,运行还是会失败,根据警告提示,这个库之前是由4.7.2框架生成的,需要设置到跟这个框架同版本或者更高。
设置为4.7.2,运行正常。
另外,halcon的halcondotnet.dll有两个框架的库,一个是dotnet20,一个是dotnet35,
使用dotnet20的库,项目的目标框架版本要大于等于2.0。
使用dotnet35的库,项目的目标框架版本要大于等于3.5。
否则会报错。
.NET Framework 各个版本的区别
以下信息来自百度:
目前已发行的版本有1.0、1.1、2.0、3.0、3.5、4.0、4.5(及4.5.1、4.5.2)、4.6(及4.6.1)等。
1.0版本:最初的.net framework版本,作为一个独立的工具包存在。
1.1版本:是1.1的升级版本,加入了对ASP.NET代码安全访问,自带了对ODBC和Oracle数据库的支持。
2.0版本:对多线程、存储器的分配、代码加载提供了很好的控制。更新大量API。由于C#语言支持泛型,所以新增了支持泛型的类库。
3.0版本:依然使用.NET Framework 2.0版本公共语言运行库(CLR),并加入了4个新框架:Windows Presentation Foundation(WPF)、Windows Communication Foundation(WCF)、Windows Workflow Foundation(WF)、Windows CardSpace:提供一个SSO的解决方案,每个用户都有各自的CardSpace。
3.5版本:依然使用.NET Framework 2.0版本公共语言运行库(CLR),增加对LINQ的支持、扩展方法(Extension Method)属性(Attribute)、支持Lambda表达式,增加ADO .NET Entity Framework支持。
小结:.NET Framework 版本 2.0、3.0 和 3.5 是使用 CLR (CLR 2.0) 的相同版本生成的。 每个版本增量地生成于早期 .NET Framework 版本。所以在安装3.5版本是就会自动安装2.0和3.0版本。卸载时也从高版本开始卸载。
4.0版本:增加了并行的支持。关闭3.5的分层,是一个新的框架,可以与3.5同时运行。自带高度安全网络系统。
4.5版本:一个针对 .NET Framework 4 的高度兼容的就地更新,提供了Metro风格,支持生成和运行下一代应用程序和 Web 服务的内部 Windows 组件。