我已经使用Windows窗体和C#开发了一个opencv应用程序。
我从Nuget软件包管理器(EMGU.CV和ZedGraph)获得的opencv软件包。
一切都可以在Visual Studio中正常运行,但是当我发布项目并在计算机中安装程序时,当我单击执行一些opencv操作的按钮时,它将引发异常。
我猜opencv软件包没有与最终发布的项目一起提供,所以我如何做使其在发布时导出,我认为这将是一个自动化过程,我已经使用了其他nuget软件包,没问题。
我在这里想念什么?
答案 0 :(得分:0)
几天后等待答案,并寻找解决方案,我已经弄清楚了如何解决此问题。
我遇到了这个问题:The type initializer for 'Emgu.CV.CvInvoke' threw an exception
更确切地说,这部分是
首先,我不知道为什么编译在Visual Studio环境中运行良好,为什么不按原样发布项目。出于某种原因,Nuget软件包不足以发布项目,您需要自己手动添加.dll文件(不确定为什么以前使用Nuget软件包后为什么会发生这种情况,并且不需要此解决方法)。
要查找.dll文件,请转至项目目录,然后转至bin \ Debug \ x64或bin \ Debug \ x86(根据您要定位的操作系统-32位还是64位-在我的情况下我从x86文件夹中添加了所有.dll文件,如果有疑问,我想您可以从两个文件夹中添加)。
每次在Visual Studio环境中运行项目时,都会构建项目的Debug文件夹,因此,如果Debug文件夹为空,则只需要运行一次项目就可以在其中找到自动生成的文件。夹。在这里仅需说明,您可以使用bin内的Debug或Release文件夹,只需记住检查是否在Debug模式下为Debug文件夹编译了项目,或者在Release模式下为Release文件夹编译了项目,否则所需的文件夹将为空,如前所述,我发现生成的文件之间没有差异,我从Debug \ x86添加了dll文件。
找到.dll文件后,进入Visual Studio,右键单击“解决方案资源管理器”选项卡中的项目,然后单击“添加--->现有项”。
转到.dll文件所在的文件夹,全选,然后单击“添加”。
完成此操作后,.dll文件将显示在解决方案资源管理器中。
右键单击在解决方案资源管理器中添加的每个.dll文件,然后单击“属性”以打开属性选项卡。在“属性”选项卡上,转到“复制到目录”选项,然后将字段更改为“始终复制”(上面提供的emgu文档链接指出可以使用选项“如果更新则复制”,但是要确保我选择了“始终复制”,效果很好)为了我)。对所有添加的.dll文件重复该过程。
现在您准备好按原样发布项目,只需记住在发布项目之前每次都要这样做,以查看是否没有.dll文件丢失,因此一旦进入程序的最终版本,请运行它,然后确保检查.dll文件,它可能需要添加或删除新文件。