错误截图:
WPF项目 A界面按钮方法调用成员实例B里面这个初始化Mat对象方法
后台ViewModel代码类似:
AViewModel{
B b;
public void BtnClick(){
b.test();
}
}
报错:
看一眼根据经验确认是DLL的问题,于是乎把nuget包配置和程序集引用两部分尝试了很多次 ,"OpenCvSharpExtern.dll"也确实是有,很遗憾,一直没出现效果。
还衍生除了一系列疑问:
1.C#中 nuget和引用程序集路径哪一个优先问题:
我发现少某个包的话,可以从nuget搜索下载,或者本地有dll的话可以手动添加程序集引用,但是如果手动添加引用的程序集(dll)已经存在nuget包中的话,引用的那个dll的地址就会在C盘nuget包默认地址,而不是你添加引用的位置;
比如:
我添加OpenCvSharp引用的位置在D盘:
但是勾选后点击确认的话:
会出现黄色感叹号,搜索了一下大多说是版本对不上的问题,但是我发现可以按照下面步骤解决:
打开配置管理器 切换一下当前项目的平台属性为any cup,等待vs自动刷新后再切换回来64,关闭配置管理器后你会返现黄色感叹号消失了:
点击程序集还显示属性信息,可以发现位置根本不是我之前添加引用的位置,而是在C盘nuget文件夹下;
如果想让位置变回来,这个时候把nuget包里面OpenCvSharp移除掉就OK;
上面只是问题描述,并没有从根本上理解,希望路过的高工不吝赐教;
2.packages.config 与 包
packages.config:
包:
目前看来功能是一样的,但是不知道为什么显示不一样,我截图两个项目的框架都是一样的net48
-------------------------------------------------------------------------------------------------------------------------------
回到问题本身,尝试了很多方法,这里推荐两个链接,但是我不适用。
http://t.csdnimg.cn/OEq7A
http://t.csdnimg.cn/g8jRr
最终解决办法:
在A界面后端类构造函数里提前调用一下方法:
代码类似:
AViewModel{
B b;
public AViewModel(){
b.test();
}
public void BtnClick(){
b.test();
}
}
再运行点击按钮不会报错了,目前只算是找到规律,还是不知道根本原因在哪里,希望各位看官不吝赐教 ;